重复符号错误
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;
【讨论】:
以上是关于重复符号错误的主要内容,如果未能解决你的问题,请参考以下文章
错误:找不到符号(dataOutputStream out)[重复]