将静态库转换为共享库?
我有一个第三方库,主要由大量的静态( .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
也可以是有用的。