我刚刚遇到一个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
,但找不到任何其他与链接器相关的变量(RPATH
、LIBRARY_PATH
、LD_RUN_PATH
,都经过测试)。除了注册一些(其他)目录之外,下面的配置/etc/ld.so.*
似乎没有做任何事情。该机器运行 Scientific Linux 7.4、gcc 6.4 和 ld 2.25.1。有问题的图书馆是libxml++-3.0
.