构建失败,原因:ld:重复符号_OBJC_CLASS _ $ _ Algebra5FirstViewController


72

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

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

ld:... / Algebra5-anwcuftojtxtgkfootneeeqhwztj / Build / Intermediates / Algebra5.build / Debug-iphonesimulator / Algebra5.build / Objects-normal / i386 / ExercisesViewgwneewkwkwneejwneewkwkwfwjwneejkwfjwjwneejwjtneek中的重复符号_OBJC_CLASS _ $ _ Algebra5FirstViewController适用于架构i386的Build / Intermediates / Algebra5.build / Debug-iphonesimulator / PSLE Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o

这是什么一回事呢?

Answers:


67

看起来Algebra5FirstViewController类可以多次编译。

您是否可以确保.m和.mm仅在Xcode的项目源中包含一次?您还可以通过签入编译日志(右侧的最后一个图标,在断点图标旁边)来确认这一点,并确认只将其编译一次。

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

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

编辑

我还注意到第二个引用是在ExercisesViewController的文件中进行的。也许这个文件中有东西。您要么导入Algebra5FirstViewController文件而不是.h,要么是ExercisesViewController使用@implementation(Algebra5FirstViewController)而不是@implementation(ExercisesViewController),或者此文件中有些垃圾将被“清理重建”清理。


2
自动完成导入.m文件而不是.h的原因对我来说是造成问题的原因
Jeff Ames

51

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


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

30

还通过const * NSString在头文件中(不正确地)而不是在实现文件中(正确地)声明了一个问题


最终这是我的问题,但仅限于模拟器-在手机上编译/执行时效果很好。
NathanChristie 2012年

24

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


10

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

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

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

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

在此处输入图片说明


5

从另一个项目添加文件时出现类似的错误,例如@paiego解释。我的错误是我没有选中“添加到目标”。如上所述,我删除了引用并再次添加了文件,但是这次选中“添加到目标”。


4

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

尝试将“ Pods”项目和您应用的目标的“仅将Active Active Architecture”构建为“否”


3

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


3

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


1

“链接器命令失败,退出代码为1(使用-v查看调用)”-在iPhone上运行phonegap应用程序时出现此错误。我将“仅将Active Active Architecture建立”更改为“是”,并且效果很好。


1

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


1

一旦我得到

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

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

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

这为我解决了错误。


1

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


1

我发现这篇文章为我提供了解决方案。它与Xcode 7有关,其中“无通用块”的默认值为“是”,而不是先前版本中的“否”。

这是该文章的引文:

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

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

将值更改为“否”会立即使我的应用程序编译并解决我的问题。


1

我为此发布了新的答案,因为我遇到了此错误,不得不使用我认为特定于iOS 9的其他解决方案。

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

引用的答案:iOS 9中的新警告


1

[XCODE 7.1更新]

可行的第一种选择:

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

希望能对某人有所帮助。

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

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

  1. 从以下位置引用的“ _OBJC_CLASS _ $ _ viewsampleViewController”

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

最后:

  1. 从以下位置引用的“ _OBJC_CLASS _ $ _ viewsampleViewController”

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

就我的大小而言(第2天),问题更多是文件冲突或Xcode无法识别的文件。

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

真希望这对某人有所帮助。



0

通过(不小心)将.h和.m文件导入同一类,我收到了一次。


0

在没有添加必要框架的情况下实现子类时遇到此错误(在此示例中,没有MediaPlayer框架的MPMoviePlayerController)


0

使用Bolts.framework时遇到了同样的问题。事实证明,当Bolts损坏时,没有大量重新导入将解决此问题。我必须返回原始下载文件,然后完全从头开始重新导入它。这马上解决了。这是一个很奇怪的问题,使我花了很长时间才弄清楚...希望这个技巧可以使你们中的一些人摆脱同样的挫败感:)


0

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


0

如果您缺少库或文件,可能会在此问题上发生变化。检查您的Project Explorer中是否没有丢失的文件:如果Xcode找不到它们,它们将以红色书写。


0

“使用库链接二进制文件”具有旧的项目名称pod库。移除后固定。

  1. 项目清单
  2. 项目
  3. 建造阶段
  4. 将二进制文件与库链接
  5. 删除不推荐使用的库。

0

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

我最终只是从Link Binary With Libraries中删除了该库,然后重新添加了它,效果很好。


0

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

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

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

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

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



-1

就我而言,我在其他链接器标记中引用了一个库。删除它摆脱了错误。

在此处输入图片说明

在此处输入图片说明


-5

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.