Příkaz ldconfig se používá k informování systému o nových umístěních sdílených knihoven. Používá informace poskytnuté /etc/ld.so.conf konfigurační soubor.
Příkaz ldconfig vytvoří mezipaměťovou databázi všech knihoven na základě konfiguračního souboru. Tato mezipaměť je normálně uložena v /etc/ld.so.cache soubor.
Zde je syntaxe příkazu ldconfig:
# ldconfig [option]
Následující tabulka popisuje užitečné volby pro příkaz ldconfig:
Možnost | Popis |
---|---|
-v | Verbose; vytisknout další informace. |
-n | K určení umístění nových sdílených knihoven použijte volbu příkazového řádku. Příklad:ldconfig -n /some/directory. |
-f | Určete jiný než výchozí konfigurační soubor (/etc/ld.so.conf ). |
-p | Slouží k vytištění seznamu aktuálních knihoven uložených v souboru mezipaměti. |
Konfigurační soubor /etc/ld.so.conf
Primárním konfiguračním souborem pro sdílené knihovny je soubor /etc/ld.so.conf; obvykle je však v tomto souboru pouze jeden řádek:
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf
Řádek include v tomto souboru říká systému, aby také použil všechny konfigurační soubory v určeném adresáři. V případě předchozího příkladu by to byly všechny soubory, které končí na „.conf“ v adresáři /etc/ld.so.conf.d.
Samotný konfigurační soubor je jednoduchý. Obsahuje pouze adresář, ve kterém jsou uloženy sdílené knihovny:
# more /etc/ld.so.conf.d/libiscsi-x86_64.conf /usr/lib64/iscsi # ls /usr/lib64/iscsi libiscsi.so.2 libiscsi.so.2.0.10900
Seznam knihoven uložených v mezipaměti
Chcete-li zobrazit seznam knihoven uložených v mezipaměti, můžete použít volbu -p příkazu ldconfig, jak je uvedeno níže:
# ldconfig -p | more 784 libs found in cache `/etc/ld.so.cache' p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so libz.so.1 (libc6,x86-64) => /lib64/libz.so.1 libyaml-0.so.2 (libc6,x86-64) => /lib64/libyaml-0.so.2 libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2 libxtables.so.10 (libc6,x86-64) => /lib64/libxtables.so.10 libxslt.so.1 (libc6,x86-64) => /lib64/libxslt.so.1 libxshmfence.so.1 (libc6,x86-64) => /lib64/libxshmfence.so.1 libxml2.so.2 (libc6,x86-64) => /lib64/libxml2.so.2 libxmlrpc_util.so.3 (libc6,x86-64) => /lib64/libxmlrpc_util.so.3 libxmlrpc_server_cgi.so.3 (libc6,x86-64) => /lib64/libxmlrpc_server_cgi.so.3 libxmlrpc_server_abyss.so.3 (libc6,x86-64) => /lib64/libxmlrpc_server_abyss.so.3 ....
Přidejte nové knihovny pomocí ldconfig
Chcete-li do systému přidat nové sdílené knihovny, musíte je nejprve stáhnout do systému a umístit je do adresáře. Po přidání nových knihoven byste vytvořili konfigurační soubor v adresáři /etc/ld.so.conf.d a poté spustili příkaz ldconfig. Všechny tyto úlohy by měly být prováděny jako uživatel root:
# ls /usr/lib64/test mylib.so.1 # cat /etc/ld.so.conf.d/libtest.conf /usr/lib64/test # ldconfig
Pokud se příkaz ldconfig provede úspěšně, nebude žádný výstup.
Proměnná LD_LIBRARY_PATH
Běžní uživatelé nemohou úspěšně spustit příkaz ldconfig; pokud však chce běžný uživatel používat vlastní sdílenou knihovnu, může si tento uživatel stáhnout tento soubor do svého domovského adresáře a použít LD_LIBRARY_PATH k označení umístění souborů vlastní knihovny, například:
$ ls /home/testuser/lib mylib.so.1 $ LD_LIBRARY_PATH=/home/testuser/lib
Pokud je proveden užitečně, neměl by poslední příkaz produkovat žádný výstup. Chcete-li provést trvalou změnu, umístěte LD_LIBRARY_PATH=/home/testuser/lib příkaz ve vašem ~/.bashrc soubor.
$ vi ~/.bashrc LD_LIBRARY_PATH=/home/testuser/lib export LD_LIBRARY_PATH
Příkaz ldd
Pomocí příkazu ldd můžete zjistit, jaké sdílené knihovny konkrétní příkaz používá. Zde je syntaxe příkazu ldd:
# ldd [options] FILE
Například:
# ldd /bin/ls linux-vdso.so.1 => (0x00007ffee2b3f000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff5a6c22000) libcap.so.2 => /lib64/libcap.so.2 (0x00007ff5a6a1d000) libacl.so.1 => /lib64/libacl.so.1 (0x00007ff5a6814000) libc.so.6 => /lib64/libc.so.6 (0x00007ff5a6447000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007ff5a61e5000) libdl.so.2 => /lib64/libdl.so.2 (0x00007ff5a5fe1000) /lib64/ld-linux-x86-64.so.2 (0x00007ff5a6e49000) libattr.so.1 => /lib64/libattr.so.1 (0x00007ff5a5ddc000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff5a5bc0000)
Účelem použití příkazu ldd je odstraňovat problémy s kódem, který píšete. Tento příkaz vám řekne nejen to, jaké knihovny jsou volány, ale konkrétně, ze kterého adresáře jsou jednotlivé knihovny volány. To může být extrémně užitečné, když se knihovna nechová tak, jak byste očekávali.
Následující tabulka popisuje užitečné volby pro příkaz ldd:
Možnost | Popis |
---|---|
-v | Verbose; vytisknout další informace. |
-u | Zobrazit všechny nepoužívané přímé závislosti. |