Xcode 9在架构x86_64中未定义符号

9

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

enter image description here

我已经把项目和类名空出来了,但是有一个以“.o”结尾的类列表。在Xcode 8.3.2中一切正常。我有两个项目,一个是构建无问题的库。另一个项目是测试应用程序,通过Podfile中的:path指令指向库。在两个项目的构建设置->体系结构中,都将“build active architectures only”设置为DEBUG:Yes,RELEASE:No。你遇到过这个问题吗?非常感谢您的帮助。


你的 Pod 是否已更新? - Anbu.Karthik
1
我刚刚更新了它们,但是还是出现了相同的错误。 - Jozef Vrana
你是在设备上还是模拟器上尝试运行?你的文件不支持模拟器。 - Anbu.Karthik
你能展示一下 Pod 文件吗? - karthikeyan
尝试使用cocoapods-deintegrate卸载所有的pod依赖项,然后再次运行pod install,应用程序目标的构建设置将在Pods项目中得到刷新 - Itachi
显示剩余2条评论
4个回答

7
我遇到了类似的问题,把它发在这里以帮助其他人。我在我们应用程序的Objective-C类B中使用了一个由我们自己编写的用Swift 3编写的框架中的AbcService类。在从Xcode8/Swift3升级到Xcode9/Swift4后,在链接期间构建发布版本时,由于Undefined symbols错误,导致无法构建该类的存档 release 配置。
Undefined symbols for architecture arm64:
   "_OBJC_CLASS_$__TtC15XxxabcServices17AbcService", referenced from:

奇怪的是,将debug配置归档以及在模拟器中运行都很好用。

花了近一天时间才找到根本原因:框架中的Swift类AbcService缺少了public修饰符。


4
简单的技巧:前往文件夹"/Library/Developer/Xcode",删除Derived Data文件夹,接着清理你的项目,然后重新运行。

0

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

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

通常,在使用新版本的Xcode时,需要重建所有组件。您的错误消息告诉您,您已经拥有的对象文件(*.o文件基本上是编译器从源文件生成的内容)与新编译的对象文件不兼容(链接器在您的情况下正在抱怨或“链接”所有对象文件)。

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


我在两个项目中都进行了pod update,按照您建议的方式清理了构建文件夹,但仍然出现了这些错误。 - Jozef Vrana
你在两个项目中设置了哪个Swift版本?你确定测试应用程序中引用的框架不是旧框架,而是你最新构建的框架吗? - Thomas Krajacic
你可以从链接的框架中删除应用程序的依赖项,然后再次拖入。 - Thomas Krajacic
这两个项目都是Objective-C编写的。我确信我正在引用正确的项目。 - Jozef Vrana
如果您能提供构建日志,那将非常有帮助。在左侧检查器窗格中,转到最后一个选项卡,您将看到所有最近的构建。选择最后一个构建,您将在主编辑器中看到日志。您能以某种方式发布它吗?(如果您愿意,可以在文本编辑器中查找/替换内容以模糊事物) - Thomas Krajacic
这个问题发生过两次。其中一次运行 pod update 解决了问题。另外一次我必须做其他事情,不确定确切地是什么,可能是删除衍生数据。 - MikeG

0

当我运行构建进行分析时,它是正常工作的,但是普通构建中会出现错误。在搜索日志后,似乎有一些标志的奇怪行为,特别是 -fprofile-instr-generate。解决方案是在库项目的构建设置中将标志“启用代码覆盖率”设置为“否”。这是一次尝试并且有些盲目,但以某种方式让它起作用了。


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