我可以通过链接静态库来构建共享库吗?
我有一堆静态库(* .a),我想构建一个共享库(* .so)来链接这些静态库(* .a)。 我怎么能用gcc / g ++这样做?
您可以(只提取所有.o
文件并使用-shared
链接它们以生成.so
),但它是否有效以及它的工作原理取决于平台以及静态库是否编译为与位置无关的代码 (PIC)。 在某些平台(例如x86_64)上,非PIC代码在共享库中无效且不起作用(实际上我认为链接器将拒绝生成.so
)。 在其他平台上,非PIC代码将在共享库中工作,但是库的内存中副本在使用它的不同程序之间不可共享,甚至不能在同一程序的不同实例之间共享,因此会导致巨大的内存膨胀。
我不明白为什么你不能只将动态库的文件构建到.o文件并链接;
gcc -shared *.o -lstaticlib1 -lstaticlib2 -o mylib.so