合并多个.so共享库

时间:2009-05-27 10:59:48

标签: c linux unix gcc shared-libraries

说我有a.so和b.so. 我可以将c.so作为单个共享库与a和b导出的所有函数一起生成,当然解决所有内部依赖关系(即a.so调用的所有函数和其他方式)?

我试过

gcc -shared -Wl,soname,c.so -o c.so a.so b.so

但它不起作用。

如果我在a.a和b.a中存档a.o和b.o(不应该修改a.o和b.o),并且

gcc -shared -Wl,soname,c.so -o c.so a.a b.a

由于

2 个答案:

答案 0 :(得分:40)

在AIX以外的所有UNIXen上实际上不可能将多个共享库合并为一个:链接器认为.so是“最终”产品。

但是将档案合并到.so应该不是问题:

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive

答案 1 :(得分:7)

在实践中,这是不可能的。

从链接器的角度来看,SO库是最终产品,不包含链接所需的重定位信息。

如果您可以访问两个库的源文件或目标文件,则可以直接从它们编译/链接组合的SO。