首页 > 解决方案 > 如何解决来自 Cocoapods lint 命令的链接器错误?

问题描述

我有一个用 Objective-C 为 iOS 编写的库,我们通过 Cocoapods 发布,最近当我尝试使用pod lib lint命令验证 pod 时,我遇到了一对链接错误。这两个错误看起来像这样(更改名称以保护无辜者):

Ld /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/Binary/App normal x86_64 (in target 'App' from project 'App')
    cd /var/folders/4v/jcw9j9x126j5wsmpqmhhswx40000gn/T/CocoaPods-Lint-20191211-37020-sasgf-FooBarSDK
    /Applications/Xcode-11.2.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -target x86_64-apple-ios8.0-simulator -isysroot /Applications/Xcode-11.2.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator13.2.sdk -L/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator -L/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator/FooBarSDK -L/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator/TFooBarSDK -L/var/folders/4v/jcw9j9x126j5wsmpqmhhswx40000gn/T/CocoaPods-Lint-20191211-37020-sasgf-FooBarSDK/Pods/TFooBarSDK/FooBar -F/Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Products/Release-iphonesimulator -filelist /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/App.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -dead_strip -Xlinker -object_path_lto -Xlinker /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/App_lto.o -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -ObjC -lFooBar_1.2.4 -lFooBarSDK -lTFooBarSDK -lz -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/App.app-Simulated.xcent -framework Foundation -lPods-App -Xlinker -dependency_info -Xlinker /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/App_dependency_info.dat -o /Users/myusername/Library/Developer/Xcode/DerivedData/App-akupndrkecikjfdfvjfyniytivhf/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/x86_64/Binary/App
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_FooBar", referenced from:
      l_OBJC_$_CATEGORY_FooBar_$_ForceLoad in libFooBarSDK.a(FooBarEmpty.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

当我将项目从 Xcode 9.x 升级到 Xcode 10.3 或 11.2(两个版本相同)时,问题可能已经开始,或者这可能是一个红鲱鱼。

我的理解是,在其他健全性检查中,pod lib lint创建一个包含相关库(libFooBarSDK在本例中)并尝试构建它的应用程序项目,看起来该项目的链接阶段是导致此错误的原因。但是,我们的测试应用程序链接到库没有问题。

pod --version顺便说一句,我正在使用 Cocoapods 的 1.7.5 版。

我的问题:

标签: iosobjective-ccocoapods

解决方案


添加选项--verbose以获取有关失败的更详细日志。添加选项--no-clean以保存 Xcode 工作区,您可以从中调试链接器符号问题。


推荐阅读