转换一个静态库的共享库?
-
19-08-2019 - |
题
我有一个第三方库,其主要由大量的静态(.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 -x
s特定对象.a
可能也是有用的,你不希望你自己添加任何东西。
示例:
ar -x lib***.a
gcc -shared *.o -o lib***.so
不隶属于 StackOverflow