我有一个第三方库,其主要由大量的静态(.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归档接头选择包括来自在共享对象中的静态库中的对象。 如果你要链接到libc_static_lib.a和libother_shared_object.so,而不是将其作为一个整体在megalib.so的--no-整个归档选项是必需的。

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

如果你希望把重点放在从ar -xs特定对象.a可能也是有用的,你不希望你自己添加任何东西。

示例:

ar -x lib***.a
gcc -shared *.o -o lib***.so
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top