2(n) duplicate symbols for architecture arm64 是较常见问题,是在导入第三方SDK的时候出现的。
究其原因是SDK中包含了工程中原本存在的某个类,一般如果是自己引用的,我们可以把自己引用的那份改名甚至直接删除来解决。
-
例如这种:
- 找到具体的位置
删除重复文件,或者把自己写的文件改名即可,重新编译后解决问题。
但是如果他们都是第三方库怎么办呢?上面就是两个库同时使用了SDWebImage,导致44个重复,这种时候除了给第三方库的客服反馈的方法外,更好的办法是自己解决,下面是具体方法:
ld: 44 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
一、
从报错信息中找到重复的库文件(其中之一即可),我这里是MHBeautySDK 中使用了GTMBase64。
二、
打开终端,cd到MHBeautySDK所在文件夹,并输入
lipo -info MHBeautySDK
查看架构信息:
Architectures in the fat file: MHBeautySDK are: armv7 arm64
待用。
三、
从上面的信息“the fat file”中可以看出显然需要瘦身,分别输入
lipo MHBeautySDK -thin armv7 -output MHBeautySDKarmv7
lipo MHBeautySDK -thin arm64 -output MHBeautySDKarm64
生成2个子文件备用.
四、
接下来需要查看.o文件,比如,输入
ar -t 文件夹/MHBeautySDKarmv7
可以查看MHBeautySDKarmv7 中的所有.o文件,查看这些文件的文件名,并和xcode编译报错时显示的文件名比对,找出重复报错的那些,记录下来待用。
五、
使用-d命令删除这些文件,比如输入
ar -d -sv MHBeautySDKarmv7 GTMBase64.o
ar -d -sv MHBeautySDKarm64 GTMBase64.o
就删除了,剩下的就是之前生成的子文件都删一遍
六、
最后就是合并文件了,把处理好的2个文件使用命令
lipo -create -output MHBeautySDK MHBeautySDKarmv7 MHBeautySDKarm64
进行合并,这6步走完就大功告成了,编译,Succeeded。