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

cal*_*nfo 16 linux environment-variables ld

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

Bas*_*tch 23

是的,您没有任何明确的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仅由动态链接器ld-linux.so(以及使用它的dlopen(3))在execve(2)之后使用。另请参见ldd(1)

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

  • @calavera.info 两者都不是。动态链接器在运行时使用`LD_LIBRARY_PATH` *与`ldconfig` 的输出*在一起*。`ldconfig` 既不使用也不改变 `LD_LIBRARY_PATH`。 (3认同)