某些无良SDK厂商, 会把他们用到的第三方库打到自己的静态库里面, 如果我们项目中也用到了这个库, 就会造成冲突编译失败.
定位
根据编译报错提示, 查看冲突的库是位于哪个文件中, 这边查看是 libcoreSupport.a 文件里面的 ZipArchive.o 库冲突
查看静态库包含的架构
一般静态库都是'胖(fat
)'库, 里面包含多个架构, 这个命令一般会输出 "xxx.a are: armv7 arm64" 之类的, 具体根据你的 .a 文件实际包含情况而定
lipo -info ./libcoreSupport.a
按架构分解 .a 库
如果要查看或者删除 .a 文件 包含的 .o 库, 需要 .a 是 NOFat
的, 所以我们要把它们都拆出来
lipo -thin arm64 ./libcoreSupport.a -output ./arm64.a
lipo -thin armv7 ./libcoreSupport.a -output ./armv7.a
查看 .a 文件 包含的 .o 库
查看包括了哪些库, 一般是输出一堆 xxx.o 的列表
ar -v -t ./arm64.a
删除 .a 文件 包含的 .o 库
当库冲突的时候, 可以根据实际情况, 直接删除.a中对应架构的.o文件, 每个架构都要删去
ar -v -d arm64.a ZipArchive.o
ar -v -d armv7.a ZipArchive.o
最后合并所有架构, 生成一个新的.a胖包
把你拆出来的各个架构都合并起来
lipo -create ./arm64.a ./armv7.a -output ./libcoreSupport.a
完结撒花🎉
把新 .a 替换项目中原来的 .a文件, 再编译试试吧
评论已关闭