环境中缺少LD_LIBRARY_PATH变量是否正常?


15

我偶然发现在我的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变量?

Answers:


22

是的,您没有任何显式是很正常的LD_LIBRARY_PATH。另请参阅ldconfig(8)ld-linux(8)以及有关rpath的信息。请注意,ldconfig更新/etc/ld.so.cache不是LD_LIBRARY_PATH。有时,您将在链接时将目录传递给显式设置可执行文件的rpath-Wl,-rpath,gcc

如果需要LD_LIBRARY_PATH(但可能不需要),请自行设置(例如中的 ~/.bashrc)。

如果需要系统范围的设置,你可以例如考虑增加 /usr/local/lib//etc/ld.so.conf并运行ldconfig安装每个库有后。

AFAIK $LD_LIBRARY_PATH仅由execve(2)之后的动态链接程序ld-linux.so(以及使用它的dlopen(3))使用。另请参见ldd(1)

阅读Drepper的如何编写共享库的更多信息。


那是我的错误,尽管LD_LIBRARY_PATH是running 的产物ldconfig。同时,它是ldconfig 的输入以及.file中的文件/etc/ld.so.conf
calavera.info

1
我的感觉是ldconfig不要使用$LD_LIBRARY_PATH(仅在ld-linux.so时间使用)
Basile Starynkevitch

3
@ calavera.info都不是。动态链接器与运行时的输出LD_LIBRARY_PATH 一起使用ldconfigldconfig既不使用也不改变LD_LIBRARY_PATH
hobbs

现在,我发现我完全搞砸了,可能是因为在Java中花费了太多时间,而Java中“类路径”实际上是动态链接的唯一配置。现在一切似乎都很清楚,非常感谢。
calavera.info
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.