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

时间:2012-05-03 16:08:54

标签: objective-c ios xcode ios5.1

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

  

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

     

ld:重复符号_OBJC_CLASS _ $ _ Algebra5FirstViewController in   ... / Algebra5-anwcuftojtxtgkfootneeeqhwztj /编译/中间体/ Algebra5.build /调试-iphonesimulator / Algebra5.build /目标正常/ I386 / ExercisesViewController.o   和   ... / Algebra5-anwcuftojtxtgkfootneeeqhwztj /编译/中间体/ Algebra5.build /调试-iphonesimulator /小六会考   Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o   对于架构i386

这是什么?

27 个答案:

答案 0 :(得分:67)

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

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

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

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

修改

我还注意到第二个引用是在ExercisesViewController的文件中进行的。也许这个文件中有一些东西。要么#imported Algebra5FirstViewController文件而不是.h,要么练习ViewController有@implementation(Algebra5FirstViewController)而不是@implementation(ExercisesViewController),或者有一些垃圾用这个文件将用Clean a Rebuild清理。

答案 1 :(得分:51)

如果在目标中多次引用相同的.m文件"编译源"在"构建阶段"中的部分。删除重复的条目,你应该没事。

答案 2 :(得分:30)

也通过在头文件中声明const * NSString(错误地)而不是实现文件(正确)来解决此问题

答案 3 :(得分:24)

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

答案 4 :(得分:10)

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

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

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

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

enter image description here

答案 5 :(得分:5)

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

答案 6 :(得分:4)

我遇到了类似的错误,我得到了解决this way

  

尝试将“仅限构建活动架构”设置为“否”,以便“播放”#39;项目和   你应用的目标

答案 7 :(得分:3)

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

答案 8 :(得分:3)

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

答案 9 :(得分:1)

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

答案 10 :(得分:1)

[XCODE 7.1 UPDATE]

有效的第一个选项:

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

希望有人帮助。

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

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

  1. "_OBJC_CLASS_$_viewsampleViewController", referenced from:

  2. ‘ld: warning: directory not found for option’

  3. 最终:

    1. "_OBJC_CLASS_$_viewsampleViewController", referenced from:
    2. 我正在删除FrameWork Search Paths + Compile Resources + Run Script Phases + pod中的所有内容,然后重新安装它们以最终获得成功。

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

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

      真的希望这有助于某人。

答案 11 :(得分:1)

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

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

参考答案:New warnings in iOS 9

答案 12 :(得分:1)

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

这是文章的引用:

  

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

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

将值更改为No会立即启用我的应用程序以编译并解决我的问题。

答案 13 :(得分:1)

一旦我

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

对我而言,这是因为我在我的开关盒中使用了“const NSInteger”。

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

这为我解决了错误。

答案 14 :(得分:1)

似乎对于m,我将文件拖入项目并且之后无效,单击文件“将文件添加到项目”。两者都是不正确的方法。只需将其拖入包含其他.h和.m文件的项目文件夹(在finder中)。

答案 15 :(得分:1)

'链接器命令失败,退出代码为1(使用-v查看调用)' - 在iPhone上运行phonegap应用程序时出现此错误。我将Build Active Architecture Only改为Yes,它运行良好。

答案 16 :(得分:0)

我曾经(意外地)将.h和.m文件导入同一个类中,这一次收到了这个。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

使用Bolts.framework时遇到了同样的问题。事实证明,当螺栓损坏时,重新导入的数量不会解决问题。我不得不回到原始下载文件并从头开始重新导入它。这马上修好了。这是一个如此奇怪的问题,我花了很长时间才弄明白这一点......希望这篇小贴士可以让你们中的一些人免于同样的挫折:)

答案 19 :(得分:0)

当我将UILabel引用和int命名为同一个东西时发生这种情况,当我在尝试运行它时输入错误时我没有收到错误所以我没有意识到这一点是问题所在,但是如果你有像标签这样的东西就是"得分"并且你称之为得分,并命名一个int,即得分也得分然后出现这个问题。

答案 20 :(得分:0)

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

答案 21 :(得分:0)

如果您缺少库或文件,则可能会发生此问题的变体。检查Project Explorer中是否有任何丢失的文件:如果Xcode找不到它们,它们将被写成红色。

答案 22 :(得分:0)

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

我最终只是从Link Binary With Libraries删除库,然后重新添加,它运行正常。

答案 23 :(得分: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'框架。
  • 使用未解析的标识符'ClassName'
    要解决此问题,我还需要将文件的目标成员资格添加/检查到UITest目标。

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

答案 24 :(得分:0)

只需清理 CMD + SHIFT + K ,然后构建 CMD + B 为我工作。

答案 25 :(得分:-1)

在我的情况下,我引用了其他链接器标志中的库。删除它可以消除错误。

enter image description here

enter image description here

答案 26 :(得分:-5)

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