问题背景
场景1
第三方库中引用的库(一般是源码形式)与自己项目引入的三方库冲突
解决方案
删除项目中的第三方库引用即可
场景2
项目中引用的多个第三方库出现冲突,某些.o文件重复报错
解决方案
这种无法通过直接删除重复文件的方式,只能通过对第三方库进行拆解,删除重复的.o文件,再重新合并成新的静态库,替换原有的静态库即可
具体的操作步骤如下:
lipo -info libexample.a
通过这个命令可以解析出来.a中包含哪些平台,一般如果有fat file
,表示支持多个平台
类似: Architectures in the fat file: libexample.a are: i386 armv7 armv7s x86_64 arm64
下面就是解包,打包操作了,以arm64平台为例:
- 创建临时文件
arm64
,用来存放解压后的.o文件:mkdir arm64
- 取出
arm64
平台的包:lipo libexample.a -thin arm64 -output arm64/libexample_arm64.a
- 检查库中所包含的文件列表:
cd arm64 && ar -t libexample_arm64.a
- 解压出
object file
文件(含有.o后缀的):ar xv libexample_arm64.a
- 根据报错提示,找到要删除的.o文件删掉:
rm xxx.o
- 重新打包
object file
生成.o
文件:cd .. && ar rcs libexample_arm64.a arm64/*.o
- 将其他平台按照1-6步骤进行拆解和删除重复文件
- 将多个平台的
.a
文件进行合并成新的.a
文件:lib -create libexample_arm64.a libexample_i386.a libexample_armv7 libexample_armv7s libexample_new.a
- 用
libexample_new.a
替换原来的libexample.a
即可
其他重复的库采用同样的方式处理