在升级到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_在
这里发生的事情与您的派生数据位置无关。
构建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”