iPhone:重复符号错误?

时间:2010-02-15 07:16:16

标签: ios objective-c iphone

当我按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

我不知道从哪里开始?

问题是什么?

17 个答案:

答案 0 :(得分:171)

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

答案 1 :(得分:64)

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

  • 你已经把同一个班级 实施分为两个不同的 文件;

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

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

答案 2 :(得分:39)

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

答案 3 :(得分:25)

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

int const kCropLocationTop = 1;

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

extern int const kCropLocationTop;

并将const分配给.m文件:

int const kCropLocationTop = 1;

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

答案 4 :(得分:18)

iPhone: Duplicate Symbol Error?来自user576924

对我说得对。然而,找到令人讨厌的gremlin这个ZSH片段。

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

会立即告诉您错误的位置。

答案 5 :(得分:18)

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

答案 6 :(得分:8)

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

答案 7 :(得分:4)

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

答案 8 :(得分:3)

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

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

当我意外复制一行时,我在SVN更新中引起了这种合并冲突。

答案 9 :(得分:2)

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

答案 10 :(得分:2)

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

在HeaderFileOne.m

NSString * const kCoolConstant = @"cool";

在HeaderFileTwo.m

NSString * const kCoolConstant = @"cool";

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

答案 11 :(得分:2)

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

答案 12 :(得分:2)

这可能有助于某人

我收到此错误是因为我复制了一个ViewController,然后将其重命名。所以当我编译时,我得到了这个错误。原因是在两个视图控制器中都有一个" float"具有相同名称的变量,即" float padding = 10.0"这是我在课堂上定义的。 在其中一个视图控制器中重命名上述变量的名称解决了我的问题。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

我们的一位开发人员离开了" libSoomla *"项目文件在那里两次。我删除了重复的soomla文件,重新构建,然后修复它!

希望它有所帮助。

答案 15 :(得分:0)

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

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

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

let transition: CATransition = CATransition()
transition.duration = 0.3
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromLeft
self.view.window!.layer.addAnimation(transition, forKey: nil)
self.dismissViewControllerAnimated(false, completion: { _ in })

呼。

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

答案 16 :(得分:0)

Make sure that you didn't import .m File . For me this happen I added #import "SchoolCommuterHome.m" instead of #import "SchoolCommuterHome.h"