Linux

環境中缺少 LD_LIBRARY_PATH 變數是否正常?

  • September 26, 2017

我偶然發現在我的 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.confldconfig

AFAIK$LD_LIBRARY_PATH僅在execve(2)ld-linux.so之後由動態連結器(以及使用它的dlopen(3) )使用。另請參見ldd(1)

閱讀 Drepper 的如何編寫共享庫了解更多資訊。

引用自:https://unix.stackexchange.com/questions/394508