合并多个.so共享库

Met*_*tiu 37 c unix linux gcc shared-libraries

说我有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 a.a b.a

谢谢

Emp*_*ian 42

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

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

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
Run Code Online (Sandbox Code Playgroud)


laa*_*lto 7

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

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

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

  • "如果您可以访问两个库的源文件或目标文件,则可以直接编译/链接它们的组合SO." - - 我该怎么做呢 ?具体来说,在Android平台上. (4认同)