编译iPad应用程序时出现奇怪的错误(ld:重复符号_OBJC_CLASS_ $)

时间:2012-04-26 09:54:55

标签: objective-c ios

当我编译我的项目时,我有这个错误:

ld: duplicate symbol _OBJC_CLASS_$_DNCloseButton in /Users/.../Library/Developer/Xcode/DerivedData/...Objects-normal/i386/DNCloseButton-7045D069F03DAA13.o for architecture i386
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang++ failed with exit code 1

我知道问题是关于班级DNCloseButton,但我不知道如何解决它?谢谢你的回答。

4 个答案:

答案 0 :(得分:7)

确保您只在头文件(.h)中声明了一次界面,并导入了包含#import而不是#include的头文件。

有时XCode会稍微抬起一点并在链接器阶段将同一文件链接两次。为了这个:

  • 从项目中删除文件(选择'删除引用'选项),然后重新添加。
  • 使用shift-cmd-k
  • 进行清洁
  • 构建

希望这有帮助!

答案 1 :(得分:6)

如果源文件在Compile Sources Build Phase中包含两次,则会发生这种情况。

要在Xcode 4中进行检查:

  • 从文件列表中选择您的项目。
  • 从左栏中选择目标。
  • 单击顶部栏上的Build Phases选项卡。
  • 在搜索字段中,键入导致链接器错误的类的名称。在上述问题的情况下,它是DNCloseButton(忽略前面的_)。

如果该类的源文件在Compile Sources列表中出现两次,请删除其中一个条目。

答案 2 :(得分:5)

如果偶然#import .m文件而不是.h文件,您可能也会收到此错误。

答案 3 :(得分:1)

在下列情况下可能会发生这种情况。

您已将相同的类实现放入两个不同的文件中;

你实际上只有这个类的一个实现,但是你也在你的项目中链接一个框架或库,其中包含一个名称与你的名字完全相同的类。

尝试在整个项目中查找您的课程,并确保项目中只有一个副本可用。