链接SO对libbfd

时间:2015-04-06 14:25:51

标签: gcc symlink ld ldd

我需要将我的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结束。

现在我看到几种方法:

  1. 有一些隐藏标志允许在链接期间覆盖SONAME。这是首选路径

  2. 除了手工编译libbfd之外别无他法。我会尽可能地避开这个。

  3. 手动dlopen + dlsym,我需要的一切。

  4. 我看了答案gcc link shared library against symbolic link,但它建议更改SONAME我无法做到。

    有什么建议吗?

    感谢。

    编辑:似乎Ubuntu repos中的几乎所有静态库都不是与位置无关的。猜不出为什么。由于无法覆盖SONAME,因此事情变得更加复杂。

1 个答案:

答案 0 :(得分:0)

不确定我是否正确理解了您(4岁的问题),但是在libbfd中也遇到了类似的问题,我找到了以下解决方案:

使用链接器标记-lbfd似乎可行。

这是一个链接器标志,用于指定g ++与libbfd链接。

我的完整命令是g++ loader.cc -lbfd

至少对我来说,解决了链接时“未知函数”的错误。