Il comando ldconfig viene utilizzato per comunicare al sistema le nuove posizioni delle librerie condivise. Le informazioni sugli usi fornite da /etc/ld.so.conf file di configurazione.
Il comando ldconfig crea un database cache di tutte le librerie basato sul file di configurazione. Questa cache è normalmente archiviata in /etc/ld.so.cache file.
Ecco la sintassi del comando ldconfig:
# ldconfig [option]
La tabella seguente descrive le opzioni utili per il comando ldconfig:
Opzione | Descrizione |
---|---|
-v | Prolisso; stampare informazioni aggiuntive. |
-n | Utilizzare un'opzione della riga di comando per specificare la posizione delle nuove librerie condivise. Esempio:ldconfig -n /some/directory. |
-f | Specificare un file di configurazione diverso anziché quello predefinito (/etc/ld.so.conf ). |
-p | Utilizzare per stampare un elenco delle librerie correnti memorizzate nel file della cache. |
File di configurazione /etc/ld.so.conf
Il file di configurazione principale per le librerie condivise è il file /etc/ld.so.conf; tuttavia, in genere c'è solo una singola riga in questo file:
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf
La riga di inclusione in questo file indica al sistema di utilizzare anche tutti i file di configurazione nella directory specificata. Nel caso dell'esempio precedente, sarebbero tutti i file che terminano con ".conf" nella directory /etc/ld.so.conf.d.
Il file di configurazione stesso è semplice. Contiene solo una directory in cui sono archiviate le librerie condivise:
# 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
Elenca le librerie memorizzate nella cache
Per elencare le librerie memorizzate nella cache, puoi usare l'opzione -p del comando ldconfig come mostrato di seguito:
# 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 ....
Aggiungi nuove librerie usando ldconfig
Per aggiungere nuove librerie condivise al sistema, devi prima scaricare le librerie nel sistema e inserirle in una directory. Dopo aver aggiunto nuove librerie, creare un file di configurazione nella directory /etc/ld.so.conf.d e quindi eseguire il comando ldconfig. Tutte queste attività dovrebbero essere eseguite come utente root:
# ls /usr/lib64/test mylib.so.1 # cat /etc/ld.so.conf.d/libtest.conf /usr/lib64/test # ldconfig
Se il comando ldconfig viene eseguito correttamente, non ci sarà alcun output.
Variabile LD_LIBRARY_PATH
Gli utenti regolari non possono eseguire correttamente il comando ldconfig; tuttavia, se un utente normale desidera utilizzare una libreria condivisa personalizzata, quell'utente può scaricare questo file nella propria directory home e utilizzare LD_LIBRARY_PATH per indicare la posizione dei file della libreria personalizzata, in questo modo:
$ ls /home/testuser/lib mylib.so.1 $ LD_LIBRARY_PATH=/home/testuser/lib
Se eseguito in modo utile, l'ultimo comando non dovrebbe produrre alcun output. Per rendere questa modifica permanente, inserisci LD_LIBRARY_PATH=/home/testuser/lib comando nel tuo ~/.bashrc file.
$ vi ~/.bashrc LD_LIBRARY_PATH=/home/testuser/lib export LD_LIBRARY_PATH
ldd comando
Puoi vedere quali librerie condivise utilizza un comando specifico usando il comando ldd. Ecco la sintassi del comando ldd:
# ldd [options] FILE
Ad esempio:
# 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)
Lo scopo dell'utilizzo del comando ldd è di risolvere i problemi con il codice che si sta scrivendo. Questo comando indica non solo quali librerie vengono chiamate, ma in particolare da quale directory viene chiamata ciascuna libreria. Questo può essere estremamente utile quando una libreria non si comporta come ti aspetteresti che si comporti.
La tabella seguente descrive le opzioni utili per il comando ldd:
Opzione | Descrizione |
---|---|
-v | Prolisso; stampare informazioni aggiuntive. |
-u | Visualizza eventuali dipendenze dirette non utilizzate. |