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

2(n) duplicate symbols for architecture arm64 是较常见问题,是在导入第三方SDK的时候出现的。

究其原因是SDK中包含了工程中原本存在的某个类,一般如果是自己引用的,我们可以把自己引用的那份改名甚至直接删除来解决。

  • 例如这种:


    image
  • 找到具体的位置
image

删除重复文件,或者把自己写的文件改名即可,重新编译后解决问题。

但是如果他们都是第三方库怎么办呢?上面就是两个库同时使用了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。


image.png

二、

打开终端,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。

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