如何解决duplicate symbol
2018-06-06 本文已影响0人
忘带充电宝de皮卡丘
前言:本人才疏学浅,以下方法仅适用于对这个报错持有疑问的同学,望大神勿喷。。。。。
最近在公司的项目中导入了两个三方的SDK,导入之后一运行,直接就报了一大篇的错误,错误提示duplicate symbols for architecture arm64,当时就有点慌了,不知如何下手,持续懵逼ing......
报错展示上述具体问题是因为这两个静态库冲突了,之后经过大神指导和某技术网站搜索之后,项目成功运行,接下来是一系列在终端的骚操作(以我的项目为例):
1.进入任意一个.a文件所在文件夹,这里以libLKLCashier.a为例
cd xxx/floder name
2.查看文件都支持了什么架构
lipo -info libLKLCashier.a
输入上面代码后,终端显示如图:
终端架构展示3.把文件分别拆分成对应支持架构的文件并输出(输出文件的命名随意,自己开心就好)
lipo libLKLCashier.a -thin armv7 -output libLKLCashier_armv7.a
lipo libLKLCashier.a -thin arm64 -output libLKLCashier_arm64.a
4.RegexKitLite.o是图中对应冲突的.o文件,把它移除掉,如果有多个,就在后面添加多个.o文件并以空格隔开,例如ar -d libLKLCashier_armv7.a RegexKitLite.o GTMBase64.o
ar -d libLKLCashier_armv7.a RegexKitLite.o
ar -d libLKLCashier_arm64.a RegexKitLite.o
5.移除完成之后,把刚才拆分开的两个.a文件合并成一个文件。合并前,最好先在finder中把libLKLCashier.a删除(虽然合并完成后会直接覆盖原文件,但是作为一个强迫症来说,为了以防万一,先删除为好)
lipo -create libLKLCashier_armv7.a libLKLCashier_arm64.a -output libLKLCashier.a
6.查看.a文件里面目前包含的.o文件,检查删除是否成功
ar -t libLKLCashier.a
7.回到Xcode,运行一下,看看刚才的报错是否解决。