提问者:小点点

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


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

体系结构ARMv7的未定义符号:“_SWIFT_STDLIB_ComparenssStringDeterministicUnicoDecollation”,引用自:

。。。

ld:找不到体系结构armv7 CLANG的符号:错误:链接器命令失败,退出代码为%1(请使用-v查看调用)

我看到过其他的SO文章,它们建议删除派生的数据文件夹和/或使用Clean Build folder选项来克服这个错误,但是这个解决方案在我的情况下一点帮助都没有。 自从Xcode6Beta5(这是它的最后一次工作)以来,我的代码和我使用的CocoaPods没有任何变化。

有什么想法吗?

编辑:

错误日志的完整发布:

体系结构ARM64的未定义符号:“_Swift_Stdlib_ComparensStringDeterministicUnicoDecollelation”,引用自:TFC12MyProject21BarcodeviewController13CaptureOutputTFS0_FTGSQCSO15AvCaptureOutput_24DidOutputMetadataObjectGSSQGSAPSS9AnyObject___14FromConnectionSQCSO19AvCaptureConnection__T_in BarcodeviewController.o“ ller.o“__TFS26_ForceBridgeFromObjectecu__FTPSS9AnyObject_MQ__Q_”,引用自:__TFC12MyProject7Restapi12ResetRestKitFS0_FT_T_在Restapi.o__TFC12MyProject16BluetoothManager17_StartAdventsingFS0_FT_T_在


共3个答案

匿名用户

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

构建swift应用程序时,要经过几个步骤:

>

  • 写入辅助文件

    创建产品结构

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

    复制资源规则列表

    复制应用程序桥接标头

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

    为每个体系结构复制应用程序swift模块

    创建应用程序二进制文件

    复制资源生成阶段

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

    把它打包

    签个字

    呼! 那可真不少。 在链接swift运行时库时,您的构建失败。 它们位于Xcode developer目录的toolchains/xcodeDefault.xctoolchains/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项目文件很复杂,并且使用了很多引用--可能是合并等导致了一个关键引用与链接步骤分离。 如果没有完整的构建日志和查看您的机器,则可能无法进行判断。

    正如您可能猜到的,这个库与项目的派生数据位置无关。

    不幸的是,向前推进的最好方法是重新创建项目文件。 将受损项目的构建日志与确实正确构建的swift项目进行比较可能会提供一些见解,但也可能是浪费时间--问题可能是一些可修复的东西,但更有可能不是。

    我鼓励您将bug归档,并将麻烦的项目文件与之一起归档。

  • 匿名用户

    我已经通过删除~/library/developer/xcode/deriveddata文件夹中的所有数据来解决我的问题。 我在另一个线程中读到了这一点,但忽略了它,认为一个干净的包含了这个过程!

    匿名用户

    我已经更新了约塞米蒂国家公园,Xcode6.1。 我更新了gem xcodeproj(0.19.4)和cocoapods(0.34.4)。

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

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

    在目标中替换->; 生成设置->; 链接->; 其他链接器标志:$(OTHER_LDFLAGS)

    签入目标->; 构建阶段->; 复制Pods资源:“${SRCROOT}/Pods/target Support files/Pods/pods-resources.sh”