重复的符号问题

在一个iOS项目的重构过程中,我遇到了这个bug。 在链接阶段,我得到这个消息:

ld:/path/to/TinCanViewController-E98A666B7AF2673A.o中的重复符号_OBJC_IVAR _ $ _ TinCanViewController.currentViewController和/path/to/TinCanViewController-E98A666B7AF2673A.o

据我所知,它看起来像它声称TinCanViewController-E98A666B7AF2673A.o宣布指定的符号两次; 两个path都指向完全相同的.o文件。 我在那个特定的文件上运行nm ,它只包含那个符号一次:

00008150 S _OBJC_IVAR _ $ _ TinCanViewController.currentViewController

我在目录中的所有其他.o文件上运行nm ,看它们是否以某种方式声明了这个符号,但是它们不是。 这发生在我添加到TinCanViewController类的任何成员 – 它不是特定于currentViewController。

我觉得我必须以某种方式与某个class级进行两次连接,但是我非常努力地去了解并检查了这个class级的所有参考资料。 在重构版本中,基本上没有。 AppDelegate包含它,但现在它基本上只是一个直通类,在开始时加载另一个ViewController。 项目中没有其他课程包括它。

有什么build议可能会导致这一点,或者我可能会更好地debugging它?

我有最新的Xcode 4的这个问题。原因:我包含file.m而不是file.h

可能的是,你包含了TinCanViewController.m (应该是TinCanViewController.h

我遇到过这种情况,但是我的问题与我们的回购合并问题有关。 .m文件被列出了两次,它应该只列出一次(在项目中,但不在文件/组结构中,所以你不能在Xcode中看到问题,只有错误)。 该修复程序打开项目文件中的.pbxproj文件,并在该文件中查找重复条目。 删除重复的项目build成就好了。

我碰巧在项目中包含了.h文件和.m文件两次。 一旦我删除了第二个副本,错误消失了。

这个问题在这里解决,当我删除(使用Xcode)所有文件.m和.h从类文件夹,然后我清理项目(Command + Shift + K)和再次build立。 所以我再次将文件从Finder拖到Xcode的类文件夹中。 最后,我再次清理并构build了我的项目…

祝你好运 !!!

确保delegate.m只在Compile-Sources中列出一次。

我认为这是创build通用静态库时Apple最新的链接器的一个错误。 我目前可以find缺陷编号,但是这是因为它错误地生成了armv6和armv7而没有对它们进行消歧。

要validation是否属于这种情况,请将configuration更改为仅生成armv6或amv7,而不会出现此问题。

如果您有多个目标项目,并且两个目标具有相同的文件(如abc.m并且为两个目标都select了abc.m ,也可能发生这种情况。

在我的情况发生了什么是我有两个目标命名为ABCXYZ ,都有自己的DiagramViewController.m文件,应该为他们的目标运行代码。 我不小心把目标ABC DiagramViewController.m也为XYZ选中了目标。

解答:

点击.m文件进入文件检查器,取消select其他目标。

在这里输入图像说明

我有同样的问题。 问题是我有两个库包含相同的.m文件。

喜欢这个

 lib.a - for device. libCauly-universal.a - for simulator and device. 

所以我删除了一个。