C++ 如何更改共享库搜索顺序?

C++ 如何更改共享库搜索顺序?,c++,linux,C++,Linux,当程序需要共享库时(比如libabc.so),它将首先检查“-labc”的路径,然后检查环境变量LD\u library\u path,然后检查/etc/LD.so.conf。如果我想让程序先搜索/etc/ld.so.conf,该怎么办?在文件列表中,在任何-l选项之前明确指定它。 在Unix(包括Linux)下,库按顺序处理 他们一个接一个地被给予。以及是否指定了库 使用-l选项或指定实际路径不会产生错误 差异;您可以通过以下方式调用g++: g++ file1.o file2.o ... /

当程序需要共享库时(比如
libabc.so
),它将首先检查“-labc”的路径,然后检查环境变量
LD\u library\u path
,然后检查
/etc/LD.so.conf
。如果我想让程序先搜索
/etc/ld.so.conf
,该怎么办?

在文件列表中,在任何
-l
选项之前明确指定它。 在Unix(包括Linux)下,库按顺序处理 他们一个接一个地被给予。以及是否指定了库 使用
-l
选项或指定实际路径不会产生错误 差异;您可以通过以下方式调用g++:

g++ file1.o file2.o ... /etc/ld.so.conf ... -labc ...

您可以取消设置LD_LIBRARY_PATH变量

unset LD_LIBRARY_PATH
就我而言,LD_LIBRARY_PATH变量的目的是提供一个在LD.so.conf中不存在的库。此外,还必须确保通过将库包含在/etc/ld.so.conf中而提供的库位于/etc/ld.so.cache的缓存中。你必须执行

ldconfig
作为超级用户更新您的/etc/ld.so.cache

您所说的“路径-labc”是什么意思?根据我的经验,-labc在链接时与“-L”选项一起使用,但是,除非您使用一些额外的编译器标志,否则它将被完全遗忘。这只剩下LD_LIBRARY_PATH和LD.so.conf。。。无论如何,如果您想在进程中强制使用一个非常特殊的符号,可以使用LD_PRELOAD。