如何解决duplicate symbol

前言:本人才疏学浅,以下方法仅适用于对这个报错持有疑问的同学,望大神勿喷。。。。。

最近在公司的项目中导入了两个三方的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,运行一下,看看刚才的报错是否解决。

你可能感兴趣的:(如何解决duplicate symbol)