重复的符号问题
在一个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
,也可能发生这种情况。
在我的情况发生了什么是我有两个目标命名为ABC
和XYZ
,都有自己的DiagramViewController.m
文件,应该为他们的目标运行代码。 我不小心把目标ABC
DiagramViewController.m
也为XYZ
选中了目标。
解答:
点击.m
文件进入文件检查器,取消select其他目标。
我有同样的问题。 问题是我有两个库包含相同的.m文件。
喜欢这个
lib.a - for device. libCauly-universal.a - for simulator and device.
所以我删除了一个。