Pro jednorázové nastavení nastavte proměnnou LD_LIBRARY_PATH
na seznam adresářů k vyhledávání oddělených dvojtečkou. To je analogické s PATH
pro spustitelné soubory, kromě toho, že standardní systémové adresáře jsou navíc prohledávány po adresářích specifikovaných prostřednictvím prostředí.
LD_LIBRARY_PATH=/usr/local/lib64 ./cart5
Pokud máte program, který uchovává knihovny na nestandardním místě a není schopen je sám najít, můžete napsat obalový skript:
#!/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]"
Seznam standardních systémových adresářů je veden v /etc/ld.so.conf
. Nejnovější systémy umožňují, aby tento soubor zahrnoval další soubory; pokud vaše obsahuje něco jako include /etc/ld.so.conf.d/*.conf
, vytvořte nový soubor s názvem /etc/ld.so.conf.d/mala.conf
obsahující adresáře, které chcete přidat. Po změně /etc/ld.so.conf
nebo zahrnutý soubor, spusťte /sbin/ldconfig
aby se vaše změny projevily (toto aktualizuje mezipaměť).
(LD_LIBRARY_PATH
platí také pro mnoho dalších unices, včetně FreeBSD, NetBSD, OpenBSD, Solaris a Tru64. HP-UX má SHLIB_PATH
a Mac OS X má DYLD_LIBRARY_PATH
. /etc/ld.so.conf
má analogy na většině unices, ale umístění a syntaxe se výrazně liší.)
Pokud se chcete vyhnout LD_LIBRARY_PATH, můžete to udělat také během propojování:
gcc -o exename -L/path/to/dynamiclib/ -lnameofLib \
-Wl,-R/path/to/dynamiclib/ sourceCode1.c ...
-Wl,... se používá k předání dalších příkazů linkeru a v tomto případě pomocí -R říkáte linkeru, aby uložil tuto cestu jako "výchozí vyhledávací cestu" pro .so.
Uchovávám si poznámky o mnoha malých tipech, jako je tento, na svých stránkách:
https://www.thanassis.space/tricks.html