linux把多个静态库合并为一个

8,776次阅读
一条评论

最近打算把项目里多个模块分开写, 每个模块生成一个库, 这样在可以在主项目里直接调用, 方便项目的管理.
但理想丰满但现实是残酷的, 先不说模块的划分难, 因为模块里都要调用到一些库, 然而库再生成库时出大事了. 因为生成的库并没有把它自已调用的库编译进来, 这样还是得在主项目里添加一堆库路径, 一堆.a 引用. 又是一夜的 google 资料, 并没发现有好的方面(功力还是太弱), 不过找到了一个折中的办法, 那就是合并库!

我的项目中包含了海思很多库(七八个静态库), 每次添加到项目里的时候都要注意顺序问题. 所以先把它们合并为一个.a 文件.
1: 分别解压静态库文件, 解压出一堆.o 文件
arm-gccxxx-ar xx1.a
arm-gccxxx-ar xx2.a
然后
arm-gccxxx-ar new.a acu *.o
arm-gccxxx-ranlib new.a
这样 N 个.a 文件就变成一个了
但还是需要在主项目里加一堆头文件 …

2016.11.18 更新方案:
将多个档案合并为一个共享库:gcc -shared -o c.so -Wl,–whole-archive a.a b.a

正文完
 0
评论(一条评论)
cg865
2016-11-29 14:56:42 回复

其实把静态库重新编为动态库即可

 Windows  Firefox  美国纽约纽约