Xcode 9 个未定义的建筑符号 x86_64

Xcode 9 undefined symbols for architecture x86_64

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

我删除了项目和 类 名称,但是有一个 类 列表以 .o 后缀结尾。在 Xcode 8.3.2 中一切正常。我有 2 个项目,一个是构建没有问题的库。另一个项目是测试应用程序,它通过 Podfile 中的 :path 指令指向库。在这两个项目中,build settings -> architectures 设置为 standard arichitectures,Build active architectures only 设置为 DEBUG: Yes, RELEASE: No。你遇到过这个问题吗?预先感谢您的帮助。

由于您使用的是 Cocoapods,因此很可能需要更新它们。

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

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

有时可能需要清理派生数据(Xcode 缓存)。您可以通过转到 Xcode 的 Product 菜单并在按住 Option/Alt 键的同时选择菜单项 'clean build folder'.

来完成此操作

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

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

运行 进入类似的问题。只是 post 它在这里以防它可以帮助任何人。

在我们应用的 Objective-c [=34] 中使用 class AbcService 来自一个框架(用 Swift 3 和我们自己编写) =] B. 从 Xcode8/Swift3 升级到 Xcode9/Swift4 之后,由于 Undefined symbols 这个 class 链接期间:

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

奇怪的是,存档 debug 配置和 运行 在模拟器中都很好。

花了将近 1 天的时间找出根本原因:框架中的 Swift class AbcService 缺少一个 public修饰符.