当前位置:  开发笔记 > 运维 > 正文

将静态库转换为共享库?

如何解决《将静态库转换为共享库?》经验,为你挑选了5个好方法。

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

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



1> dicroce..:

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

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

不行吗?


使用gcc -shared完成了这个技巧,但只有在我用-fPIC重新编译之后.谢谢你指点我正确的方向!

2> vitaly.v.ch..:

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


缺少-fPIC或类似情况会导致SegFault
在支持良好的目标上,"PIC"对于共享库代码不是必需的.它只会导致更高效的内存使用(大部分,而不是少数几个页面可以共享),但会牺牲一些性能.

3> 小智..:
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中将它们作为一个整体包含在内.


在命令行的末尾需要`-Wl - no-whole-archive`.请参阅[问题编辑,此处](http://stackoverflow.com/questions/7935421/linking-archives-a-into-shared-object-so).

4> 小智..:
ar -x lib***.a
gcc -shared *.o -o lib***.so



5> Anastasios A..:

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

例子:

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

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有