【问题标题】:Duplicate Symbol Error in Objective-C build?Objective-C构建中的重复符号错误?
【发布时间】:2010-02-15 07:16:16
【问题描述】:

当我按下 build+debug 时出现此错误:

ld: duplicate symbol .objc_class_name_BlogTableItemCell in /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o and /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

【问题讨论】:

  • 不要在 .h 文件中创建 @implementation 部分。

标签: ios objective-c duplicate-symbol


【解决方案1】:

如果您错误地让 Xcode 的 #import 语句自动完成功能为 'duplicate' 类指定了 '.m" 文件而不是 '.h',也可能会出现此错误。

【讨论】:

  • 有史以来最好的收获之一!
  • 我希望有办法将这个答案更改为接受的答案。
  • 优秀。这只是发生在我身上,我的心脏停止了跳动。
【解决方案2】:

您似乎在代码的不同位置编译了两次相同的 BlogTableItemCell 类。这可能发生在以下情况。

  • 你放了同一个类 实现成两个不同的 文件;

  • 实际上你只有一个 然而这个类的实现 您还在项目中链接了一个框架 或包含一个类的库 名字和你一模一样。

尝试在整个项目中找到您的班级,并确保您的项目中只有一份可用。

【讨论】:

  • 1.你把同一个类的实现放到了两个不同的文件中; -> 我用“在项目中查找”进行了检查。只有一个文件! 2.“在你的项目中链接一个框架或库,其中包含一个与你的名字完全相同的类。” -> 我还使用“在项目中查找”进行了检查。正确的位置只有一个链接。有什么建议从这里出发吗?
  • 好的,我知道了。 Xcode 在类资源管理器中有对该文件的旧引用。谢谢
  • 当我将 Facebook SDK(包括 SBJson 文件)集成到我正在使用的已经具有相同 SBJson 类的项目中时,我遇到了同样的问题。有两个副本导致错误。最后,我删除了其中一组文件,然后问题就解决了。
  • 刚刚遇到这个错误......我在我的一个实现中导入了“.m”而不是“.h”文件!
  • 我在目标和测试中都遇到了这个问题。
【解决方案3】:

对我来说,将“No Common Blocks”从 Yes 更改为 No(在 Targets->Build Settings->Apple LLVM - Code Generation 下)

【讨论】:

  • 布拉德:你救了我一天!!
  • 哇,这正是发生在我身上的事情。谢谢
  • 你是个摇滚明星。
  • 这必须是一个解决方案,但在我的情况下,我使用的是第 3 方应用程序,它在内部使用我在项目中使用的相同框架文件。您可以参考任何解决方案吗?
【解决方案4】:

由于 const 定义不佳,我遇到了类似的问题。 我在标题中定义了一个常量:

int const kCropLocationTop = 1;

这可能是多次导入的。为了解决这个问题,我将标题定义更改如下:

extern int const kCropLocationTop;

并将 const 的分配移至 .m 文件:

int const kCropLocationTop = 1;

希望对像我一样不了解简单客观 c 概念的人有所帮助!

【讨论】:

    【解决方案5】:

    iPhone: Duplicate Symbol Error? by user576924

    为我正确回答。但是要找到这个 ZSH sn-p 的有问题的 gremlin。

    grep "import.*\.m" **/*.[hm]
    

    会立即告诉你你的错误在哪里。

    【讨论】:

    • 谢谢。我觉得可以总结为:不要尝试#import.m文件!
    • 可以在 Xcode 中执行类似的搜索。在整个项目 (Command-Shift-F) 中搜索 .m".m>。两者都应该足以找到违规行。
    【解决方案6】:

    错误地将源文件包含在项目 -> 构建阶段 -> 编译源中两次。删除其中一个解决了这个问题。

    【讨论】:

    • 谢谢,正是我需要的。这里很多人说问题是添加了两次,但没有解释如何删除它。
    • 对我来说同样的问题。这发生在 svn 合并和解决 project.pbxproj 中的冲突之后
    • 这个。为什么这个答案只有 9 票?似乎这是我遇到链接器错误时遇到的唯一原因。我想对此投票 10 次。
    • 来自 git 的错误自动合并导致我的项目文件出现重复。另一个开发人员重命名了一堆文件。为了修复它,我必须删除两个副本并重新添加一个副本。
    • 谢谢!!你拯救了我的一天(y)
    【解决方案7】:

    此错误的最常见原因是导入 xyz.m 文件而不是 xyz.h 文件。 检查您的导入是否包含类似 #import "----.m"

    【讨论】:

      【解决方案8】:

      只是补充;使用 Xcode 生成子类托管对象(Core Data)有时会复制生成的文件。对我来说,解决方法是删除生成的文件并重新生成它们。

      【讨论】:

        【解决方案9】:

        我自己也遇到了这个问题。对于列表,还有另一种可能性:

        项目文件中的重复链接行。

        当我不小心复制了一行时,我在 SVN 更新中引起了这种合并冲突。

        【讨论】:

          【解决方案10】:

          这也发生在我身上。就我而言,我的核心数据中的一个(仅一个)自动生成的类被插入了两次。我通过查看 Build Phases...Compile Sources 发现了重复。只需删除其中一个事件即可解决问题。

          【讨论】:

            【解决方案11】:

            在列表中添加另一个可能的原因...您可能错误地在实现文件中创建了多个常量,但在实现之外,具有相同的名称。

            在 HeaderFileOne.m 中

            NSString * const kCoolConstant = @"cool";
            

            在 HeaderFileTwo.m 中

            NSString * const kCoolConstant = @"cool";
            

            因此,更改其中一个常量名称将修复编译错误。

            【讨论】:

              【解决方案12】:

              这可能对某人有帮助

              我收到这个错误是因为我复制了一个 ViewController 然后重命名了它。所以当我编译时,我得到了这个错误。原因是在两个视图控制器中都有一个同名的“float”变量,即我在类级别定义的“float padding=10.0”。 在其中一个视图控制器中重命名上述变量的名称解决了我的问题。

              【讨论】:

              • 我也有同样的情况——我的问题是:为什么会出现这样的问题?当然,两个类可以有相同的内部变量名...
              【解决方案13】:

              我也遇到过这个问题。我的解决方案是重命名全局变量之一,它与其他类中的一个名称相同。希望这会有所帮助

              【讨论】:

                【解决方案14】:

                当我在玩可本地化的 xib 文件时,同样的事情发生在我身上,我不小心创建了两个实现文件,这显然导致了我的问题。删除/重新创建实现文件后没有犯同样的错误,错误已修复。

                【讨论】:

                  【解决方案15】:

                  我们的一位开发人员将“libSoomla*”项目文件放在那里两次。我删除了重复的 soomla 文件,重新构建并修复了它!

                  希望对你有帮助。

                  【讨论】:

                    【解决方案16】:

                    在可能的情况下,我按照一些说明构建了一个更新版本的 Subversion,它指示我创建这个符号链接:

                    ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain
                    

                    现在我真的是一个 Windows 人,所以这对我来说并不是很明显 - 但删除链接为我修复了它(在重新启动 XCode 之后):

                    rm /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain
                    

                    呼。

                    (我得到的实际错误是这里描述的错误: build error duplicate symbols arclite.o)

                    【讨论】:

                      【解决方案17】:

                      确保您没有导入 .m 文件。对我来说,发生这种情况我添加了#import "SchoolCommuterHome.m" 而不是#import "SchoolCommuterHome.h"

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2014-09-03
                        • 1970-01-01
                        • 2016-04-04
                        • 2020-07-31
                        • 1970-01-01
                        • 2013-06-13
                        • 2011-03-23
                        • 1970-01-01
                        相关资源
                        最近更新 更多