Xcode 9架构x86_64的未定义符号

时间:2017-09-26 06:07:49

标签: ios iphone xcode llvm xcode9

切换到Xcode 9后我收到错误,看起来像这样。

enter image description here

我清空了项目和类名,但是有一个以.o后缀结尾的classess列表。在Xcode 8.3.2中一切正常。我有两个项目,一个是没有问题的图书馆。另一个项目是测试应用程序,它通过以下方式指向库:Podfile中的path指令。在两个项目中构建设置 - >架构设置为标准架构,构建活动架构仅设置为DEBUG:是,RELEASE:不。您是否遇到过这个问题?先谢谢你的帮助。

4 个答案:

答案 0 :(得分:7)

陷入类似的问题。只需在此处发布,以防它可以帮助任何人。

在我们的应用程序的Objective-c类B中使用来自框架(用Swift 3和我们自己编写)的类 AbcService 。从Xcode8 / Swift3升级到Xcode9 / Swift4之后由于在链接期间此类出现Undefined symbols错误,因此无法为发布配置构建存档:

Undefined symbols for architecture arm64:
   "_OBJC_CLASS_$__TtC15XxxabcServices17AbcService", referenced from:

奇怪的是,它可以归档 debug 配置,以及在模拟器中运行。

花了差不多1天才找出根本原因:框架中的Swift类 AbcService 缺少 public 修饰符。

答案 1 :(得分:4)

这里的简单技巧:Go - >转到文件夹" / Library / Developer / Xcode"删除派生数据然后清理项目,然后运行。

答案 2 :(得分:0)

由于你使用Cocoapods,你很可能需要更新它们。

这意味着您需要在项目目录中的命令行上执行pod update,然后在Xcode中重建项目。

通常,在使用Xcode的新主要版本时,必须重建所有组件。您的错误消息告诉您,您已经拥有的目标文件(* .o文件基本上是编译器从源文件中生成的文件)与新编译的目标文件不兼容(在您的情况下抱怨的链接器具有将所有目标文件组合或“链接”在一起的目的。)

有时可能需要清理派生数据(Xcode缓存的内容)。您可以通过转到Xcode的Product菜单并按住Option / Alt键,选择菜单项“clean build folder”来完成此操作。

答案 3 :(得分:0)

当我运行build进行性能分析时,它正在运行,但是经典构建时提到了错误。在搜索日志后,似乎有一些奇怪的行为,特别是-fprofile-instr-generate。解决方案是在库项目的构建设置中将标记Enable Code Coverage设置为No。这是在黑暗中拍摄但不知何故让它发挥作用。