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

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

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

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

我已经看到了其他SOpost,build议删除Derived Data文件夹和/或使用Clean Build Folder选项来通过这个错误,但是这个解决scheme在我的情况下根本没有帮助。 自从最后一次使用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位置无关。

当一个快速的应用程序build立时,它经历了几个步骤:

  • 写辅助文件

  • 创build产品结构

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

  • 复制资源规则plist

  • 复制应用程序桥接标题

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

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

  • 创build应用程序二进制

  • 复制资源构build阶段

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

  • 打包

  • 签字

呼! 好多啊。 与swift运行时库链接时,构build失败。 他们住在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。 这不是图书馆架构的问题。

链接到快速标准库是行不通的。 源代码pipe理或迁移Xcode版本可能会导致您的项目文件丢失部分链接步骤,或者根本无法find需要链接的库。 Xcode项目文件是复杂的,并使用了大量的引用 – 这可能是一个合并等引起的关键参考从连接步骤中分离出来。 如果没有完整的构build日志,并看看你的机器可能无法告诉。

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

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

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

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

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

我已经解决了我的冲突:

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

replace目标 – >生成设置 – >链接 – >其他链接器标志:$(OTHER_LDFLAGS)

检入Target – > Build Phases – > Copy Pods资源:“$ {SRCROOT} / Pods / Target Support Files / Pods / Pods-resources.sh”

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

2)在你的情况下,它可以通过从构build设置中移除armv7架构来运行。 并确保您的编译器是“生成设置”中的“默认编译器”。

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

这似乎是由于链接不支持所请求的体系结构的第三方库而导致的(对于大多数情况)。

我有一些类似的问题(从苹果的框架链接错误)。 事实certificate,问题是,我错过了LocalAuthentication.framework库。 我想知道如果也许你需要从构build阶段选项卡(链接库部分)中删除Foundation.framework,然后重新添加? 也许这将解决问题?

“升级”到Xcode 6和SWIFT应用程序不会build立模拟器,但会build立罚款的iPad – 链接器错误,为模拟器i386未定义的符号。

清除Library / Developer / Xcode / DerivedData文件夹为我工作。

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

简单的“修复”就是将整个“衍生数据”和所有构build文件(即手动清理项目)废弃,然后在新的Xcode重新启动后重新生成。 神奇的是,链接器现在find所有缺less的架构/符号。

注意:我有几个不兼容的V表崩溃由相同的错误引起的。 C ++链接器似乎正在生成不完整的链接,在没有发现真正的错误的地方引发荒谬的错误。 再次,只是从一个干净的状态重新build立和..大达..节省自己很多头痛,浪费时间追查一个非问题。

我尝试了所有在这里build议没有运气,我解决了这个问题。 就像之前说过的那样,这是一个SourceControl问题。

项目浏览器中缺less我的一个项目文件(错误消息中引用的文件)。 但是,XCode仍然有一个引用(当我从Xcode GUI中select“跳转到定义”时,我正在进入类定义)。

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

当谈到iOS Objective C的时候,我是一个非常有名的人,尽pipe我已经在其他几种语言中编写了很多年了。 所以我大部分时间都是用Objective C刺伤身体

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

 extern NSString *globalNotes; extern NSString *globalUserCountry; 

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

 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"; 

这似乎解决了我的问题。