【问题标题】:Duplicate Symbol Error重复符号错误
【发布时间】:2012-02-07 01:43:27
【问题描述】:

我不确定我做了什么,但我添加了一个 IBOutlet 以在 TableView 单元格中显示一个附加属性。在构建应用程序时,我收到以下错误消息...

Ld /Users/roberthill/Library/Developer/Xcode/DerivedData/PHAInspect-awfhtfopjdgfmsdsjfjivdnlzgir/Build/Products/Debug-iphonesimulator/PHAInspect.app/PHAInspect normal i386
    cd /Users/roberthill/Documents/PHAInspect
    setenv MACOSX_DEPLOYMENT_TARGET 10.6
    setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/roberthill/Library/Developer/Xcode/DerivedData/PHAInspect-awfhtfopjdgfmsdsjfjivdnlzgir/Build/Products/Debug-iphonesimulator -F/Users/roberthill/Library/Developer/Xcode/DerivedData/PHAInspect-awfhtfopjdgfmsdsjfjivdnlzgir/Build/Products/Debug-iphonesimulator -filelist /Users/roberthill/Library/Developer/Xcode/DerivedData/PHAInspect-awfhtfopjdgfmsdsjfjivdnlzgir/Build/Intermediates/PHAInspect.build/Debug-iphonesimulator/PHAInspect.build/Objects-normal/i386/PHAInspect.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED=50000 -framework CoreData -framework UIKit -framework Foundation -framework CoreGraphics -o /Users/roberthill/Library/Developer/Xcode/DerivedData/PHAInspect-awfhtfopjdgfmsdsjfjivdnlzgir/Build/Products/Debug-iphonesimulator/PHAInspect.app/PHAInspect

ld: duplicate symbol _OBJC_METACLASS_$_Inspection in /Users/roberthill/Library/Developer/Xcode/DerivedData/PHAInspect-awfhtfopjdgfmsdsjfjivdnlzgir/Build/Intermediates/PHAInspect.build/Debug-iphonesimulator/PHAInspect.build/Objects-normal/i386/Inspection-AEDA73D75B42426A.o and /Users/roberthill/Library/Developer/Xcode/DerivedData/PHAInspect-awfhtfopjdgfmsdsjfjivdnlzgir/Build/Intermediates/PHAInspect.build/Debug-iphonesimulator/PHAInspect.build/Objects-normal/i386/Inspection-AEDA73D75B42426A.o for architecture i386
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1

我尝试取消更改以添加 IBOutlet,但我仍然收到此错误消息。

我查看了其他类似的帖子,但我认为条件不一样(不过我可能是错的)。有什么想法吗?

【问题讨论】:

  • 我以前遇到过类似的情况。如果您执行清理但无法解决问题,请尝试清除您的派生数据。要清除派生数据,请转到管理器 -> 项目 -> 删除派生数据按钮。

标签: objective-c xcode


【解决方案1】:

我也有类似的问题:

ld: duplicate symbol _OBJC_METACLASS_$_MyClass1 in /Users/.../MyClass2.o and /Users/.../MyClass1.o for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

最后的原因是我在 MyClass2.m 中写道:

#include "MyClass1.m"

而不是

#include "MyClass1.h"

当您的 .m 文件中有很多 #include 语句时,很难找到。

【讨论】:

  • 完美...犯了这么简单的错误。感谢您的提示。
  • 真丢脸...有同样的错字
  • 当我这样做时感觉自己像个新手......谢谢你的回答=)
【解决方案2】:

当一个源在您的目标中编译两次,或者如果它在两个单独的目标中构建时,就会发生这种情况。您可以在目标的构建阶段验证这一点,或者将其从目标中移除,然后重新添加。

更新

Kasas 指出了一个新的 Xcode 功能(在其他审阅者拒绝的编辑中),Xcode 可以为您检测一些此类情况——只需“验证”目标或项目设置。如果找到,Xcode 将为您删除多余的编译。谢谢卡萨斯。

【讨论】:

    【解决方案3】:

    除了 .m 问题,如果您在错误的文件夹中创建模型,请删除它们,然后在正确的文件夹中创建/替换模型。您可能需要删除 Compiled Sources 分组下的 Targets Build Phases 中的重复项。

    【讨论】:

    • 这正是发生在我身上的事情。谢谢罗伯。
    【解决方案4】:

    我遇到了这个问题。我解决它。

    因为我在导入视图控制器时犯了错误。

    错误:#import "viewcontroller.m"

    稍后我编辑:`#import "viewcontroller.h"

    只有我改变了 viewcontroller 的扩展。

    【讨论】:

      【解决方案5】:

      在我的第一个应用程序中,我在更换课程后遇到了这个问题。因为我不想完全删除旧类,所以我把它移到了另一个组,仍然在 xcode 中。 xcode 尝试编译该类的两个副本,从而导致错误。从项目中删除对旧类的引用解决了我的问题。

      向 quarac 投了赞成票,他让我更容易发现这一点。

      【讨论】:

        【解决方案6】:

        不确定,但这是一个愚蠢的问题 - 您在清除旧代码后是否进行了清理?有时这些东西会到处乱晃。

        【讨论】:

        • 不确定您所说的“干净”是什么意思。
        • 菜单:产品 - 清洁。它删除所有临时构建目录。当您从代码库中删除内容时,这很有用,因为有时编译的对象仍在临时构建目录中,并且即使您的源代码不再包含它们,也会“意外”包含它们。这可能是此类意外错误的来源。它不会伤害任何东西,所以你最好确定一下。
        【解决方案7】:

        如果多个类共享一个同名,就会出现这种错误

        【讨论】:

          【解决方案8】:

          这可能是因为你包含了Inspection类的两个源文件

          【讨论】:

            【解决方案9】:

            我真的不明白为什么这会是一个问题,所以也许有人可以澄清,但对我来说,问题是我导入另一个类,它声明了一个具有相同名称的 实例变量 作为当前班级中的一员。

            当我在导入类的实现中更改 ivar 的名称时,错误消失了。

            希望这会有所帮助!

            【讨论】:

              【解决方案10】:

              如果您在两个不同的类中有同名的常量定义,也可能发生这种情况。在我的例子中,它是一个像这样的布尔标志:

              A类:

              #import "MyATableViewController.h"
              
              @implementation MyATableViewController
              
              @synthesize someVariable;
              
              BOOL MY_FLAG = YES;
              ...
              

              B类:

              #import "MyBTableViewController.h"
              
              @implementation MyBTableViewController
              
              @synthesize someVariable;
              
              BOOL MY_FLAG = YES;
              ...
              

              我只需要将第二个类的常量定义更改为:

              ... BOOL MY_B_FLAG = YES; ...
              

              【讨论】:

                【解决方案11】:

                我遇到了同样的问题,我解决了。 当我复制并粘贴具有不同名称的视图和视图控制器时,出现此错误(在 _temp 中重复符号)。我通过更改常量名称解决了这个错误。您还可以在实现括号之间移动常量。我的示例代码如下。我的常量名称是 temp。

                    @implementation MyCombineSaveTableView
                {
                    BOOL *pulltoRefResh;
                    NSString *currentElement;
                    int temp;
                    int User_ID;
                }
                

                【讨论】:

                  猜你喜欢
                  • 2012-07-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多