在没有SONAME的情况下链接版本化的.so

时间:2014-11-02 12:09:20

标签: gcc shared-libraries symlink elf

我有一个名为libfoo.so.1.2.3.4的文件中的闭源库。 objdump -p表明它没有SONAME,但确实有RPATH=/usr/local/lib

这是一种不好的做法吗?我是否应该尝试推动图书馆作者更改选项?

我应该如何将代码链接到它?我不想更改任何系统范围的配置或污染只能root可写的目录。

我创建了一个空a.c的虚拟main()文件,并尝试与gcc a.c -L. -lfoo建立关联。它失败。如果我手动创建libfoo.so -> libfoo.1.2.3.4.so符号链接并设置export LD_LIBRARY_PATH=$(pwd)则可行,lddlibfoo.so => {correct path}

所以它有点工作,但它是推荐的方式吗?

1 个答案:

答案 0 :(得分:0)

  

这是一种不好的做法吗?

不是单独,不是。但是,库作者很可能无能,特别是如果你按照他们的安装程序进行操作,最后得到libfoo.so.1.2.3.4,但是没有符号链接。

  

我是否应该尝试推动图书馆作者更改选项?

可能。不设置SONAME和设置RPATH本身并不坏,但当然不提供符号链接。

  

设置export LD_LIBRARY_PATH=$(pwd)

这通常是一个坏主意。您应该更喜欢将正确的RPATH编码到使用该库的二进制文件(以及二进制文件)中。在Linux上,您可以使用-Wl,--rpath=$(pwd)实现此目的。