近期在做关于静态库的工作,需要生成静态库(.a),查了一些资料,在此总结记录一下
参考文章:http://www.bkjia.com/IOSjc/1087092.html
http://blog.youkuaiyun.com/ztp800201/article/details/41119585
常用命令:
1.查看静态库包含的包:lipo -info xxx1.a
2.新建文件夹:mkdir armv7
3.分解出armv7:lipo xxx1.a -thin armv7 -output xxx1_armv7.a
4.解压object file:ar xv xxx1_armv7.a
5.重新生成.a文件: ar rcs xxx_armv7_new.a armv7/*.o
6.合并两个.a文件:lipo -create xxx1.a xxx2.a -output xxx_new.a
7.查看静态库包含的包:lipo -info xxx1.a
一. 如果工程中引用其他第三方库文件,多于一个时,可以先将这些库文件(.a)合并成一个再进行下一步
如果这些静态库是fat的,需要先分解为non fat,才能进行合,如果xxx1.a xxx2.a都包含armv7框架,合并会失败,需要将armv7文件解压在一起,重新生成静态库.a文件
例子: 假设xxx1.a xxx2.a 包含armv7 和 arm64
可以新建一个文件夹,存放armv7解压出的object file
1.新建文件夹:mkdir armv7
2.分解出armv7:lipo xxx1.a -thin armv7 -output xxx1_armv7.a
3.解压object file:cd armv7 && ar xv xxx1_armv7.a(需要先将xxx1_armv7.a文件移至文件夹armv7下)
4.将xxx2.a重复上诉操作,解压出armv7的object file,xxx2.a解压出的armv7的object file也要放入armv7文件夹下
(armv7解压出的object file 文件放在一起,重复的文件会覆盖)
5.重新生成.a文件:cd .. && ar rcs xxx_armv7_new.a armv7/*.o(此时处于armv7上级文件夹下)
6.arm64重复上诉步骤,生成xxx_arm64_new.a
7.合并两个.a文件:lipo -create xxx_arm64_new.a xxx_armv7_new.a -output xxx_new.a
此时,xxx1.a xxx2.a两个文件就合并成功了
二.创建静态库工程,如下图,选择statistic Library(framework 选择第一个)
三.静态库工程配置如下图(如果只想生成armv7的静态库文件,Architectures中只写armv7,Architectures Only改为YES,生成的静态库就不包含arm64的)
四.将要编译的文件拖入工程根目录,将要暴露的头文件加入public下
五.编译:
编译时,选择模拟器,生成的静态库是i386或x86的,选择下方的方式,编译的是对应的静态库(步骤三中设置的)
此时,工程Products下的.a文件就生成了,右键在文件夹中打开,会看到有个user文件夹,user-local-include下就是暴露出的头文件,将头文件和.a文件加入测试工程中就可以进行测试了