linux和MAC下静态库.a文件合并
这两天开发群了讨论了一个文体,如何合并众多的.a文件。
有人给了建议,使用ar 解.a,生成.o。然后合并所有的.o文件。
我在MAC OS下尝试了一下。
正好赶上编译了ffmpeg的IOS armv7版本,生成了armv7/lib/
5235392 Sep 17 15:50 libavcodec.a 1017032 Sep 17 15:50 libavformat.a 183528 Sep 17 15:50 libavutil.a 232536 Sep 17 15:50 libswscale.a 204 Sep 17 15:50 pkgconfig
使用ar命令,将这四个.a文件都解出.o文件
ar x libavcodec.a
ar x libavformat.a
ar x libavutil.a
ar x libswscale.a
然后ls 就可以看出,生成了很多.o文件。
下一步来合并.o文件,命令如下
ar cru libffmpeg.a *.o
别忘了还有ranlib命令,更新库的符号表
ranlib libffmpeg.a
最后,看一下使用ranlib后,文件MD5确实不一样了。
mikumatoMac-mini:lib gyc$ ll libffmpeg.a -rw-r--r-- 1 gyc staff 6070496 Sep 18 16:02 libffmpeg.a mikumatoMac-mini:lib gyc$ md5 libffmpeg.a MD5 (libffmpeg.a) = b988179f58e87888fba85fb5038cb9a2 mikumatoMac-mini:lib gyc$ ranlib libffmpeg.a ranlib: file: libffmpeg.a(os_support.o) has no symbols mikumatoMac-mini:lib gyc$ md5 libffmpeg.a MD5 (libffmpeg.a) = d08086ad81679287c3e27af69f354607 mikumatoMac-mini:lib gyc$ ll libffmpeg.a -rw-r--r-- 1 gyc staff 6070496 Sep 18 16:05 libffmpeg.a
提示:
1.
--enable-pic build position-independent code
windows下dll或者dll和exe,也有合并的方法,ILMerge
http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx
但是,我尝试过,并没有得到较好的结果。原因有待以后查明。