Linux
環境中缺少 LD_LIBRARY_PATH 變數是否正常?
我偶然發現在我的 Debian Jessie 上沒有
LD_LIBRARY_PATH
變數(確切地說printenv | grep LD
,沒有顯示與連結器相關的任何內容,echo "$LD_LIBRARY_PATH"
也沒有顯示任何內容)。在 x 終端仿真器(由於 setgid 可能會清除它)和基本終端 (
Ctrl+Alt+F1
) 中就是這種情況。我知道這
LD_LIBRARY_PATH
可能被認為是不好的,所以 Debian 可能會以某種方式阻止它,但另一方面,其中有一些文件/etc/ld.so.conf.d/
包含一些要添加到LD_LIBRARY_PATH
. 我的 rc 文件(我知道的)都沒有弄亂LD_LIBRARY_PATH
。為什麼我看不到
LD_LIBRARY_PATH
變數?
是的,您沒有任何明確
LD_LIBRARY_PATH
的 . 另請閱讀ldconfig(8)和ld-linux(8)以及關於rpath的資訊。請注意,ldconfig
更新/etc/ld.so.cache
,而不是LD_LIBRARY_PATH
. 有時,您會使用在連結時傳遞給的目錄顯式設置執行檔的rpath 。-Wl,-rpath,``gcc
如果您需要
LD_LIBRARY_PATH
(但您可能不需要),請自行設置(例如 in~/.bashrc
)。如果您需要係統範圍的設置,您可以考慮在安裝每個庫後添加
/usr/local/lib/
並執行/etc/ld.so.conf
。ldconfig
AFAIK
$LD_LIBRARY_PATH
僅在execve(2)ld-linux.so
之後由動態連結器(以及使用它的dlopen(3) )使用。另請參見ldd(1)。閱讀 Drepper 的如何編寫共享庫了解更多資訊。