重复符号错误

Posted

技术标签:

【中文标题】重复符号错误【英文标题】: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,但我仍然收到此错误消息。

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

【问题讨论】:

我以前遇到过类似的情况。如果您执行清理但无法解决问题,请尝试清除您的派生数据。要清除派生数据,请转到管理器 -> 项目 -> 删除派生数据按钮。 【参考方案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;

【讨论】:

以上是关于重复符号错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥 XCode 会抛出重复的符号错误?

重复符号错误

错误:找不到符号(dataOutputStream out)[重复]

R.id 给出错误“无法解析符号'R'”[重复]

错误:找不到符号方法 setContentView(int) [重复]

[重复]的php @符号是啥