iOS工程引入第三方库报错linker command failed with exit code 1

通常项目中会根据需求引入较多的第三方库,这时因为工程中已经存在很多第三方库了,很有可能两个文件中会有重复定义的问题,报错信息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标志,它的作用就是将静态库中所有的和对象相关的文件都加载进来。


iOS工程引入第三方库报错linker command failed with exit code 1_第1张图片

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

iOS工程引入第三方库报错linker command failed with exit code 1_第2张图片

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

iOS工程引入第三方库报错linker command failed with exit code 1_第3张图片

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

你可能感兴趣的:(iOS工程引入第三方库报错linker command failed with exit code 1)