dav*_*ell 23 xcode linker upgrade ios swift
升级到Xcode 6 beta 7(现在仍然使用Xcode 6 GM)后,我无法链接我的Swift应用程序.我收到的错误如下:
架构armv7的未定义符号:"_swift_stdlib_compareNSStringDeterministicUnicodeCollation",引自:
...
ld:找不到架构armv7 clang的符号:错误:链接器命令失败,退出代码为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 ",从引用:在SessionsTableViewController在RestApi.o __TFC12MyProject28AttendeesTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController __TFC12MyProject7RestApi12tokenMappingfS0_FT_CSo15RKEntityMapping在AttendeesTableViewController.o __TFC12MyProject27SessionsTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController BarcodeViewCont中的.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查看调用)
que*_*ish 17
这里发生的事情与您的派生数据位置无关.
构建swift应用程序时,它会经历几个步骤:
写辅助文件
创建产品结构
为每个架构编译swift源代码
复制资源规则plist
复制应用程序桥接标题
链接每个体系结构的swift运行时库
复制每个架构的应用程序swift模块
创建应用程序二进制
复制资源构建阶段
将swift标准库复制到应用程序中
打包它
签字
呼!好多啊.链接swift运行时库时,您的构建失败.他们住在Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneosXcode开发人员目录中.具体来说,未正确链接的库是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
Run Code Online (Sandbox Code Playgroud)
您还可以使用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
Run Code Online (Sandbox Code Playgroud)
它包含armv7和arm64.这不是图书馆架构的问题.
链接快速标准库是行不通的.这有可能是源头控制或迁移的Xcode版本已经引起了你的项目文件拖放链接步骤的一部分,或者它只是无法找到它需要对链接库.Xcode项目文件很复杂并且使用了很多引用 - 合并等可能导致关键引用与链接步骤分离.如果没有完整的构建日志并查看您的计算机,则可能无法分辨.
您可能猜到,此库与项目的派生数据位置无关.
不幸的是,前进的最佳方式是重新创建项目文件.将已损坏项目的构建日志与正确构建的快速项目进行比较可能会提供一些见解,但这也可能是浪费时间 - 可修复的问题可能是问题,但更可能不是.
我鼓励你提交一个bug并用它包含麻烦的项目文件.
Bra*_*d R 10
我通过删除~/Library/Developer/Xcode/DerivedData文件夹中的所有数据解决了我的问题.我在另一个帖子中读到了这个,但忽略了它认为干净包含了那个过程!
小智 8
我已经更新了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:"$ {SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh"
| 归档时间: |
|
| 查看次数: |
39312 次 |
| 最近记录: |