说我有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
由于
答案 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。