繁体   English   中英

将 Static 库转换为共享库?

[英]Convert a Static Library to a Shared Library?

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

有没有办法将 static .a文件转换为共享的.so文件? 或者更一般地说,有没有一种好方法可以将大量 static .a文件与几个.o object 文件组合成一个.so文件?

这样做(当然有适当的-L)

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

不做吗?

如果 static 库中的对象是在没有 -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

I'm not sure about gcc, but for g++ I had to add the --whole-archive linker option to include the objects from the static libraries in the shared object. 如果要链接到 libc_static_lib.a 和 libother_shared_object.so,但不将它们作为一个整体包含在 megalib.so 中,则 --no-whole-archive 选项是必需的。

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

如果您想专注于.a中的特定对象并且不想自己添加任何内容, ar -x也很有用。

例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM