Build 用: ld 失败: 重复符号_OBJC_CLASS_$_ Algebra5FirstViewController

当我通过 iPhone 模拟器运行我的应用程序时,我突然得到了这个错误:

错误: 链接器命令失败,退出代码1(使用-v 查看 祈求) :

中的重复符号 _ OBJC _ CLASS _ $_ Algebra5FirstViewController .../Algebra5-anwcuftojtxtgkfooneeeqhwztj/Build/Intermediates/Algebra5.Build/Debug-iphone 模拟器/Algebra5.Build/Objects-Normal/i386/ExecisesViewController.o 还有 .../Algebra5-anwcuftojtxtgkfooneeeqhwztj/Build/Intermediates/Algebra5.Build/Debug-iphonesimator/PSLE Build/Objects-Normal/i386/PSLE _ Algebra5FirstViewController. o 用于架构 i386

这都是为了什么?

199276 次浏览

看起来 Algebra5FirstViewController 类是多次编译的。

你能确保。M 和 M。Mm 只包含在你在 Xcode 的项目资源中一次?您还可以通过检查编译日志(右边最后一个图标,断点图标旁边)来确认这一点,并确认它只被编译了一次。

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

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

剪辑

我还注意到,第二个引用是在练习视图控制器的文件中提供的。也许文件里有线索。要么您 # 导入 Algebra5FirstViewController 文件,而不是导入。或者练习视图控制器有@实现(Algebra5FirstViewController)而不是@实现(练习视图控制器) ,或者在这个文件中有一些垃圾,可以用一个 Clean an Rebuild 来清理。

同样的情况也会发生。M 文件在目标的“编译源”部分的“构建阶段”中被多次引用。删除重复的条目,应该就没问题了。

在头文件中(错误地)声明 const * NSString而不是实现文件(正确地)也有这个问题

在一个例子中,我在拖动一个新类时看到了这个错误。还有。我很喜欢这个项目。我找到的唯一解决方案是删除对这些文件的引用,然后通过项目菜单重新添加它们。

我在添加来自另一个项目的文件时也遇到了类似的错误,就像@paiego 解释的那样。我的错误是没有检查“ 增加目标”。如上所述,我删除了引用,并再次添加了文件,但这次检查“ 增加目标”。

我也犯了同样的错误。 我已经进口了一个音频框架作品,我不再使用。我删除了它(不要删除它!)而且建造得很成功。

‘ linker 命令失败,退出代码为1(使用-v 查看调用)’-我在 iPhone 上运行 phonegap 应用程序时遇到了这个错误。我将 Build Active Architecture Only 改为 Yes,它工作得很好。

我遇到这个问题是因为我不小心导入了。我代替了。希望读这本书可以帮助有同样问题的人节省一些时间。

看起来,对于 m,我把文件拖到项目中,在那之后没有工作,点击文件“添加文件到项目”。这两种方法都是错误的。只需将其拖放到另一个项目文件夹(在 finder 中)即可。还有。M 档案。

在 OSX 10.7.5上运行 Xcode 4.6.3可以通过将 Architecture 从 $(NATIVE _ ARCH _ ACTUAL)更改为构建机器的本地体系结构来修复这个错误。

我也有同样的问题,解决了!

如果您已经将任何文件导入到项目中,请检查。同样的 m (main)文件确实存在于目标(项目名称)-> 构建阶段-> 编译源。

如果文件不存在,则使用(+) Add 按钮将其包括在内。 此外,如果存在重复的文件(如果有的话) ,那么删除它。

现在按 cmd + shift + k 清理项目。 New Build 不会显示此错误。

enter image description here

一旦我得到了

18 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1

对我来说,这是因为我已经使用了“ const NSInteger”在我的开关案件。

我所做的是将 const NSInteger 更改为 enum,并将引用替换为 enum 值。

这为我修正了错误。

我曾经(偶然地)将.h 和.m 文件导入到同一个类中,从而收到了这个命令。

这种情况要么发生,有些文件在“编译源”部分中丢失,要么找到某些文件的重复条目。在我的例子中,我有两个文件的重复条目,我为每个文件删除了一个条目,这解决了我的问题。希望这个能帮上忙。

我在实现一个没有添加必要框架的子类时得到了这个错误(在本例中,MPMoviePlayerController 没有添加 MediaPlayer 框架)

我在 TableViewController 中导入 ViewController.m 时遇到了它。如果它退出了,尝试删除“ # import“ ViewController.m”。希望有帮助!

我在处理 Bolts.Framework 时也遇到过同样的问题。事实证明,当螺栓损坏时,再多的重新进口也无法解决这个问题。我不得不返回到原始的下载文件,并重新导入它完全从头开始。这个马上就修好了。这是一个如此奇怪的问题,以至于我花了很长时间才弄明白... ... 希望这个建议能让你们中的一些人免受同样的挫折:)

当我命名一个 UILabel 引用和一个 int 同样的东西的时候,我没有得到一个错误,当我只是在尝试运行它的时候,我没有意识到这是个问题,但是如果你有一个类似于 label 的东西,它是“ score”,你把它叫做 score,并且命名一个 int,它也是 score,那么这个问题就会发生。

我发现这个 文章为我提供了一个解决方案。它适用于 Xcode 7,在以前的版本中,No Common Block 的默认值是 Yes 而不是 No。

这是文章中的一句话:

问题似乎在于“ Apple LLVM”中的“ No common block” 在 Xcode 的最新版本中,“构建设置”窗格中的“6.1-代码生成”部分被设置为“是”。

这导致了我将描述为循环引用的情况,其中包含在我的 Compile Source 中的类通过另一个源文件中的 # import 引用。这会导致在原始基类中声明的变量出现重复块。

将值更改为 No 立即使我的应用程序编译和解决我的问题。

我发布了一个新的答案,因为我遇到了这个错误,不得不使用一个不同的解决方案,我认为是特定于 iOS9。

我必须显式禁用“生成设置”中的“启用位代码”,该设置在更新中自动打开。

参考答案: IOS9中的新警告

[ XCODE 7.1 UPDATE ]

第一个有效的选择:

我将 Deployment Target从7.1改为8.1,错误就消失了。

希望这对某人有帮助。

更新(第二天) : 两天内我第二次回到这里。

在第2天,我开始得到更多的错误,除了这个恼人的错误。问题在于 Xcode 不能识别的冲突文件。我使用下面的链接作为帮助:

  1. “ _ OBJC _ CLASS _ $_ viewsampleViewController”,引自:

  2. 警告: 找不到选项的目录

最终:

  1. “ _ OBJC _ CLASS _ $_ viewsampleViewController”,引自:

我删除了 FrameWork Search Paths + Compile Resources + Run Script Phases + 豆荚里的所有东西,然后重新安装它们,最终找到了成功。

我的尺寸问题(第2天)更多的是与 Xcode 不能识别的冲突文件或文件的问题。

但是最终,删除所有内容(上面和链接中提到的)、多次清理并重新安装 pods/框架/运行脚本阶段会有所帮助。

真心希望这能帮到别人。

我得到了类似的错误,我得到了它解决 这边

尝试为“ Pods”项目将“仅构建活动体系结构”设置为“ NO”,然后 你的应用程序的目标

在我的例子中,我在其他链接器标志中引用了一个库。删除它消除了错误。

enter image description here

enter image description here

如果缺少库或文件,则可能发生此问题的变化。检查您的项目资源管理器中是否有任何丢失的文件: 如果 Xcode 找不到它们,它们将被写成红色。

“链接二进制与图书馆”有旧的项目名称吊舱库。固定后删除。

  1. 列表项目
  2. 工程项目
  3. 构建阶段
  4. 链接二进制与库
  5. 删除已废弃的库。

我在图书馆遇到过同样的问题,我尝试了这里列出的所有答案,但没有任何帮助。

我结束了简单的 把图书馆搬走链接二进制与图书馆,然后 重新加入,它工作得很好。

解决这个问题的唯一方法是从命令行构建测试:

xcodebuild -workspace MyProject.xcworkspace/ -scheme MyScheme -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' test

因此,在这一点上,您的编译肯定会失败,但是您将看到所有的链接问题。在我的案例中,我遇到了几个问题,比如:

  • Ld: 未找到框架‘ Foo’
    要解决这个问题,您需要在目标 BuildSettings-> Link-> OtherLinkerFlags 上删除“ Foo”框架。
  • 使用未解析的标识符‘ ClassName’
    为了解决这个问题,我还需要向 UITest 目标添加/检查 file 的目标成员资格。

Xcodebuild 会引起其他可能的问题,您可以很容易地修复它。

简单地清洗 CMD + SHIFT + K,然后建立 CMD + B为我工作。