我有重复的符号_main。
问题是它说“在/Users/.../i386/main-B9843B6026D6EFA4.o和/Users /.../i386/main-B9843B6026D6EFA4.o中复制符号_main”,XXX和XXX实际上是相同的.o文件。我不知道为什么它认为它是重复的符号,当它是相同的.o?!
感谢任何帮助,谢谢。
答案 0 :(得分:89)
啊..我发现我在Targets / Compiled Sources下有多个条目(在较新的XCode中,它位于Build Phases / Compile Sources下)。我删除了它们,问题解决了。多项输入可能与Git merge有关。
答案 1 :(得分:23)
在我的情况下,我似乎导入了.m文件而不是.h文件。 通过编辑解决
#import "Tools.m"
到
#import "Tools.h"
答案 2 :(得分:16)
我也有这个问题,它是由我从另一个项目导入的代码引起的。 我在项目目录中为“int main”做了一个grep:
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
我从项目中移除了该文件 - >目标 - >构建阶段 - >编译源列表然后编译
答案 3 :(得分:7)
我在使用两个第三方框架时遇到了同样的问题。 (AppLovin和Flurry) 我通过删除" all_load"来了解这一点。来自"其他Linker Flags"在构建设置中。
答案 4 :(得分:3)
我在使用Xcode 4.1时使用Xcode 4.0.2创建项目时遇到了同样的问题。我只需点击“Modernize Project”(编辑/现代化项目)即可解决。此过程自动删除所有重复项。
答案 5 :(得分:2)
如果仍然有问题,请尝试搜索如下:“int main(”,并删除除main.m以外的那些文件
答案 6 :(得分:2)
我自己也遇到了这个问题,但在阅读了huggie的解决方案之后,我确实让我走上了正确的轨道,我感到有些困惑。 那么Xcode中的当前解决方案: 选择项目,目标 - >构建阶段并单击验证设置
然后Xcode将自动修复自己的错误。当工具试图阻止你的进展时总是很好;)
答案 7 :(得分:2)
在我的情况下,我在常量文件中声明了一个NSString(由许多类导入)但是忘了将它定义为静态!!
e.g。 NSString* PARAMS = @"paramA";
应该是:static NSString* PARAMS = @"paramA";
阅读完整的错误消息让我想出了这个:“复制符号PARAMS”。不要害怕,并尝试理解错误信息!有时他们甚至会告诉你你做错了什么。
答案 8 :(得分:0)
您也可以获取方法名称!
在通过CocoaPods添加DBCamera之后得到了duplicate symbol _runOnMainQueueWithoutDeadlocking
,这是因为我在NSObject(NSObject + Tools.h)上的类别和GPUImage依赖文件GPUImageOutput.m都有一个名为'runOnMainQueueWithoutDeadlocking'的方法。
我很幸运能够从代码中删除我的方法,因为我实际上不再使用它了。
这可能是我在NSObject上添加一个类别所应得的。
答案 9 :(得分:0)
就我而言,我导入了另一个项目,以便利用其中包含的库。它导致我的项目有两个main.m文件。
这更令人困惑,因为错误直到几个版本之后才出现。