在进行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步走完就大功告成了。
本文结束❀。