我有一个第三方库,主要包含大量的static(.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,则必须使用--no-whole-archive选项,但不要在megalib.so中将它们作为一个整体包含在内.
ar -x lib***.a gcc -shared *.o -o lib***.so
ar -x
如果您想专注于.a
s中的特定对象并且不想自己添加任何内容,它也很有用。
例子:
ar -x lib***.a gcc -shared *.o -o lib***.so