2010-08-01 47 views
51

我有重复的符号_main。Xcode,重复的符号_main

问题在于“重复的符号_main在/Users/.../i386/main-B9843B6026D6EFA4.o和/Users/.../i386/main-B9843B6026D6EFA4.o”中,XXX和XXX分别是实际上是相同的.o文件。我不知道为什么它认为它是重复的符号,当它是相同的。

任何帮助表示感谢,谢谢。

+0

如果main()函数有多处出现,就会发生这种情况。 – ilgaar 2017-12-23 20:11:22

回答

85

啊..我知道这是我在目标/编译源(在更新的XCode下它是在构建阶段/编译源下)有多个条目。我删除了它们,问题就解决了。多入口的事情可能与Git合并有关。

+1

我还没有想出...任何其他想法的人? – logixologist 2011-10-07 03:15:32

+0

你真的救了我很多努力 – 2012-01-25 11:13:43

+0

我有一个从TBXML(我刚刚添加)复制主 – Jacksonkr 2012-01-26 18:19:21

3

我用Xcode 4.1打开一个用Xcode 4.0.2创建的项目时遇到了同样的问题。我只需点击“现代化项目”(编辑/现代化项目)即可解决问题。此过程自动删除所有重复项。

+0

这实际上对我有效。谢谢! – Imran 2012-10-05 03:43:56

2

如果仍然有问题,试图寻找这样的:“INT主(”,并删除除的main.m这些文件

2

刚刚得到这个问题我自己,但阅读huggie的解决方案之后,并在引导我在正确的轨道,剩下我有点糊涂了 所以,目前的解决方案在Xcode: 选择项目,目标 - >建设阶段,并单击验证设置

然后Xcode中会自动修复自己的错误总是很高兴当。工具试图阻止你的进步;)

+1

那应该是哪里? – Kaptain 2015-04-22 13:43:44

+0

这真棒,以前从未见过。只需进入项目构建阶段,您可以在编辑器菜单中找到“验证设置”。为我工作! – 2015-10-20 07:36:26

15

我也有这个问题这是由我从另一个项目导入的代码引起的。 我做了grep命令 “INT主” 在我的项目目录:

grep -nr "int main" . 

,发现

./main.m:13:int main(int argc, char *argv[]) 
./IMPORTED_DIR/main.m:13:int main(int argc, char *argv[]) 

的IMPORTED_DIR包含这是造成错误,我

额外的main.m我从项目 - >目标 - >构建阶段 - >编译源列表中删除该文件,然后编译

+0

我通过int main进行搜索,我有两个相同的文件,我删除了一个和项目运行。谢谢;) – 2014-12-03 16:53:37

+0

我运行了'grep -nr“int main”。“,并在我的项目中找到了一个样例项目,它是我添加的SDK下载的一部分。找到这个之后,我通过Xcode删除了这些文件,然后瞧!该项目现在建成。谢谢。 – 2015-01-14 17:40:50

23

看来,在我的情况下,我导入了一个.m fi而不是其对应的.h。 解决通过编辑

#import "Tools.m" 

#import "Tools.h" 
+0

非常感谢!在我尝试了所有其他解决方案之后,在我的项目中简单搜索.m“显示导入了一个.m文件。 – 2012-10-23 11:27:15

+1

在改变继承层次结构后,我遇到了同样的问题。谢谢。 – orkoden 2013-06-26 17:21:46

+0

刚刚得到了这个。谢谢! – jsd 2013-11-21 22:55:21

2

在我的情况,我在我的常量文件中声明一个NSString(由许多类进口),但忘了把它定义为静态!

例如NSString* PARAMS = @"paramA"; 应该是:static NSString* PARAMS = @"paramA";

阅读完整的错误消息让我能够弄清楚这一点:“重复的符号PARAMS”。不要害怕,并尝试了解错误信息!有时他们甚至可能会告诉你到底你做错了什么。

0

你也可以得到这个方法名!

我通过CocoaPods添加DBCamera后得到了duplicate symbol _runOnMainQueueWithoutDeadlocking,这是因为我的NSObject类(NSObject + Tools.h)和GPUImage依赖文件GPUImageOutput.m都有一个名为'runOnMainQueueWithoutDeadlocking'的方法。

我很幸运能够从代码中删除我的方法,因为我没有实际使用它或任何地方。

这可能是我应该把类放在NSObject上。

0

就我而言,我导入了另一个项目,以便利用其中包含的库。它导致我的项目有两个main.m文件。

这更令人困惑,因为错误在稍后的几次构建中才显示出来。

6

我在使用两个第三方框架时遇到同样的问题。 (AppLovin和Flurry) 我知道通过在构建设置中从“Other Linker Flags”中删除“all_load”。