我可以通过链接静态库来构建共享库吗?

时间:2012-01-10 18:44:02

标签: c++ c gcc shared-libraries static-libraries

我有一堆静态库(* .a),我想构建一个共享库(* .so)来链接这些静态库(* .a)。我怎么能用gcc / g ++这样做?

2 个答案:

答案 0 :(得分:18)

您可以(只提取所有.o个文件并将其与-shared关联以生成.so),但是它是否有效以及它的工作情况取决于平台以及静态库是否编译为位置无关代码(PIC)。在某些平台(例如x86_64)上,非PIC代码在共享库中无效且不起作用(实际上我认为链接器将拒绝生成.so)。在其他平台上,非PIC代码可以在共享库中工作,但是库的内存中副本在使用它的不同程序之间不可共享,甚至不能在同一程序的不同实例之间共享,因此会导致巨大的内存膨胀。 / p>

答案 1 :(得分:6)

我不明白为什么你不能只将动态库的文件构建到.o文件并链接;

gcc -shared *.o -lstaticlib1 -lstaticlib2 -o mylib.so