我正在使用 g++
和 ld
编译一个 c++ 程序。我有一个 .so
我想在链接期间使用的库。但是,在 /usr/local/lib
中存在同名的库,并且 ld
正在选择该库而不是我直接指定的库。我怎样才能解决这个问题?
对于下面的示例,我的库文件是 /my/dir/libfoo.so.0
。我试过的东西不起作用:
- 我的 g++ 命令是
g++ -g -Wall -o my_binary -L/my/dir -lfoo bar.cpp
- 将
/my/dir
添加到我的$PATH
en` 变量的开头或结尾 - 添加
/my/dir/libfoo.so.0
作为参数到 g++
原文由 Heinrich Schmetterling 发布,翻译遵循 CC BY-SA 4.0 许可协议
将新库所在的路径添加到
LD_LIBRARY_PATH
(它在 Mac 上的名称略有不同……)您的解决方案应该使用
-L/my/dir -lfoo
选项,在运行时使用 LD_LIBRARY_PATH 指向您的库的位置。小心使用 LD_LIBRARY_PATH - 简而言之(来自链接):
或者
通过 gcc 使用 rpath 选项到链接器 - 将使用运行时库搜索路径,而不是在标准目录中查找(gcc 选项):
这对于临时解决方案很有用。链接器首先在 LD_LIBRARY_PATH 中搜索库,然后再查看标准目录。
如果您不想永久更新 LD_LIBRARY_PATH,您可以在命令行上即时更新:
您可以检查链接器知道的有关使用(示例)的库:
您可以检查您的应用程序正在使用哪个库: