重复符号错误

7
我不确定我做了什么,但我添加了一个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的更改,但仍然收到此错误消息。

我检查了其他类似的帖子,但我认为条件不同(虽然我可能错了)。有什么想法吗?


我之前遇到过类似的问题。如果执行清理操作无法解决问题,请尝试清除派生数据。要清除派生数据,请转到“组织者”->“项目”->删除派生数据按钮。 - Freddy
11个回答

51

我遇到了类似的问题:

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语句时,很难找到问题所在。


1
完美...犯了这样一个简单的错误。谢谢你的提示。 - zingle-dingle
真丢脸...打错了同样的拼写 - Nik
每次做这个都感觉像个新手...谢谢你的答案 =) - rckehoe

20

当一个源在目标中编译两次,或者在两个不同的目标中构建时,就会发生这种情况。您可以在目标的构建阶段进行验证,或者从目标中删除它,然后重新添加它。

更新

Kasas指出了Xcode的一项新功能(在其他评论员拒绝的编辑中),Xcode可以为您检测到一些这样的情况--只需“验证”目标或项目设置。如果发现多余的编译,Xcode将提供删除它的选项。谢谢Kasas。


11

除了.m问题之外,如果您在错误的文件夹中创建了模型、将其删除,然后在正确的文件夹中创建/替换了模型,则可能需要在编译源分组下的目标构建阶段中删除重复项。


这正是发生在我身上的事情。谢谢 Rob。 - Travis M.

3

我遇到了这个问题,但已经解决了。

因为在导入 viewcontroller 时,我犯了一个错误。

错误是:#import "viewcontroller.m"

后来我进行了编辑:`#import "viewcontroller.h"

只是更改了 viewcontroller 的扩展名。


2
在我的第一个应用程序中,我在替换类之后遇到了这个问题。因为我不想完全删除旧类,所以我将其移动到另一个组中,仍然在xcode中。xcode尝试编译这个类的两个副本,导致错误。从项目中删除对旧类的引用可以解决我的问题。
点赞给了quarac,他让我更容易发现这个问题。

1
如果有多个类共用相同的名称,就会出现这种错误。

1

不确定,但是一个愚蠢的问题 - 清除旧代码后你是否进行了清理?有时那些东西会留下来。


不确定您所说的“clean”是什么意思。 - Robert Hill
1
菜单:产品-清理。它会删除所有临时构建目录。当您从代码库中删除某些内容时,这非常有用,因为有时编译对象仍然在临时构建目录中,并且即使源不再拥有它们也会“意外”包含它们。这可能是导致意外错误的根源。虽然这不会造成任何损害,但最好确保一下。 - drekka

0

我曾经遇到过同样的问题,但我解决了它。 当我复制并粘贴我的视图和视图控制器,并使用不同的名称时,我遇到了这个错误(_temp中的重复符号)。我通过更改常量名称来解决了这个错误。你也可以将你的常量移动到实现括号之间。下面是我的示例代码,我的常量名称为temp。

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

0
这可能会发生在两个不同类中有相同名称的常量定义。在我的情况下,它是一个布尔标志,如下所示:
类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; ...

0

我并不真正理解为什么会出现这个问题,也许有人可以澄清一下,但对我来说,问题在于我已经导入了另一个类,该类声明了与当前类中相同名称的实例变量

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

希望这可以帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接