Xcode 6.1中文件缺少所需的架构X86_64

50
在Xcode 6.1中,我在iPhone 6和iPhone 5s(iOS 7.1)上遇到错误,错误信息如下:
    Undefined symbols for architecture x86_64:
      "_OBJC_CLASS_$_ClientAuthenticator", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
linker command failed with exit code 1

这是我从架构设置的角度所拥有的。

  Architectures : Standard Architectures(armv7, arm64) - $(ARCHES_STANDARD)
  Base SDK : Latest iOS(8.1) 
  Valid Architectures: arm64, armv7, armv7s

  IOS Deployment Target: iOS 6.0

最近我将操作系统更新到了Yosemite,并将Xcode从6.0升级到了6.1。我在Stack Overflow上搜索了这个问题,参考了Xcode 5.1的所有给定解决方案,但是没有一种方法能够解决我的问题。

更新 - 我按照答案中提供的更改尝试了一下,但我仍然会收到一个错误,提示“缺少必需的架构X86_64”。经过进一步调查,我发现我的库中的文件ClientAuthenticator.o未能为X86_64架构构建,可能就是问题所在?我正在寻找如何将其构建为x86_64。

我的新问题是,arm64和x86_64之间有什么区别?似乎主要是架构制造商之间的差异,但基本的64位架构保持不变。


1
所以,现在你问了正确的问题。我会发布一个答案。 - raurora
7
运行64位模拟器需要x86_64架构。运行64位设备(iPhone 5s,iPhone 6,iPhone 6 Plus,iPad Air,iPad mini with Retina display)需要arm64架构。 - boro
简单解决方案 前往目标 -> 链接 -> 其他链接器标志,并在调试和发布中的其他链接器标志中添加 $(inherited)。 - Mihir Oza
@boro,您已经有了答案,但请发布它而不是评论!!!无论如何感谢您。 - Ashwin G
@AshwinG 谢谢,已发布:https://dev59.com/3F8d5IYBdhLWcg3wsDxW#36197722 - boro
显示剩余7条评论
12个回答

0

我尝试了上述所有方法,但在我的情况下都没有起作用。

我使用的SumUp库引起了这个问题。

我通过以下方式解决了这个问题:

  1. 删除-ObjC参数(全部删除);在以前的SumUp库中,它们需要使用带有参数的-ObjC才能使其正常工作,然而最新版本(xc v4.0.1)的文档说要将其删除。

这仍然没有解决问题,我仍然看到错误遍布各处,因此来到了这个线程,但是,在调整设置后,以下内容解决了问题:

  1. 进入项目的“构建设置”,然后将“仅构建活动架构”更改为“是”,清理、重建,无错误,终于成功了!

0
另外需要注意的一件事是,XCode在处理库导入方面存在问题,在许多情况下的解决方案是在项目中查找导入的文件,从Finder或命令行中删除它,然后再添加回来,否则它将无法被XCode正确更新。如果XCode保留原来的文件,你将不断地困在编译错误、缺失架构等问题中,毫无头绪。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接