我需要将我的SO链接到libbfd,以便具有人类可读的回溯。
针对libbfd.a的静态链接失败,因为它没有使用-fPIC编译,所以据我所知,它只能参与可执行文件。
虽然链接libbfd.so也会带来一些麻烦。
我需要在Ubuntu-14.04和Debian Wheezy 7.8上编译 并且它们具有非交叉的binutils版本集。特别是,Ubuntu有2.24,Debian有2.22和2.25。问题是,gcc不想使用符号链接的名称libbfd.so来引用它,而是使用SONAME。所以我在依赖项中以libbfd-2.24-system.so或libbfd-2.25-system.so结束。
现在我看到几种方法:
有一些隐藏标志允许在链接期间覆盖SONAME。这是首选路径
除了手工编译libbfd之外别无他法。我会尽可能地避开这个。
手动dlopen + dlsym,我需要的一切。
我看了答案gcc link shared library against symbolic link,但它建议更改SONAME我无法做到。
有什么建议吗?
感谢。
编辑:似乎Ubuntu repos中的几乎所有静态库都不是与位置无关的。猜不出为什么。由于无法覆盖SONAME,因此事情变得更加复杂。答案 0 :(得分:0)
不确定我是否正确理解了您(4岁的问题),但是在libbfd中也遇到了类似的问题,我找到了以下解决方案:
使用链接器标记-lbfd
似乎可行。
这是一个链接器标志,用于指定g ++与libbfd链接。
我的完整命令是g++ loader.cc -lbfd
。
至少对我来说,解决了链接时“未知函数”的错误。