库文件(*.so)如何解决共享依赖关系?

库文件(*.so)如何解决共享依赖关系?

如果我调用以下命令:

ldd mylib.so

然后会产生如下结果:

libopencv_features2d.so.4.1 => /usr/local/lib/libopencv_features2d.so.4.1 (0x00007f83dee6b000)

如果我复制/usr/local/lib/libopencv_features2d.so.4.1到当前的工作目录中,我会期望 ldd 显示=> ./libopencv_features2d.so.4.1 (0x00007f83dee6b000)

相反,它仍然将其解析为/usr/local/lib.这是为什么?像这样的系统依赖性如何解决?还有一种方法可以影响依赖关系的解决方式吗?我可以强制它解析到我的本地目录吗?

答案1

动态链接器在各个位置查找库,但默认情况下不包括当前目录。在 Linux 上,清单是

  • 二进制文件的 rpath 中定义的路径(如果有);
  • 中列出的路径LD_LIBRARY_PATH(如果有);
  • 二进制文件的运行路径中定义的路径(如果有);
  • 已知的图书馆/etc/ld.so.cache
  • 系统的库路径(/usr/lib等)。

上面的链接提供了更多详细信息。

您可以通过导出来影响解决依赖关系的方式LD_LIBRARY_PATH;特别是在你的情况下:

export LD_LIBRARY_PATH=.

(不要将其设置为该值。)

相关内容