将静态库转换为共享库?

我有一个第三方库,主要由大量的静态( .a )库文件组成。 我可以把它编译成一个.a库文件,但是我真的需要它成为一个.so共享库文件。

有没有办法将一个静态的.a文件转换成一个共享的.so文件? 或者更普遍的是,将大量静态.a文件与几个.o对象文件合并为一个.so文件是一种好方法吗?

这是否(与适当的-L的当然)

 gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib 

不是吗?

如果静态库中的对象编译时没有使用-fPIC或类似的东西,你不能这样做。

 g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object 

我不确定gcc,但是对于g ++,我不得不添加–whole-archive连接器选项来包含静态库中的对象到共享对象中。 如果要链接到libc_static_lib.a和libother_shared_object.so,而不是整个归档选项,则不要将它们作为整体包含在megalib.so中。

 ar -x lib***.a gcc -shared *.o -o lib***.so 

如果你想关注你的.a s中的特定对象并且你不想自己添加任何东西, ar -x也可以是有用的。