构建失败,错误为:ld: 重复符号 _OBJC_CLASS_$_Algebra5FirstViewController

73
在使用 iPhone 模拟器运行我的应用程序时,突然出现了以下错误:

clang: error: 链接器命令失败,退出码为 1(使用 -v 查看调用):
ld: 在 .../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/Intermediates/Algebra5.build/Debug-iphonesimulator/Algebra5.build/Objects-normal/i386/ExercisesViewController.o 和 .../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/Intermediates/Algebra5.build/Debug-iphonesimulator/PSLEAlgebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o 中重复符号 _OBJC_CLASS_$_Algebra5FirstViewController,架构为 i386

这是什么意思?
28个回答

67

看起来 Algebra5FirstViewController 类被编译了多次。

请确保在 Xcode 项目源码中只包含一次 .m 和 .mm 文件。您还可以通过检查编译日志(位于断点图标旁边的最右边的图标)来确认它只被编译了一次。

此外,如果该类是您链接的库的一部分,并且您有一个同名的类,则可能会出现相同的错误。

最后,您可以尝试进行清理和重建,以防旧对象文件仍然存在并且编译文件中有一些垃圾。以防万一......

编辑

我还注意到第二个引用是在 ExercisesViewController 文件中进行的。也许这个文件中有一些问题。要么您导入了 Algebra5FirstViewController 文件而不是 .h 文件,要么 ExercisesViewController 的 @implementation (Algebra5FirstViewController) 错写成了 @implementation (ExercisesViewController),或者该文件中有一些垃圾需要使用清理和重建进行清除。


2
自动完成导入.m文件而不是.h文件是导致我的问题的原因。 - Jeff Ames

51

如果同一个 .m 文件在你的目标的 "Compile Sources" 部分的 "Build Phases" 中被多次引用,就会发生这种情况。删除重复的条目,问题就会解决。


2
如果代码中使用的.m文件未在“编译源”中引用 - 就像我遇到的情况一样。 - Ryan Wheale

30

由于在头文件中(错误地)声明了const * NSString,而不是在实现文件中(正确地)声明,在这个问题上也遇到了这个问题。


这最终是我的问题,但仅限于模拟器 - 当在我的手机上编译/执行时,它运行良好。 - NathanChristie

24

我遇到了这个问题,因为我不小心导入了“ .m”而不是“ .h ”文件。希望阅读这篇文章能够节省其他人解决同样问题的时间。


10

我曾经遇到同样的问题,现在解决了!

如果您已将任何文件导入项目,请检查 .m(主)文件是否存在于 Targets(项目名称) -> Build Phases -> Compile Sources 中。

如果文件不存在,请使用 (+) 添加按钮将其包含进去。此外,如果存在重复文件,则将其删除。

现在按 cmd+shift+k 清理项目。新构建不应该显示此错误。

输入图像描述


5

当我像@paiego所解释的那样从另一个项目添加文件时,我遇到了类似的错误。我的错误在于我没有勾选“添加到目标”。如上所述,我删除了引用并再次添加了文件,但这次我勾选了“添加到目标”。


4

我之前也遇到过类似的错误,但通过这种方式解决了。

尝试将“Pods”项目和你的应用程序目标的“Build Active Architecture Only”设置为NO。


3

当我在TableViewController中导入ViewController.m时遇到了这个问题。如果存在此文件,请尝试删除“#import“ViewController.m””。希望这可以帮到你!


3

有一次,当我将一个新类的.h和.m文件拖入项目时,出现了这个错误。我找到的唯一解决方法是通过项目菜单删除对这些文件的引用,然后再重新添加它们。


1

我发表了一个新的回答,因为我遇到了这个错误,不得不使用一个我认为只适用于iOS 9的不同解决方案。

我必须在构建设置中明确禁用“启用位码”,这在更新中自动开启。

参考答案:iOS 9中的新警告


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