未定义的符号为建筑armv7

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

架构armv7的未定义符号:“_swift_stdlib_compareNSStringDeterministicUnicodeCollat​​ion”,引用来自:

...

ld:未找到架构armv7 clang的符号:错误:linker命令失败,退出代码1(使用-v查看调用)

我已经看到了其他SO帖子,建议删除Derived Data文件夹和/或使用Clean Build Folder选项来通过这个错误,但是这个解决方案在我的情况下完全没有帮助。 自从最后一次使用Xcode 6 beta 5以来,我的代码或CocoaPods没有任何改变。

有任何想法吗?

编辑:

完整发布错误日志:

对于架构arm64未定义的符号: “_swift_stdlib_compareNSStringDeterministicUnicodeCollat​​ion”,从引用:TFC12MyProject21BarcodeViewController13captureOutputfS0_FTGSQCSo15AVCaptureOutput_24didOutputMetadataObjectsGSQGSaPSs9AnyObject___14fromConnectionGSQCSo19AVCaptureConnection__T_在BarcodeViewController.o “__TFSs21_arrayConditionalCastU___FGSaQ__GSqGSaQ0_”,从引用:TFC12MyProject27SessionsTableViewController17viewWillDisappearfS0_FSbT_在SessionsTableViewController.o “__TFSs15_arrayForceCastU___FGSaQ__GSaQ0”,从引用:在SessionsTableViewController在RestApi.o __TFC12MyProject28AttendeesTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController __TFC12MyProject7RestApi12tokenMappingfS0_FT_CSo15RKEntityMapping在AttendeesTableViewController.o __TFC12MyProject27SessionsTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController .o __TFC12MyProject21BarcodeViewController13startScanningfS0_FT_Sb in BarcodeViewCont 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:符号(s)找不到架构arm64 clang:错误:链接器命令失败,退出代码1(使用-v查看调用)


这里发生的事情与您的Derived Data位置无关。

当构建一个快速的应用程序时,它会经历几个步骤:

  • 编写辅助文件

  • 创建产品结构

  • 编译每个体系结构的swift源代码

  • 复制资源规则plist

  • 复制应用程序桥接标头

  • 链接到每个体系结构的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。 这不是图书馆架构的问题。

    与swift标准库链接不起作用。 源代码管理或迁移Xcode版本可能导致您的项目文件丢失部分链接步骤,或者无法找到需要链接的库。 Xcode项目文件很复杂并且使用了很多引用 - 合并等可能导致关键引用从链接步骤中分离出来。 如果没有完整的构建日志和看看你的机器,可能无法说清楚。

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

    不幸的是,最好的方式是重新创建项目文件。 将破碎项目的构建日志与正确构建的快速项目进行比较可能会提供一些见解,但这也可能是浪费时间 - 可解决的问题可能是问题,但更可能不是。

    我会鼓励你提交一个bug,并且包含麻烦的项目文件。


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


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

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

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

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

    签入目标 - >构建阶段 - >复制脚本资源:“$ {SRCROOT} /脚本/目标支持文件/脚本/脚本 - 资源.sh”

    链接地址: http://www.djcxy.com/p/64611.html

    上一篇: Undefined symbols for architecture armv7

    下一篇: PSPDFKit Linker error when creating a category