将动态库链接到静态库(也称为预链接动态库)

时间:2011-07-07 16:15:47

标签: c dynamic static linker

3 个答案:

答案 0 :(得分:1)

我很困惑你是否真的想要将共享库代码包含到静态库存档中,或者是否只想实现它,因此链接静态库也会自动创建对共享库的引用。

在前一种情况下,我知道没有工具可以做到,但它应该是一个可解决的问题。如果您花一些时间阅读ELF规范,那么您可以创建一个工具将.so文件转换为普通.o文件,然后只需在.o中包含.a文件存档。

在后一种情况下,大多数人使用pkg-config解决了这个问题。另一种方法是GNU特定的,它将安装GNU链接器脚本而不是原始.a文件,并使链接器脚本引用静态库和所需的共享库。

答案 1 :(得分:0)

这里的问题是您的动态库是与位置无关的编译,需要动态加载器来在加载时修复内部和外部引用。因此,您无法显式链接动态库。在我正在研究的项目中,我们通常编译libs的静态和动态版本,这是其中一个原因。

答案 2 :(得分:0)

使用智能构建系统可以解决问题。我建议使用gyp。它具有静态库选项link_settings

{
  'targets': [
    {
      'target_name': 'x',  # will generate libx.a
      'type': 'static_library',
      'sources': [],
      'link_settings': {
        'libraries': ['-ly'],
      },
    },
    {
      'target_name': 'test',
      'type': 'executable',
      'dependencies': ['x'],
      'sources': [],
    },
  ],
}