2009-05-27 557 views
28

说我有a.so和b.so. 我是否可以将c.so作为单个共享库生成,其中包含由a和b导出的所有函数,当然可以解决所有内部依赖关系(即由a.so调用的所有b.so函数以及其他方式)?合并多个.so共享库

我试图

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

,但它不工作。

也是一样,如果我归档a.o和B.O在A.A和b.a(这不应该修改a.o和B.O),并做

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

感谢

+0

最后,我使出库脚本一组让我来显示所有的小型图书馆作为一个单一的,但一个软件可以链接到正确的“子”库。 – Metiu 2009-05-28 20:07:37

回答

38

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

但合并档案到。所以不应该是一个问题:

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

谢谢你的有用标志:整个档案! – 2011-10-14 01:25:34

7

在实践中是不可能的。

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

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

+1

“,如果您有权访问这两个库的源文件或目标文件,则可以直接编译/链接来自它们的组合SO。” - - 我该怎么做呢 ?具体来说,在Android平台上。 – 2014-08-04 20:22:06