美文网首页
iOS 引用第三方库出现n duplicate symbols

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

作者: iOS_zy | 来源:发表于2021-10-08 17:37 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/wmvxoltx.html