为了获得人类可读的回溯,我需要将我的 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 链接共享库,但它建议更改我无法做到的 SONAME。
有什么建议么?
谢谢。
编辑:似乎 Ubuntu 存储库中的几乎所有静态库都不是与位置无关的。猜不透为什么。由于无法覆盖 SONAME,它使事情变得更加复杂。