iPhone:重复符号错误?

问题描述 投票:56回答:17

按build + debug时出现此错误:

ld: duplicate symbol .objc_class_name_BlogTableItemCell in /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o and /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

我不知道从哪里开始?

有什么问题 ?

ios objective-c iphone
17个回答
64
投票

您似乎在代码的不同位置编译了两次相同的BlogTableItemCell类。在下列情况下可能会发生这种情况。

  • 您已将相同的类实现放入两个不同的文件中;
  • 实际上,您只有这个类的一个实现,但是您还在项目中链接一个框架或库,其中包含一个名称与您的名称完全相同的类。

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


2
投票

它也发生在我身上。在我的例子中,我的核心数据中的一个(仅一个)自动生成的类被插入了两次。我通过查看Build Phases ... Compile Sources来发现重复。只需删除其中一个事件即可解决问题。


2
投票

向列表添加另一个可能的原因...您可能在实现文件中错误地创建了多个常量,但在实现之外,使用相同的名称。

在HeaderFileOne.m中

NSString * const kCoolConstant = @"cool";

在HeaderFileTwo.m中

NSString * const kCoolConstant = @"cool";

因此,更改其中一个常量名称将修复编译错误。


2
投票

我也遇到过这个问题。我的解决方案是重命名一个全局变量,它与其他类中的变量名称相同。希望这可以帮助


2
投票

这可能对某人有帮助

我收到此错误是因为我复制了ViewController,然后重命名了它。所以当我编译时,我得到了这个错误。原因是在两个视图控制器中都有一个同名的“浮点”变量,即我在类级别定义的“浮点填充= 10.0”。在其中一个视图控制器中重命名上述变量的名称解决了我的问题。


0
投票

当我使用可本地化的xib文件时,同样的事情发生在我身上,不小心我创建了两个实现文件,并且在我的情况下引起了问题。在删除/重新创建实现文件而没有做同样的错误之后,修复了错误。


0
投票

我们的一位开发人员将“libSoomla *”项目文件留在那里两次。我删除了重复的soomla文件,重新构建,并修复它!

希望能帮助到你。


0
投票

在可能的情况下,我按照一些指示构建了一个较新版本的Subversion,它指示我创建这个符号链接:

ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain

现在我真的是一个Windows家伙,所以对我来说并不是很明显 - 但删除链接为我修复了它(重启XCode后):

rm /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain

唷。

(我得到的实际错误是这里描述的错误:build error duplicate symbols arclite.o


0
投票

确保您没有导入.m文件。对我来说,这发生了我添加#import“SchoolCommuterHome.m”而不是#import“SchoolCommuterHome.h”


171
投票

如果您错误地让XCode为#import语句自动完成指定'duplicate'类而不是'.h'的'.m'文件,也可能会出现此错误。


39
投票

对我来说,将“无公共块”从“是”更改为“否”(在“目标 - >构建设置 - > Apple LLVM - 代码生成”下)


25
投票

由于对锥体的定义不佳,我遇到了类似的问题。我在标题中定义了一个const:

int const kCropLocationTop = 1;

这可能是多次进口的。要修复我更改标题def如下:

extern int const kCropLocationTop;

并将const的赋值移动到.m文件:

int const kCropLocationTop = 1;

希望能帮助那些像我一样无知简单客观概念的人!


18
投票

iPhone: Duplicate Symbol Error?来自user576924

我正确地回答了然而要找到令人讨厌的gremlin这个ZSH片段。

grep "import.*\.m" **/*.[hm]

会立即告诉你你的错误在哪里。


18
投票

错误地,源文件在项目 - >构建阶段 - >编译源中包含两次。删除其中一个解决了这个问题。


8
投票

导致此错误的最常见原因是导入xyz.m文件而不是xyz.h文件。检查您的导入是否包含#import "----.m"之类的内容


4
投票

只是添加;使用Xcode生成子类管理对象(Core Data)有时可以复制生成的文件。对我来说,修复是删除生成的文件并重新生成它们。


3
投票

我自己也遇到了这个问题。对于列表,这是另一种可能性:

项目文件中的重复链接行。

当我不小心重复一行时,我在SVN更新上引起了这种合并冲突。

© www.soinside.com 2019 - 2024. All rights reserved.