我在编译代码时遇到错误。问题标识符将其标记为“Apple Mach-O Link Linker 命令失败”。我不知道这是什么,所以我一直无法找到解决方案。
duplicate symbol _OBJC_METACLASS_$_XYZFlipsideViewController in:
/Users/studentuse/Library/Developer/Xcode/DerivedData/RSC-
aardgrngtzicssfffcbdqsezpqmv/Build/Intermediates/RSC.build/Debug-
iphonesimulator/RSC.build/Objects-normal/i386/XYZAppDelegate.o
/Users/studentuse/Library/Developer/Xcode/DerivedData/RSC-
aardgrngtzicssfffcbdqsezpqmv/Build/Intermediates/RSC.build/Debug-
iphonesimulator/RSC.build/Objects-normal/i386/XYZFlipsideViewController.o
ld: 6 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation) //This
line has the mistake
代码有什么问题?
(这只是部分代码。)
最佳答案
问题是您已经定义了类XYZFlipsideViewController
的实现两次,链接器无法弄清楚您指的是哪个定义:
duplicate symbol _OBJC_METACLASS_$_XYZFlipsideViewController
它定义的两个地方就是这两个目标文件:
XYZAppDelegate.o
XYZFlipsideViewController.o
有两种可能的解释:
- 您在两个源文件
XYZAppDelegate.m
和XYZFlipsideViewController.m
中都有一个@implementation XYZFlipsideViewController ... @end
block , 或 - 您在头文件中有
@implementation ... @end
block ,该 block 由#include
/#import
编辑那些源文件
在第一种情况下,解决方案是删除其中一个 @implementation
block 。在第二种情况下,解决方案是将 @implementation
block 从头文件移到源文件中,但保留 @interface
block 头文件。
理解 @interface
和 @implementation
之间的区别很重要——前者说“这是一个类的名称,它的实例变量的名称,及其成员函数的名称”,而后者表示“这是该类的所有属性和成员函数的定义”。
关于ios - Apple Mach-O 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16406604/