美文网首页iOS开发常用IOS推送IOS+前段 Cordova框架研究
iOS工程引入第三方库报错linker command fail

iOS工程引入第三方库报错linker command fail

作者: 一亩三分甜 | 来源:发表于2017-07-15 02:04 被阅读5105次

    通常项目中会根据需求引入较多的第三方库,这时因为工程中已经存在很多第三方库了,很有可能两个文件中会有重复定义的问题,报错信息ld: 2 duplicate symbols for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)。如两个文件中两个变量名相同。则报错信息如下(是我在项目里面引入一个第三方SDK时的报错):

    duplicate symbol _IPHONE in:
        /Users/xhqb/Library/Developer/Xcode/DerivedData/XHQB-dxnbsxlpzmqtxgfkdcyjydtieztp/Build/Intermediates/XHQB.build/Debug-iphoneos/XHQB.build/Objects-normal/armv7/OliveappScreenDisplayHelper.o
        /Users/xhqb/Desktop/xhqb-ios/XHQB/ThridLibrary/CopyToYourProject/LivenessDetectionCombineSDK/libOliveappCombineSDK2.a(OliveappDeviceHelper.o)
    duplicate symbol _IPOD in:
        /Users/xhqb/Library/Developer/Xcode/DerivedData/XHQB-dxnbsxlpzmqtxgfkdcyjydtieztp/Build/Intermediates/XHQB.build/Debug-iphoneos/XHQB.build/Objects-normal/armv7/OliveappScreenDisplayHelper.o
        /Users/xhqb/Desktop/xhqb-ios/XHQB/ThridLibrary/CopyToYourProject/LivenessDetectionCombineSDK/libOliveappCombineSDK2.a(OliveappDeviceHelper.o)
    ld: 2 duplicate symbols for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    遇见linker command failed with exit code 1 (use -v to see invocation报错后,首先是删掉Build Settings下Other Linker Flags里面的的-ObjC标志,之后编译不在报错。但是删掉后可能会导致其他第三方库报错和不能使用。因为-ObjC和Objective-C的一个重要特性:类别(category)有关。根据解释,Unix的标准静态库实现和Objective-C的动态特性之间有一些冲突:Objective-C没有为每个函数(或者方法)定义链接符号,它只为每个类创建链接符号。这样当在一个静态库中使用类别来扩展已有类的时候,链接器不知道如何把类原有的方法和类别中的方法整合起来,就会导致你调用类别中的方法时,出现"selector not recognized",也就是找不到方法定义的错误。为了解决这个问题,引入了-ObjC标志,它的作用就是将静态库中所有的和对象相关的文件都加载进来。


    由上面可以得知是在将静态库中的所有文件加载进工程进行编译的时候,静态库中的文件和工程中的文件OliveappScreenDisplayHelper.o在PHONE和IPOD这两个变量重复定义了,此时由于静态库中的文件我们看不到而不能做修改,就只能改工程中的文件OliveappScreenDisplayHelper.o,在工程中搜索这个文件,发现工程中OliveappScreenDisplayHelper.m文件中确实存在这样的两个变量。

    将两个变量重新命名之后即可编译通过。

    若重复的变量名很多,则要挨个进行修改,我目前碰到的情况只有两个变量重复。

    相关文章

      网友评论

      • 羞涩的老湿鸡:能告诉我这个人脸识别是什么公司的三方框架吗?在哪里能找到?谢谢
        LV大树:同求oliveapp
      • Kingiiyy_iOS:和楼主的问题差不多...看了楼主了简书解决的...蟹蟹哈哈哈.
        Kingiiyy_iOS:@8142bbccede3 这个没有指定是人脸识别的吧..很多框架
        羞涩的老湿鸡:能告诉我这个人脸识别是什么公司的三方框架吗?在哪里能找到?谢谢
      • 殴打小熊猫:楼主 一样的问题 一样的SDK

      本文标题:iOS工程引入第三方库报错linker command fail

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