是否存在 ld 忽略 LD_LIBRARY_PATH 的情况?

是否存在 ld 忽略 LD_LIBRARY_PATH 的情况?

我刚刚遇到一个ld我无法解释的小问题。假设我在我的主目录中编译了一个库并将其全部安装在~/root.共享库文件可以在以下位置找到~/root/usr/local/lib/libmylib.so

因为~/root/usr/local/lib不在链接器的搜索路径中,所以我LD_LIBRARY_PATH像往常一样设置:

LD_LIBRARY_PATH="$HOME/root/usr/local/lib"
export LD_LIBRARY_PATH

并检查该库是否可用:

$ ls $LD_LIBRARY_PATH/libmylib.so
/home/me/root/usr/local/lib/libmylib.so

现在,如果我运行:

$ ld -lmylib --verbose

最后几行应包含以下内容:

attempt to open /home/me/root/usr/local/lib/libmylib.so succeeded
-lmylib (/home/me/root/usr/local/lib/libmylib.so)

除了我的情况外,他们没有。ld根本不执行任何查找/home/me/root。的内容LD_LIBRARY_PATH根本不会出现在输出中,这表明ld无耻地忽略了该变量(实际上,我的目录从未出现在SEARCH_DIR输出的前面)。

但是,如果我运行:

$ ld -L $LD_LIBRARY_PATH -lmylib --verbose

我确实得到了上述几行,一切都很顺利,这意味着库或安装路径没有任何问题。

有没有什么情况可以ld忽略LD_LIBRARY_PATH?我已经检查过env,但找不到任何其他与链接器相关的变量(RPATHLIBRARY_PATHLD_RUN_PATH,都经过测试)。除了注册一些(其他)目录之外,下面的配置/etc/ld.so.*似乎没有做任何事情。该机器运行 Scientific Linux 7.4、gcc 6.4 和 ld 2.25.1。有问题的图书馆是libxml++-3.0.

答案1

据我所知,ldignores LD_LIBRARY_PATH,至少对于在其命令行上指定的库;LD_LIBRARY_PATH未列出在影响它的环境变量。它参考LD_LIBRARY_PATH何时寻找其他库需要的库,在本机构建中,模拟的行为ld.so

相关内容