【问题标题】:build failed with: ld: duplicate symbol _OBJC_CLASS_$_Algebra5FirstViewController构建失败:ld:重复符号 _OBJC_CLASS_$_Algebra5FirstViewController
【发布时间】:2012-05-13 04:39:54
【问题描述】:

我通过 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

这是怎么回事?

【问题讨论】:

    标签: objective-c ios xcode ios5.1


    【解决方案1】:

    看起来 Algebra5FirstViewController 类被编译了多次。

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

    另外,如果这个类是你链接的库的一部分,并且你有一个同名的类,你可能会遇到同样的错误。

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

    编辑

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

    【讨论】:

    • 自动完成导入 .m 文件而不是 .h 是导致我出现问题的原因
    【解决方案2】:

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

    【讨论】:

    • ... 或者如果代码中使用的.m 文件未在“编译源”中引用 - 就像我的情况一样。
    【解决方案3】:

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

    【讨论】:

    • 这最终是我的问题,但仅限于模拟器 - 在我的手机上编译/执行时效果很好。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          尝试将“Pods”项目的 Build Active Architecture Only 设置为 NO 并且 您应用的目标

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

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

                  【讨论】:

                    【解决方案12】:

                    一旦我得到了

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

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

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

                    这为我解决了错误。

                    【讨论】:

                      【解决方案13】:

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

                      【讨论】:

                        【解决方案14】:

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

                        这是文章的引述:

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

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

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

                        【讨论】:

                          【解决方案15】:

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

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

                          参考答案:New warnings in iOS 9

                          【讨论】:

                            【解决方案16】:

                            [XCODE 7.1 更新]

                            第一个有效的选项:

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

                            希望对某人有所帮助。

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

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

                            1. "_OBJC_CLASS_$_viewsampleViewController", referenced from:

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

                            最终:

                            1. "_OBJC_CLASS_$_viewsampleViewController", referenced from:

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

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

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

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

                            【讨论】:

                              【解决方案17】:

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

                              【讨论】:

                                【解决方案18】:

                                我曾经(不小心)将 .h 和 .m 文件都导入到同一个类中而收到了这个。

                                【讨论】:

                                  【解决方案19】:

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

                                  【讨论】:

                                    【解决方案20】:

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

                                    【讨论】:

                                      【解决方案21】:

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

                                      【讨论】:

                                        【解决方案22】:

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

                                        【讨论】:

                                          【解决方案23】:

                                          “将二进制文件与库链接”具有旧项目名称 pod 库。移除后修复。

                                          1. 列表项
                                          2. 项目
                                          3. 构建阶段
                                          4. 将二进制文件与库链接
                                          5. 删除已弃用的库。

                                          【讨论】:

                                            【解决方案24】:

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

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

                                            【讨论】:

                                              【解决方案25】:

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

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

                                              【讨论】:

                                                【解决方案26】:

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

                                                【讨论】:

                                                  【解决方案27】:

                                                  在我的例子中,我在 Other Linker Flags 中引用了一个库。删除它消除了错误。

                                                  【讨论】:

                                                    【解决方案28】:

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

                                                    【讨论】:

                                                      猜你喜欢
                                                      • 2016-07-13
                                                      • 2022-07-06
                                                      • 1970-01-01
                                                      • 2018-03-19
                                                      • 2021-02-18
                                                      • 2012-11-12
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      相关资源
                                                      最近更新 更多