【问题标题】:Xcode, Duplicate symbol _mainXcode,重复符号_main
【发布时间】:2011-03-23 19:09:25
【问题描述】:

我有重复的符号 _main。

问题是它说“Duplicate symbol _main in /Users/.../i386/main-B9843B6026D6EFA4.o 和 /Users/.../i386/main-B9843B6026D6EFA4.o”,XXX 和 XXX 实际上是相同的 .o 文件。我不知道为什么当它是相同的.o时它认为它是重复的符号?!

任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 如果 main() 函数多次出现,就会发生这种情况。

标签: xcode


【解决方案1】:

啊..我发现我在 Targets/Compiled Sources 下有多个条目(在较新的 XCode 中它位于 Build Phases/Compile Sources 下)。我删除了它们,问题就解决了。多条目的事情可能与 Git 合并有关。

【讨论】:

  • 我还没有弄清楚...还有其他想法吗?
  • 你真的省了我很多努力
  • 我有一个重复的 TBXML 主文件(我刚刚添加)
  • 谢谢!如果我能给你更多的分数……我开始受够了这个 XCode 废话!
  • 如果你不小心用#import "someFile.m" 而不是#import "someFile.h" 也可能发生这种情况
【解决方案2】:

在我的例子中,我似乎是在导入一个 .m 文件而不是它的 .h 对应文件。 编辑解决

#import "Tools.m"

进入

#import "Tools.h"

【讨论】:

  • 非常感谢!在我尝试了所有其他解决方案后,在我的项目中简单搜索 .m" 会显示 .m 文件的导入。
  • 在更改继承层次结构后我遇到了同样的问题。谢谢。
  • 刚刚被这个。谢谢!
  • 就我而言,我的项目中有多个文件“main.m”。这个答案对我有帮助! --> stackoverflow.com/a/12989012/1881895
【解决方案3】:

我也遇到了这个问题,它是由我从另一个项目中导入的代码引起的。 我在我的项目目录中为“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

我从项目 -> 目标 -> 构建阶段 -> 编译源列表中删除了该文件,然后将其编译

【讨论】:

  • 我通过 int main 进行了搜索,我有两个相同的文件,我删除了一个并运行了项目。谢谢;)
  • 我运行 grep -nr "int main" . 并在我的项目中找到了一个示例项目,它是我添加的 SDK 下载的一部分。发现这一点后,我通过 Xcode 删除了这些文件,瞧!该项目现在构建。谢谢。
【解决方案4】:

我在使用两个第三方框架时遇到了同样的问题。 (AppLovin 和 Flurry) 我是通过在构建设置中从“其他链接器标志”中删除“all_load”来了解这一点的。

【讨论】:

    【解决方案5】:

    我在打开一个使用 Xcode 4.0.2 和 Xcode 4.1 创建的项目时遇到了同样的问题。我只是通过单击“现代化项目”(Editor/Modernize Project)来解决。此过程会自动删除所有重复项。

    【讨论】:

      【解决方案6】:

      如果仍然有问题,尝试这样搜索:“int main(”,并删除除 main.m 之外的那些文件

      【讨论】:

        【解决方案7】:

        我自己也遇到了这个问题,但是在阅读了确实让我走上正轨的 Huggie 的解决方案之后,我有点困惑。 所以Xcode中的当前解决方案: 选择项目、目标 -> 构建阶段并点击验证设置

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

        【讨论】:

        • 应该在哪里?
        • 这太棒了,以前从未见过。只需转到您的项目构建阶段,您就可以在编辑器菜单中找到Validate Settings。为我工作!
        【解决方案8】:

        在我的例子中,我在我的常量文件中声明了一个 NSString(由许多类导入)但忘记将它定义为静态的!!

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

        阅读完整的错误消息让我明白了这一点:“重复符号参数”。不要害怕并尝试理解错误信息!有时他们甚至可能会确切地告诉你你做错了什么。

        【讨论】:

          【解决方案9】:

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

          这更令人困惑,因为该错误直到多次构建后才出现。

          【讨论】:

            【解决方案10】:

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

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

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

            这可能是我应得的在 NSObject 上放置一个类别。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-05-18
              • 2014-05-20
              • 2016-02-03
              • 1970-01-01
              • 1970-01-01
              • 2020-10-20
              相关资源
              最近更新 更多