将静态库转换为共享库?

时间:2009-03-17 17:06:15

标签: c linux shared-libraries static-libraries

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

有没有办法将静态.a文件转换为共享的.so文件?或者更常见的是,有一种很好的方法可以将大量静态.a文件与几个.o目标文件合并到一个.so文件中?

5 个答案:

答案 0 :(得分:40)

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

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

不行吗?

答案 1 :(得分:22)

如果静态库中的对象是在没有-fPIC或类似的情况下编译的,则无法执行此操作。

答案 2 :(得分:15)

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,则必须使用--no-whole-archive选项,但不要将它们作为整体包含在megalib.so中。

答案 3 :(得分:9)

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

答案 4 :(得分:2)

如果您想要关注ar -x中的特定对象并且您不想自己添加任何内容,那么

.a也很有用。

示例:

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