这是我尝试构建测试时得到的错误代码,我如何找到此错误的原因。我在xcode中复制了2个文件并对复制进行了细微的更改,以便制作第二个屏幕。
ld: duplicate symbol _calculate_string in /Users/Lucky3kj/Library/Developer/Xcode /DerivedData/MiniCalculator-ebxkovztnlrphaahncircdyuwjgc/Build/Intermediates/MiniCalculator.build/Debug-iphoneos/PipeFitter.build/Objects-normal/armv7/RollingOffsetLeftViewController.o and /Users/Lucky3kj/Library/Developer/Xcode/DerivedData/MiniCalculator-ebxkovztnlrphaahncircdyuwjgc/Build/Intermediates/MiniCalculator.build/Debug-iphoneos/PipeFitter.build/Objects-normal/armv7/RollingOffsetAnyAngleViewController.o for architecture armv7
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang failed with exit code 1
答案 0 :(得分:2)
基本上,这是源于C的错误。
如果在一个.c文件中我有以下内容:
void myFunction(int myArg)
{
printf("%i", myArg);
}
在另一个文件中我有这个功能:
void myFunction(int myArg)
{
printf("MyArg is: %i", myArg);
}
当编译器链接您的项目时,您调用
myFunction(10);
编译器不知道要调用哪个版本的方法,因此解决方案是以下之一:
1)定义方法一次,并仅包含函数的原型。例如:
// instead of implementing myFunction here, we do this:
void myFunction(int myArg);
// and implement myFunction in another file.
-(void) viewDidLoad {
myFunction(10);
}
2)定义方法两次,但是向它添加静态限定符,告诉链接器这是唯一可以使用此函数的文件。
// FileOne.c
static void myFunction(int myArg)
{
printf("myArg is: %i", myArg);
}
// FileTwo.c
static void myFunction(int myArg)
{
printf("%i", myArg);
}
老实说,为简单起见,我建议只使用静态限定符,但这只是我对这些事项的偏好。
答案 1 :(得分:0)
此错误通常发生在您完成循环引用或制作两个具有相同名称的类文件的位置。