Xcode 6.1中的Mach-O链接器错误

时间:2014-10-21 15:38:13

标签: ios xcode linker-errors xcode6.1

我只在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代码的那个类的桥接错误。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

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

因此,在您的TourViewController中,您似乎引用了字段mm,但链接器无法找到它。也许您可以重写/重新组织代码以避免/解决此问题。