【发布时间】:2011-03-15 00:02:23
【问题描述】:
在一个 iOS 项目的重构过程中,我遇到了这个 bug。在链接阶段,我收到以下消息:
ld:在 /path/to/TinCanViewController-E98A666B7AF2673A.o 和 /path/to/TinCanViewController-E98A666B7AF2673A.o 中重复符号 _OBJC_IVAR_$_TinCanViewController.currentViewController
据我所知,它似乎声称TinCanViewController-E98A666B7AF2673A.o 两次声明了指定的符号;两条路径都指向完全相同的 .o 文件。我在该特定文件上运行nm,它只包含该符号一次:
00008150 S _OBJC_IVAR__TinCanViewController.currentViewController
我在目录中的所有其他 .o 文件上运行 nm 以查看它们是否也以某种方式声明了此符号,但事实并非如此。我添加到 TinCanViewController 类的任何成员都会发生这种情况 - 它不是特定于 currentViewController。
我觉得我必须以某种方式与该类链接两次,但我非常勤奋地检查并检查了对该类的所有引用。在重构版本中,基本没有。 AppDelegate 包含它,但现在它基本上只是一个在开始时加载另一个 ViewController 的传递类。项目中没有其他类包含它。
关于可能导致此问题的原因或如何更好地调试它的任何建议?
【问题讨论】:
-
相同的
.m有两个不同的目标也可能导致此问题。请检查我的答案。
标签: iphone objective-c ipad linker symbols