答案 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': [],
},
],
}