Setzen Sie einmalig die Variable LD_LIBRARY_PATH
zu einer durch Doppelpunkte getrennten Liste von zu durchsuchenden Verzeichnissen. Dies ist analog zu PATH
nach ausführbaren Dateien, außer dass die Standard-Systemverzeichnisse zusätzlich nach denen durchsucht werden, die durch die Umgebung angegeben sind.
LD_LIBRARY_PATH=/usr/local/lib64 ./cart5
Wenn Sie ein Programm haben, das Bibliotheken an einem nicht standardmäßigen Ort aufbewahrt und sie nicht selbst finden kann, können Sie ein Wrapper-Skript schreiben:
#!/bin/sh
if [ -n "$LD_LIBRARY_PATH" ]; then
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
else
LD_LIBRARY_PATH=/usr/local/lib64
fi
export LD_LIBRARY_PATH
exec /path/to/cart5 "[email protected]"
Die Liste der Standardsystemverzeichnisse wird in /etc/ld.so.conf
geführt . Neuere Systeme erlauben, dass diese Datei andere Dateien enthält; wenn Ihres so etwas wie include /etc/ld.so.conf.d/*.conf
enthält , erstellen Sie eine neue Datei namens /etc/ld.so.conf.d/mala.conf
mit den Verzeichnissen, die Sie hinzufügen möchten. Nachdem Sie /etc/ld.so.conf
geändert haben oder eine enthaltene Datei, führen Sie /sbin/ldconfig
aus damit Ihre Änderungen wirksam werden (dadurch wird ein Cache aktualisiert).
(LD_LIBRARY_PATH
gilt auch für viele andere Unices, einschließlich FreeBSD, NetBSD, OpenBSD, Solaris und Tru64. HP-UX hat SHLIB_PATH
und Mac OS X hat DYLD_LIBRARY_PATH
. /etc/ld.so.conf
hat Analoga auf den meisten Unices, aber der Ort und die Syntax unterscheiden sich stärker.)
Wenn Sie LD_LIBRARY_PATH vermeiden möchten, können Sie dies auch während des Verlinkens tun:
gcc -o exename -L/path/to/dynamiclib/ -lnameofLib \
-Wl,-R/path/to/dynamiclib/ sourceCode1.c ...
Das -Wl,... wird verwendet, um zusätzliche Befehle an den Linker zu übergeben, und in diesem Fall weisen Sie den Linker mit -R an, diesen Pfad als "Standardsuchpfad" für die .so.
zu speichernIch halte mir auf meiner Seite viele kleine Tipps wie diesen notiert:
https://www.thanassis.space/tricks.html