iOS存在三方库冲突:duplicate symbol _OBJC_IVAR_$_xxxx in: 解决方案

问题背景

场景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平台为例:

  1. 创建临时文件arm64,用来存放解压后的.o文件: mkdir arm64
  2. 取出arm64平台的包:lipo libexample.a -thin arm64 -output arm64/libexample_arm64.a
  3. 检查库中所包含的文件列表:cd arm64 && ar -t libexample_arm64.a
  4. 解压出object file文件(含有.o后缀的):ar xv libexample_arm64.a
  5. 根据报错提示,找到要删除的.o文件删掉:rm xxx.o
  6. 重新打包object file 生成 .o 文件:cd .. && ar rcs libexample_arm64.a arm64/*.o
  7. 将其他平台按照1-6步骤进行拆解和删除重复文件
  8. 将多个平台的.a文件进行合并成新的.a文件: lib -create libexample_arm64.a libexample_i386.a libexample_armv7 libexample_armv7s libexample_new.a
  9. libexample_new.a 替换原来的 libexample.a 即可

其他重复的库采用同样的方式处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容