Der Befehl ldconfig wird verwendet, um dem System neue Speicherorte gemeinsam genutzter Bibliotheken mitzuteilen. Die von /etc/ld.so.conf bereitgestellten Informationen werden verwendet Konfigurationsdatei.
Der Befehl ldconfig erstellt eine Cache-Datenbank aller Bibliotheken basierend auf der Konfigurationsdatei. Dieser Cache wird normalerweise in /etc/ld.so.cache gespeichert Datei.
Hier ist die Syntax des ldconfig-Befehls:
# ldconfig [option]
Die folgende Tabelle beschreibt nützliche Optionen für den Befehl ldconfig:
Option | Beschreibung |
---|---|
-v | Ausführlich; zusätzliche Informationen drucken. |
-n | Verwenden Sie eine Befehlszeilenoption, um den Speicherort neuer gemeinsam genutzter Bibliotheken anzugeben. Beispiel:ldconfig -n /some/directory. |
-f | Geben Sie eine andere Konfigurationsdatei als die Standarddatei an (/etc/ld.so.conf ). |
-p | Zum Drucken einer Liste der aktuellen Bibliotheken, die in der Cache-Datei gespeichert sind. |
Konfigurationsdatei /etc/ld.so.conf
Die primäre Konfigurationsdatei für gemeinsam genutzte Bibliotheken ist die Datei /etc/ld.so.conf; normalerweise enthält diese Datei jedoch nur eine einzige Zeile:
# cat /etc/ld.so.conf include ld.so.conf.d/*.conf
Die include-Zeile in dieser Datei weist das System an, auch alle Konfigurationsdateien im angegebenen Verzeichnis zu verwenden. Im Fall des vorherigen Beispiels wären das alle Dateien mit der Endung „.conf“ im Verzeichnis /etc/ld.so.conf.d.
Die Konfigurationsdatei selbst ist einfach. Es enthält nur ein Verzeichnis, in dem die gemeinsam genutzten Bibliotheken gespeichert sind:
# 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
Zwischengespeicherte Bibliotheken auflisten
Um die zwischengespeicherten Bibliotheken aufzulisten, können Sie die Option -p des Befehls ldconfig wie unten gezeigt verwenden:
# 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 ....
Neue Bibliotheken mit ldconfig hinzufügen
Um dem System neue gemeinsam genutzte Bibliotheken hinzuzufügen, würden Sie zuerst die Bibliotheken auf das System herunterladen und sie in einem Verzeichnis ablegen. Nachdem Sie neue Bibliotheken hinzugefügt haben, erstellen Sie eine Konfigurationsdatei im Verzeichnis /etc/ld.so.conf.d und führen dann den Befehl ldconfig aus. Alle diese Aufgaben sollten als Root-Benutzer durchgeführt werden:
# ls /usr/lib64/test mylib.so.1 # cat /etc/ld.so.conf.d/libtest.conf /usr/lib64/test # ldconfig
Wenn der Befehl ldconfig erfolgreich ausgeführt wird, erfolgt keine Ausgabe.
LD_LIBRARY_PATH-Variable
Normale Benutzer können den Befehl ldconfig nicht erfolgreich ausführen; Wenn jedoch ein normaler Benutzer eine benutzerdefinierte gemeinsam genutzte Bibliothek verwenden möchte, kann dieser Benutzer diese Datei in sein Home-Verzeichnis herunterladen und den LD_LIBRARY_PATH verwenden, um den Speicherort der benutzerdefinierten Bibliotheksdateien anzugeben, wie folgt:
$ ls /home/testuser/lib mylib.so.1 $ LD_LIBRARY_PATH=/home/testuser/lib
Bei sinnvoller Ausführung sollte der letzte Befehl keine Ausgabe erzeugen. Um dies dauerhaft zu ändern, platzieren Sie LD_LIBRARY_PATH=/home/testuser/lib Befehl in Ihrer ~/.bashrc Datei.
$ vi ~/.bashrc LD_LIBRARY_PATH=/home/testuser/lib export LD_LIBRARY_PATH
ldd-Befehl
Mit dem Befehl ldd können Sie sehen, welche gemeinsam genutzten Bibliotheken ein bestimmter Befehl verwendet. Hier ist die Syntax des ldd-Befehls:
# ldd [options] FILE
Zum Beispiel:
# 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)
Der Zweck der Verwendung des Befehls ldd besteht darin, Probleme mit dem von Ihnen geschriebenen Code zu beheben. Dieser Befehl teilt Ihnen nicht nur mit, welche Bibliotheken aufgerufen werden, sondern insbesondere aus welchem Verzeichnis jede Bibliothek aufgerufen wird. Dies kann äußerst nützlich sein, wenn sich eine Bibliothek nicht so verhält, wie Sie es erwarten würden.
Die folgende Tabelle beschreibt nützliche Optionen für den Befehl ldd:
Option | Beschreibung |
---|---|
-v | Ausführlich; zusätzliche Informationen drucken. |
-u | Alle ungenutzten direkten Abhängigkeiten anzeigen. |