iOS 引用第三方库出现xx duplicate symbols for architecture arm64

在进行iOS原生开发过程中,当项目持续迭代,工程中可能会积累各种各样的第三方库,难免会出现一些重复引用的情况:

ld: 44 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

一般如果是自己引用的,我们可以把自己引用的那份改名甚至直接删除来解决,但是如果他们都是第三方库怎么办呢?上面就是两个库同时使用了SDWebImage,导致44个重复,这种时候除了给第三方库的客服反馈的方法外,更好的办法是自己解决,下面是具体方法:

一、

从报错信息中找到重复的库文件(其中之一即可),我这里是liblibWeex.a中使用了SDWebImage,把liblibWeex.a拷贝出来。

二、

打开终端,cd到liblibWeex.a所在文件夹,并输入
lipo -info liblibWeex.a 查看架构信息:

Architectures in the fat file: liblibWeex.a are: armv7 x86_64 arm64

待用。

三、

从上面的信息“the fat file”中可以看出显然需要瘦身,分别输入
lipo liblibWeex.a -thin armv7 -output liblibWeex.armv7
lipo liblibWeex.a -thin arm64 -output liblibWeex.arm64
lipo liblibWeex.a -thin x86_64 -output liblibWeex.x86_64

生成3个子文件备用.

四、

接下来需要查看.o文件,比如,输入
ar -t 文件夹/liblibWeex.armv7
可以查看liblibWeex.armv7 中的所有.o文件,查看这些文件的文件名,并和xcode编译报错时显示的文件名比对,找出重复报错的那些,记录下来待用。

五、

使用-d命令删除这些文件,比如输入
ar -d -sv liblibWeex.armv7 SDWebImageDownloaderOperation.o
就删除了,剩下的就是之前生成的子文件都删一遍(我这次要删好多TT)

六、

最后就是合并文件了,把处理好的3个文件使用命令
lipo -create -output liblibWeex.a liblibWeex.x86_64 liblibWeex.arm64 liblibWeex.armv7
进行合并,这6步走完就大功告成了。

本文结束❀。

你可能感兴趣的:(iOS 引用第三方库出现xx duplicate symbols for architecture arm64)