问题背景
场景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即可
其他重复的库采用同样的方式处理