奇怪的C编译器,收到错误“ld:duplicate symbol _main”

时间:2012-03-27 01:38:58

标签: c xcode macos compiler-construction

我刚开始学习C,写了我的hello world程序:

#include <stdio.h>
main()
{
    printf("Hello World");
    return 0;
}

当我运行代码时,我得到一个很长的错误:

Apple Mach-O Linker (id) Error

 Ld /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug/CProj normal x86_64
        cd /Users/Solomon/Desktop/C/CProj
        setenv MACOSX_DEPLOYMENT_TARGET 10.7
        /Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug -F/Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug -filelist /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/Objects-normal/x86_64/CProj.LinkFileList -mmacosx-version-min=10.7 -o /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug/CProj

    ld: duplicate symbol _main in /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/Objects-normal/x86_64/helloworld.o and /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/Objects-normal/x86_64/main.o for architecture x86_64
    Command /Developer/usr/bin/clang failed with exit code 1

我正在运行xCode

我应该重新安装DevTools吗?

4 个答案:

答案 0 :(得分:14)

如果您读取错误消息(特别是从ld: duplicate symbol _main in ...开始的行),您会发现它抱怨两个main函数,其中一个在:

......blah blah blah/helloworld.o

和另一个在:

......yada yada yada/main.o

这意味着你的项目不知何故搞砸了。要么有两个单独的源文件包含main,要么Xcode自动提供一个。

你只需要解决这个问题。

答案 1 :(得分:12)

以下是解释该消息的方法:

  

Apple Mach-O链接器(id)错误

发生错误

  

Ld / Users / ...
      cd ...
      setenv ...
      /开发商/ ...

这是Xcode执行链接步骤的命令。您几乎总是可以忽略它并跳过下一个空白行。

  

ld:/Users/.../helloworld.o中的重复符号_main和架构x86_64中的/Users/.../main.o

这是实际的错误消息。它会告诉您,您有_main个重复的符号,一个在helloworld.o文件中,另一个在main.o中。这意味着您必须使用名为main的函数,这是不允许的。其中一个位于helloworld.c,另一个位于main.c。如果删除其中一个功能或文件,错误将消失。

  

Command / Developer / usr / bin / clang失败,退出代码为1

这告诉你Xcode命令的退出代码。它没有错误信息那么有用,而且我从未见过1以外的任何链接错误。

答案 2 :(得分:10)

我也遇到了这个问题。在“目标成员资格”中,只需勾选要运行的文件。在你不想运行的其他文件中取消这个。然后再试一次。

enter image description here

答案 3 :(得分:3)

同样重要的是要记住,如果您有#include "...filename..."创建了函数调用的副本,则可能收到此错误消息。但是,在您的情况下,这是不可能的。

请记住,#include基本上只是复制并粘贴代码的副本,其中#include发生。