【问题标题】:Mach-O Linker Error in Xcode 6.1Xcode 6.1 中的 Mach-O 链接器错误
【发布时间】:2014-10-21 15:38:12
【问题描述】:

我仅在 Xcode 6.1 中收到以下链接器错误,Xcode 6.01 工作正常:

Undefined symbols for architecture x86_64:
  "__TWvdvC7Bamberg18TourViewController2mmT_", referenced from:
      __TFC7Bamberg18TourViewControllerm2mmT_ in tours.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

现在我知道标准建议了。我已经尽力尝试了:

  • 清理项目和构建文件夹
  • 删除管理器和开发者文件夹中的派生数据
  • 从模拟器和设备中删除以前版本的应用程序
  • 重置模拟器
  • 将“仅构建活动架构”设置为是/否
  • 使用编译器和架构设置
  • 添加可以想象的每一个框架(包括全部添加)
  • 确保所有实现文件都包含在“编译源”中
  • 我什至在 XCode 6.1 中重新创建了整个项目,以确保它不是一些隐藏的错误衍生数据问题

最后,我设法将问题的根源指向导入的 Objective C 类,该类已正确桥接 - 当我不使用此类时,错误消失了:(https://github.com/mrcrow/MRoundedButton)

如果我在 6.1 中直接打开该类的演示项目,它可以正常工作。所以我认为它必须是该类与我的特定代码在被桥接时的冲突,或者该类与一般的 swift 代码的桥接错误。

非常感谢任何帮助。

【问题讨论】:

  • 您为 Target >> Build Settings >> Architecture 设置了哪些设置?
  • 标准架构(armv7、arm64)
  • 你是直接使用MRoundedButton.hMRoundedButton.m这两个类还是Cocoa Pods?
  • 我直接使用它们。

标签: ios xcode linker-errors xcode6.1


【解决方案1】:

您的 Swift 代码似乎有问题或触发了 Swift 编译器中的错误。您的链接器抱怨的符号是 Swift 符号(由 __T 前缀标识)。当传递给swift-demangle 工具时,符号转换为:

_TFC7Bamberg18TourViewControllerm2mmT_ ---> Bamberg.TourViewController.mm.materializeForSet : ()
_TWvdvC7Bamberg18TourViewController2mmT_ ---> direct field offset for Bamberg.TourViewController.mm : ()

所以在您的TourViewController 中,您似乎引用了一个字段mm,但链接器找不到它。也许你可以重写/重组你的代码来避免/解决这个问题。

【讨论】:

  • 奇怪,因为如果我不使用上面提到的 ObjC 类,Swift TourViewController 可以正常工作。但无论如何,我都会尝试改变一些事情。谢谢。
  • 没关系,你说对了。我必须在方法内而不是全局声明 mm (这是一个字典)。不知道为什么,但它现在有效。非常感谢你让我走上正轨。
猜你喜欢
  • 2013-12-03
  • 2012-12-31
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 2015-09-02
相关资源
最近更新 更多