首页 文章

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

提问于
浏览
71

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

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用):ld:重复符号_OBJC_CLASS _ $ _ Algebra5FirstViewController in ... / 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 for architecture i386

这是什么一回事呢?

28 回答

  • 3

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

  • 0

    我曾经(意外地)将.h和.m文件导入到同一个类中 .

  • 0

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

  • 4

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

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

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

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

    编辑

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

  • 1

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

  • 1

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

  • 0

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

  • 67

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

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

    如果文件不存在,则使用()添加按钮显示该文件 . 此外,如果存在重复文件(如果有),则删除它 .

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

    enter image description here

  • 51

    从@paiego解释说,从其他项目添加文件时我遇到了类似的错误 . 我的错误是我没有勾选“添加到目标". As explained above, I deleted the references and added the files again but this time checking "添加到目标” .

  • 30

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

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

  • 10

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

  • -5

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

  • 0

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

  • 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更改为枚举,并用枚举值替换引用 .

    这为我修复了错误 .

  • 0

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

  • 1

    我发现这个article为我提供了一个解决方案 . 它适用于Xcode 7,其中No Common Blocks的默认值为Yes比以前的版本中没有 .

    这是文章的引用:

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

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

    将值更改为否立即启用我的应用程序编译并解决我的问题 .

  • 0

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

    我必须在Build Settings中显式禁用Enable Bitcode,它会在更新中自动打开 .

    参考答案:New warnings in iOS 9

  • 0

    [XCODE 7.1 UPDATE]

    First Option That Worked:

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

    希望能帮助别人 .

    UPDATE (day 2) :第二次我在2天后回到这里 .

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

    最终:

    我正在从pod中删除所有内容,然后重新安装它们以最终获得成功 .

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

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

    真的希望这有助于某人 .

  • 24

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

  • 3

    当我将UILabel引用和int命名为同一个东西时,我发生了这种情况,当我只是在我尝试运行它时输入它时没有出现错误所以我没有意识到那是问题,但是如果你有一个类似标签的东西是“得分”,你称之为得分,并命名一个int,即得分也得分然后出现这个问题 .

  • 0

    如果您缺少库或文件,则可能会出现此问题的变体 . 检查Project Explorer中是否有任何遗漏文件:如果Xcode无法找到它们,它们将以红色写入 .

  • 0

    “Link Binary With Libraries”有一个旧的项目名称pod库 . 删除后修复 .

    • 列出项目

    • 项目

    • 构建阶段

    • 链接二进制文件库

    • 删除已弃用的库 .

  • 5

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

    我最后只是链接二进制文件夹中的 removing the library ,然后是 re-adding it ,它运行正常 .

  • 1

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

    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将引发其他可能的问题,您可以轻松修复它 .

  • 1

    只需清洁CMD SHIFT K,然后构建CMD B就可以为我工作 .

  • -1

    在我的例子中,我引用了其他链接器标志中的库 . 删除它摆脱了错误 .

    enter image description here

    enter image description here

  • 0

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

相关问题