相信有很多小伙伴在开发的时候,公司和另外一个提供服务的工作合作,然后引入了这个公司的第三方库.然而这个公司开发的静态库里边包含了很多其他第三方的东西.你工程里边还有很多第三方.所以出现 duplicate symbol错误 而且还是500+的重复.看着都脑袋疼.
例如:
看着这个图是不是很熟悉.心里就如同一万个草泥马在奔腾.下边是我解决这个问题的方法,走了很多弯路.希望能帮助一些掉入别人设置的陷阱里边的小伙伴.
首先一个一个改重复的熟悉或者删除文件,想也知道会出现多少问题.我直接放弃了这个想法.然后基于不动工程配置的基础上.我只能对这个.a文件做手脚了.
第一步:拆
1.拉出.a文件,查看.a文件支持什么框架并且看看是不是 no fate file文件这样才能继续往下走
控制台里:lipo -info ***.a
查看支持的框架(armv7,arm64,i386,x86_64)一般都是这几个
2.分解出各个单独框架的.a文件(分解成not fat file 文件方便以后分离.o文件)
lipo ***.a -thin armv7 -output ***_armv7.a (armv7例子)
3.分解出各个.a文件的.o文件(最好单独创建一个文件夹)
ar vx ***_armv7.a
4.根据报错信息,删除各个单独.a文件中冲突的.o文件(举例)
rm AFURLSessionManager.o
5.合并各个删除.o文件之后的单独框架 生成新的.a文件
ar rcs ***_final_armv7.a *.o
6.其他单独框架重复以上操作生成各种新的.a文件
7.生成新的.a文件
lipo -create ***armv7.a ***arm64.a ***i386.a ***x_86_64.a -output ***new.a
8.覆盖原工程中.a文件
到此结束了 你运行试试 不行的话 还有几个大牛的方法我贴后边可以借鉴一下.
这个 是另外一个思路的解决办法,也许会帮助你.