链接器命令失败,退出码为1:重复符号。

11
ld: duplicate symbol _velocityX in \
/Users/Student/Library/Developer/Xcode/DerivedData/finalproject-ffzevekmatxvhrgisgeleoijyllr/Build/Intermediates/finalproject.build/Debug-iphonesimulator/finalproject.build/Objects-normal/i386/Level2ViewController.o \
and \
/Users/Student/Library/Developer/Xcode/DerivedData/finalproject-ffzevekmatxvhrgisgeleoijyllr/Build/Intermediates/finalproject.build/Debug-iphonesimulator/finalproject.build/Objects-normal/i386/Level1ViewController.o \
for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

更新:为了易读性添加了\和换行符

我不知道我的项目出了什么问题,有人能帮忙吗?


2
好的:链接器报错,指出符号“_velocityX”在两个对象中被定义:“.../Objects-normal/i386/Level2ViewController.o”和“.../Objects-normal/i386/Level1ViewController.o”。也许您在链接器调用中重复指定了该对象?或者您包含了一个.C文件?或者您有过时的对象漂浮在周围? - wildplasser
4个回答

23

我也曾遇到过同样的问题,但那是我的错。你可能写成了#import file.m而不是#import file.h。这样编译资源时会重复符号file.o。 - 就这样!^^如果想看到它,请删除该错误文件,构建-->显示错误行-->然后重新复制。


1
哈哈...太傻了 :) 谢谢你指出这个错误,我可能永远都不会注意到它。 - d2burke
1
这也是我的问题。非常感谢。 - Ali

4
我曾经遇到过这个错误,是因为我在两个不同的.m文件中定义了一个相同名称的常量。当我在其中一个文件中更改了名称后,它就编译通过了。
例如,在我的ViewController.m文件中,我有以下代码:
#import "ViewController.h"
const int IPHONE4 = 480;

我的Menu.m文件中:

#import "Menu.h"
const int IPHONE4 = 480;

我将我的Menu.m文件更改为:

#import "Menu.h"
const int IPHONE4H = 480;

2
您可能在一个头文件中声明了 double _velocityX,而该头文件被 Level1ViewController.cLevel2ViewController.c 都包含了。正确的做法应该是在头文件中用 extern double _velocityX 声明变量,在 .c 文件中只需声明一次 double _velocityX。 (假设 _velocityX 的类型是 double,这似乎是合理的,并且假设这是 C 或 C++ 而不是 Fortran 或其他语言)。

2

在尝试将几个框架集成到我的应用程序中时,我遇到了同样的错误。

首先我使用了Sparrow - 一个图形库,以默认设置拥有一个main.m文件,一切都很好,直到我尝试集成Parse,它也依赖于FacebookSDK。在FacebookSDK文件夹中有一个名为Scrumptious的示例应用程序,它也有一个main.m文件,这是我的问题来源。我删除了示例应用程序目录,一切都构建良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接