46

假设我有 a.so 和 b.so。我可以将 c.so 生成为具有 a 和 b 导出的所有函数的单个共享库,当然可以解决所有内部依赖关系(即 a.so 调用的 b.so 的所有函数,反之亦然)?

我试过

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

但它不起作用。

如果我将 ao 和 bo 存档在 aa 和 ba 中也是如此(不应该修改 ao 和 bo),然后执行

gcc -shared -Wl,soname,c.so -o c.so aa ba

谢谢

4

2 回答 2

54

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

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

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
于 2009-05-29T02:42:27.353 回答
11

在实践中这是不可能的。

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

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

于 2009-05-27T11:17:57.063 回答