我有一个名为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)
则可行,ldd
说libfoo.so => {correct path}
。
所以它有点工作,但它是推荐的方式吗?
答案 0 :(得分:0)
这是一种不好的做法吗?
不是单独,不是。但是,库作者很可能无能,特别是如果你按照他们的安装程序进行操作,最后得到libfoo.so.1.2.3.4
,但是没有符号链接。
我是否应该尝试推动图书馆作者更改选项?
可能。不设置SONAME
和设置RPATH
本身并不坏,但当然不提供符号链接。
设置
export LD_LIBRARY_PATH=$(pwd)
这通常是一个坏主意。您应该更喜欢将正确的RPATH
编码到使用该库的二进制文件(以及仅二进制文件)中。在Linux上,您可以使用-Wl,--rpath=$(pwd)
实现此目的。