Duplicate symbol issues
During a refactor of an iOS project, I ran into this bear of a bug. During the linking phase, I get this message:
ld: duplicate symbol _OBJC_IVAR_$_TinCanViewController.currentViewController in /path/to/TinCanViewController-E98A666B7AF2673A.o and /path/to/TinCanViewController-E98A666B7AF2673A.o
As far as I can tell, it looks like it claims TinCanViewController-E98A666B7AF2673A.o
is declaring the specified symbol twice; both paths are pointing to the exact same .o file. I ran nm
on that specific file, and it only included that symbol once:
00008150 S _OBJC_IVAR_$_TinCanViewController.currentViewController
I ran nm
on all the other .o files in the directory to see if they were somehow declaring this symbol, too, but they're not. This happens to any member I ad开发者_运维技巧d to the TinCanViewController class - it's not specific to currentViewController.
I feel like I must be somehow linking against the class twice somehow, but I've pretty assiduously gone through and checked all references to this class. In the refactored version, there are basically none. The AppDelegate includes it, but right now it's basically just a passthrough class that loads another ViewController at the start. No other classes in the project include it.
Any suggestions on what might be causing this or how I might debug it better?
I had this issue on the latest Xcode 4. Cause: I included file.m
instead of file.h
Possibly, you included TinCanViewController.m
(should be TinCanViewController.h
)
I had this happen but my problem was related to merge issues from our repo. The .m file was listed twice in a spot that it should only have been listed once (within the project, but not within the file/group structure, so you could not see the issue in Xcode, only the error). The fix is opening the .pbxproj file inside your project file and locating the duplicate entry in that file. After deleting the duplicate the project built just fine.
I happened to have included the .h file and the .m file twice in the project. Once I removed the second copy, the error went away.
Make sure delegate.m is only listed once within the Compile-Sources.
This problem solve here when I deleted (using Xcode) all files .m and .h from Class folder then I cleaned Project (Command + Shift + K) and Builded again. So I drag the files from Finder to Class Folder in Xcode again. Finally, I cleaned and build my Project again...
Good Luck !!!
I think this is a bug with Apple's latest linker when creating universal static libraries. I can;t find the bug number currently, but this happens because it incorrectly generates armv6 and armv7 without disambiguating them.
To verify if this is the case, change the configuration to build only armv6 or amv7, and you won't have this problem.
This could also happen if you have a multi-target project and two targets have same file like abc.m
and that abc.m
is selected for both targets.
What happened in my case was I had two targets named ABC
and XYZ
and both had their own DiagramViewController.m
file which are supposed to run code for their targets. I accidentally had DiagramViewController.m
of target ABC
had target selected for XYZ
also.
Solution :
Click on .m
file go to file inspector and unselect additional target.
I had a same issue. the problem was that i had two libraries that contain same .m file.
like this
lib.a - for device.
libCauly-universal.a - for simulator and device.
so i deleted one.
精彩评论