链接时复制符号

时间:2010-01-08 17:53:53

标签: objective-c xcode

与背景一样,主题项目“Project”中没有编译时错误或警告。

在两个(或多个类)中使用相同的实例变量名称的次数很多。在下文中,我将使用变量名“index”作为示例。它在class1和class2中显示为实例变量。该变量在两个类中具有不同但相似的含义,因此使用了通用术语。

我在class1和class2的头文件中定义了索引,例如:

@interface class1:NSObject { int index; } ...

重复第2课。

当我构建项目时,Xcode报告:

/Project/build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class1.o和/Project/build/Project.build/Debug-iphonesimulator/Project.build中的重复符号_index /Objects-normal/i386/class2.o

将“index”的出现更改为“indexnotverycommon”,使用新名称报告相同的错误。

将出现次数分别更改为“index1”和“index2”可以消除错误。 Xcode然后报告它在链接期间找到的下一个副本,依此类推,等等。

我可以继续重命名过程,但我不愿意,因为我担心会有更多病态的潜在问题。

感谢任何建议或问题。

4 个答案:

答案 0 :(得分:2)

index也是一个C函数,因此在Objective-C中是一个非常不幸的名字。 这个article描述了为什么使用索引作为名称不是一个好主意。

我不确定为什么你会得到重复的符号。

答案 1 :(得分:0)

我使用Xcode find-in-project功能想出来了。感谢关于索引的建议。

答案 2 :(得分:0)

检查#import "Xxx.m"而不是正确.h工作的提示。

快速搜索工作区"Xxx.m",发现include中导致链接错误的错误。

答案 3 :(得分:0)

不要#include或#import .m文件。只需将这些.m文件添加到Target |中建立阶段。不要将.h文件添加到构建阶段,而是将#import .h文件添加到需要这些功能的任何地方。

编译器知道它只是一个“仅用于信息”的头文件,并且在编译.m文件并将它们全部放入1个可执行文件时,函数体将可用

头文件仅包含前向声明。编译器知道正文在另一个文件中定义,或者在链接到项目的lib中