73

通过 iPhone 模拟器运行我的应用程序时,我突然收到此错误:

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

ld:重复符号 _OBJC_CLASS_$_Algebra5FirstViewController 在 .../Algebra5-anwcuftojtxtgkfootneeeqhwztj/Build/Intermediates/Algebra5.build/Debug-iphonesimulator/Algebra5.build/Objects-normal/i386/ExercisesViewController.o 和 .../Algebra5-anwcuftojtxtgkfootneeeqhwztj/ Build/Intermediates/Algebra5.build/Debug-iphonesimulator/PSLE Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o 架构 i386

这是什么一回事呢?

4

28 回答 28

67

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

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

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

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

编辑

我还注意到第二个引用是在针对 ExperimentsViewController 的文件中进行的。也许这个文件中有一些东西。要么您#imported Algebra5FirstViewController 文件而不是 .h,要么ExercisesViewController 具有@implementation (Algebra5FirstViewController) 而不是@implementation (ExercisesViewController),或者此文件中有一些垃圾将通过 Clean an Rebuild 进行清理。

于 2012-05-03T16:13:49.463 回答
51

如果在“构建阶段”中目标的“编译源”部分多次引用同一个 .m 文件,就会发生这种情况。删除重复的条目,你应该没问题。

于 2012-05-03T16:14:01.277 回答
30

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

于 2012-07-11T19:37:48.533 回答
24

我遇到了这个问题,因为我不小心导入了 .m 而不是 .h。希望阅读这篇文章可以节省一些时间遇到同样问题的人。

于 2013-07-01T19:46:24.863 回答
10

我有同样的问题。解决了!

如果您已将任何文件导入项目,请检查 .m(主)文件是否存在于目标(项目名称)-> 构建阶段-> 编译源中。

如果文件不存在,则使用显示的 (+) 添加按钮将其包含在内。此外,如果存在重复文件(如果有),则将其删除。

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

在此处输入图像描述

于 2014-02-05T14:21:33.867 回答
5

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

于 2012-10-16T06:34:26.073 回答
4

我遇到了类似的错误,我以这种方式解决了它。

尝试将“Pods”项目和应用程序目标的“仅构建活动架构”设置为“否”

于 2015-12-14T11:56:44.427 回答
3

在一种情况下,我在将新类的 .h 和 .m 拖入项目时看到了这个错误。我找到的唯一解决方案是删除对这些文件的引用,然后通过项目菜单将它们添加回来。

于 2012-08-25T23:06:40.747 回答
3

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

于 2014-10-13T11:05:49.373 回答
1

'链接器命令失败,退出代码 1(使用 -v 查看调用)'- 在 iPhone 上运行 phonegap 应用程序时出现此错误。我将“仅构建活动架构”更改为“是”,它运行良好。

于 2013-03-28T09:10:14.897 回答
1

似乎对于m,我将文件拖到项目中,然后不起作用,单击文件“将文件添加到项目”。两者都是错误的方法。只需将其拖入包含其他 .h 和 .m 文件的项目文件夹(在 finder 中)。

于 2014-01-13T22:52:43.583 回答
1

一旦我得到

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

对我来说,这是因为我在我的 switch 案例中使用了“const NSInteger”。

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

这为我解决了错误。

于 2014-04-16T05:53:01.320 回答
1

出现这种情况,“编译源”部分中缺少某些文件,或者为某些文件找到重复条目。就我而言,我有两个文件的重复条目,我为每个文件删除了一个条目,这解决了我的问题。希望这可以帮助。

于 2014-06-18T06:32:24.553 回答
1

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

这是文章中的一段话:

问题似乎是在最新版本的 Xcode 中,“构建设置”窗格中“Apple LLVM 6.1 - 代码生成”部分中的“无公共块”设置为“是”。

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

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

于 2015-09-20T13:52:03.940 回答
1

我正在发布一个新的答案,因为我遇到了这个错误并且不得不使用我认为特定于 iOS 9 的不同解决方案。

我必须在 Build Settings 中明确禁用 Enable Bitcode,它会在更新中自动打开。

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

于 2015-10-14T00:19:19.137 回答
1

[XCODE 7.1 更新]

第一个有效的选项:

我将Deployment Target7.1 更改为 8.1,错误消失了。

希望对某人有所帮助。

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

在第 2 天,除了这个烦人的错误之外,我还开始遇到更多错误。问题是 Xcode 无法识别的冲突文件。我使用以下链接作为帮助:

  1. “_OBJC_CLASS_$_viewsampleViewController”,引用自:

  2. 'ld:警告:找不到选项的目录'</a>

最终:

  1. “_OBJC_CLASS_$_viewsampleViewController”,引用自:

我从FrameWork Search Paths++ Compile Resourcespod中删除了所有内容Run Script Phases,然后再次重新安装它们以最终获得成功。

我的大小问题(在第 2 天)更多的是与冲突文件或 Xcode 无法识别的文件有关的问题。

但最终,删除所有内容(上面和链接中提到的),清理很多次并重新安装 pods/frameworks/run 脚本阶段有所帮助。

真的希望这可以帮助某人。

于 2015-11-27T14:10:17.443 回答
0

在 OSX 10.7.5 上运行 Xcode 4.6.3 能够通过将架构从 $(NATIVE_ARCH_ACTUAL) 更改为构建机器的本机架构来修复此错误。

于 2014-01-17T19:12:18.820 回答
0

我通过(意外)将 .h 和 .m 文件都导入到同一个类中收到了一次。

于 2014-04-28T20:55:14.483 回答
0

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

于 2014-08-01T00:49:37.897 回答
0

我在使用 Bolts.framework 时遇到了同样的问题。事实证明,当 Bolts 损坏时,再多的重新导入也无法解决问题。我不得不返回原始下载文件并从头开始完全重新导入。这立即修复了它。这是一个如此奇怪的问题,我花了很长时间才弄清楚......希望这个技巧能让你们中的一些人免于同样的挫败感:)

于 2014-10-22T10:40:27.477 回答
0

当我将一个 UILabel 引用和一个 int 命名为相同的东西时,这发生在我身上,我只有在尝试运行它时才输入它时没有收到错误,所以我没有意识到这是问题所在,但是如果你有一个标签之类的东西,它是“分数”,你称之为分数,并命名一个 int,它是分数也是分数,然后就会出现这个问题。

于 2015-07-21T02:03:53.590 回答
0

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

于 2017-05-04T01:01:06.513 回答
0

“Link Binary With Libraries”有旧的项目名称 pod library。拆除后固定。

  1. 项目清单
  2. 项目
  3. 构建阶段
  4. 将二进制文件与库链接
  5. 删除不推荐使用的库。
于 2017-05-08T06:43:39.147 回答
0

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

我最终只是从 Link Binary With Libraries中删除了该库,然后重新添加它,它工作正常。

于 2017-05-28T09:05:10.997 回答
0

解决此问题的唯一(且始终如一)方法是从命令行构建测试:

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

因此,此时,您的编译肯定会失败,但您会看到所有链接问题。就我而言,我遇到了几个问题,例如:

  • ld: framework 'Foo' not found
    要解决此问题,您需要在目标上 BuildSettings->Linking->OtherLinkerFlags 并删除 'Foo' framework 。
  • 使用未解析的标识符 'ClassName'
    为了解决这个问题,我还需要将文件的目标成员资格添加/检查到 UITest 目标。

xcodebuild 将引发其他可能的问题,您可以轻松修复它。

于 2017-06-22T11:33:13.760 回答
0

简单地清洁CMD++ ,然后构建SHIFT+为我工作。KCMDB

于 2017-08-01T19:13:19.100 回答
-1

就我而言,我在 Other Linker Flags 中引用了一个库。删除它摆脱了错误。

在此处输入图像描述

在此处输入图像描述

于 2016-10-15T15:43:23.977 回答
-5

我有同样的错误。我已经导入了一个不再使用的音频框架。我删除了它(不要删除它!)并成功构建。

于 2013-01-23T11:32:36.763 回答