首页 文章

Xcode 6链接器错误 - 架构armv7的未定义符号

提问于
浏览
23

升级到Xcode 6 beta 7(现在仍然使用Xcode 6 GM)后,我无法链接我的Swift应用程序 . 我收到的错误如下:

找不到架构的ARMv7铛符号(一个或多个):>未定义架构ARMv7的符号:“_swift_stdlib_compareNSStringDeterministicUnicodeCollation”,从引用:... LD错误:连接器命令,退出代码1(使用-v看调用)失败

我已经看到其他SO帖子建议删除Derived Data文件夹和/或使用Clean Build Folder选项来解决此错误,但在我的情况下,该解决方案根本没有帮助 . 关于我的代码或我正在使用的CocoaPods没有任何改变,因为Xcode 6 beta 5是它最后一次工作 .

有任何想法吗?

编辑:

错误日志的完整发布:

未定义架构arm64符号: “_swift_stdlib_compareNSStringDeterministicUnicodeCollation”,从引用:TFC12MyProject21BarcodeViewController13captureOutputfS0_FTGSQCSo15AVCaptureOutput_24didOutputMetadataObjectsGSQGSaPSs9AnyObject___14fromConnectionGSQCSo19AVCaptureConnection__T_在BarcodeViewController.o “_TFSs21_arrayConditionalCastU___FGSaQ__GSqGSaQ0”,从引用:TFC12MyProject27SessionsTableViewController17viewWillDisappearfS0_FSbT_在SessionsTableViewController.o “__TFSs15_arrayForceCastU___FGSaQ__GSaQ0”,从引用:在RestApi.o __TFC12MyProject28AttendeesTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController __TFC12MyProject7RestApi12tokenMappingfS0_FT_CSo15RKEntityMapping在AttendeesTableViewController.o __TFC12MyProject27SessionsTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController BarcodeViewCont中的SessionsTableViewController.o __TFC12MyProject21BarcodeViewController13startScanningfS0_FT_Sb roller.o “_TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q”,从引用:在BarcodeViewController.o ... LD在RestApi.o _TFC12MyProject16BluetoothManager17_startAdvertisingfS0_FT_T __TFC12MyProject7RestApi12resetRestKitfS0_FT_T_在BluetoothManager.o __TFC12MyProject19LoginViewController32registerForKeyboardNotificationsfS0_FT_T_在LoginViewController.o __TFC12MyProject19LoginViewController35deregisterFromKeyboardNotificationsfS0_FT_T_在LoginViewController.o __TFC12MyProject19LoginViewController16callProcessLoginfS0_FT_T_在LoginViewController.o __TFC12MyProject21CheckinViewController16enableBeaconModefS0_FT_T_在CheckinViewController.o __TFC12MyProject21BarcodeViewController13startScanningfS0_FT_Sb:未找到架构arm64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

10 回答

  • 17

    这里发生的事情与您的派生数据位置无关 .

    构建swift应用程序时,它会经历几个步骤:

    • 编写辅助文件

    • 创建产品结构

    • 为每个架构编译swift源

    • 复制资源规则plist

    • 复制应用程序桥接 Headers

    • 链接每个体系结构的swift运行时库

    • 为每个架构复制应用程序swift模块

    • 创建应用程序二进制文件

    • 复制资源构建阶段

    • 将swift标准库复制到应用程序中

    • 打包它

    • 签名

    呼!好多啊 . 链接swift运行时库时,您的构建失败 . 它们位于Xcode开发人员目录中的 Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos 中 . 具体而言,未正确链接的库是 libswiftCore.dylib . 如果您在该库上使用 nm ,则可以看到它定义了您的第一个缺失符号:

    quellish% nm /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib | grep compareNSStringDeterministicUnicodeCollation
    00197c8c T _swift_stdlib_compareNSStringDeterministicUnicodeCollation
    000000000018352c T _swift_stdlib_compareNSStringDeterministicUnicodeCollation
    

    您还可以使用 lipo 查看文件中的架构:

    quellish% xcrun lipo -info /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib
    Architectures in the fat file: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/libswiftCore.dylib are: armv7 arm64
    

    它包含armv7和arm64 . 这不是图书馆架构的问题 .

    链接快速标准库是行不通的 . 源代码控制或迁移Xcode版本可能会导致项目文件丢失部分链接步骤,或者根本无法找到链接所需的库 . Xcode项目文件很复杂并且使用了很多引用 - 合并等可能导致关键引用与链接步骤分离 . 如果没有完整的构建日志并查看您的计算机,则可能无法分辨 .

    您可能猜到,此库与项目的派生数据位置无关 .

    不幸的是,前进的最佳方式是重建项目文件 . 将已损坏项目的构建日志与正确构建的快速项目进行比较可能会提供一些见解,但这也可能是浪费时间 - 可修复的问题可能是问题,但更可能不是 .

    我鼓励你提交一个bug并用它包含麻烦的项目文件 .

  • 3

    我通过删除 ~/Library/Developer/Xcode/DerivedData 文件夹中的所有数据解决了我的问题 . 我在另一个帖子中读到了这个,但忽略了它认为干净包含了那个过程!

  • 0

    我已经更新了Yosemite,Xcode 6.1 . 我更新了gem xcodeproj(0.19.4)和cocoapods(0.34.4) .

    我通过以下方式解决了我的冲突

    清除Library / Developer / Xcode / DerivedData文件夹

    替换目标 - >构建设置 - >链接 - >其他链接器标志:$(OTHER_LDFLAGS)

    签入Target - > Build Phases - > Copy Pods Resources:“$ / Pods / Target Support Files / Pods / Pods-resources.sh”

  • 9

    1)我面临同样的问题,但只是从 User/Library/Developer/Xcode/DerivedData 清除派生数据的应用程序,我能够运行代码 .

    2)在您的情况下,它将通过从构建设置中删除armv7体系结构来运行 . 并确保您的编译器是Build Settings中的Default Compiler .

    谢谢,我希望这对你和每个人都有帮助 .

  • 0

    这似乎是通过链接不支持所请求的体系结构的第三方库(大多数情况下)引起的 .

  • 0

    我有一些类似的问题(来自Apple框架的链接器错误) . 事实证明,问题是我错过了LocalAuthentication.framework库 . 我想知道你是否需要从Build Phase选项卡中删除Foundation.framework(在Link Libraries部分中),然后重新添加它?也许这会解决问题?

  • 0

    '升级'到xcode 6和swift应用程序不会为模拟器构建,但会在iPad上构建正常 - 链接器错误,i386模拟器的未定义符号 .

    清除Library / Developer / Xcode / DerivedData文件夹对我有用 .

  • 0

    Xcode 6.0.1中似乎存在一个错误,导致链接器删除现有项目文件中的依赖项 . 自6.0.1更新以来,我在新旧各个项目中遇到过同样的问题 .

    简单的“修复”只是删除整个“Derrived Data”和所有构建文件(即手动清理项目),然后在重新启动Xcode后重建 . 奇迹般地,链接器现在找到所有缺少的体系结构/符号 .

    注意:我有几个由同一个bug引起的不兼容的v-table崩溃 . C链接器似乎生成不完整的链接,导致在没有找到真正错误的情况下出现荒谬的错误 . 再一次,只是从一个干净的状态重建,并且... ta da ..为自己省去了很多头痛和浪费时间追踪非问题 .

  • 8

    我尝试了所有这里没有运气的建议后解决了这个问题 . 就像有人说的那样,这是一个SourceControl问题 .

    项目浏览器中缺少我的一个项目文件(错误消息中引用的文件) . 但是,XCode仍然有一个引用它(当我从Xcode GUI选择“跳转到定义”时,我将进入类定义) .

    事实上,project.pbxproj没有列出它 . 这可能是一个Git问题 . 无论如何,我只是在重新创建的同一目录中重新创建文件并瞧 .

  • 0

    对于iOS Objective C,我是一个小雌马,虽然我已经用其他几种语言编写了很多年 . 所以我在目标C的大部分时间都在黑暗中刺伤 .

    在我的.h文件中声明一些“全局”变量后,我开始出现这个错误,“架构armv7的未定义符号”,如下所示:

    extern NSString *globalNotes;
    extern NSString *globalUserCountry;
    

    然后我从.m文件中引用这些变量,如下所示:

    globalNotes= @"Error (Marker 1010)";
    globalUserCountry= @"No result";
    

    修复 - 为了纠正这个问题,我将它们更改为对象属性,如下所示:

    @property(nonatomic, strong, readwrite) NSString *globalNotes;
    @property(nonatomic, strong, readwrite) NSString *globalUserCountry;
    

    并像他们一样提到他们:

    self.globalNotes= @"Error (Marker 1010)";
    self.globalUserCountry= @"No result";
    

    这似乎解决了我的问题 .

相关问题