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

Bil*_*ljk 5 c compiler-construction macos xcode

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

#include <stdio.h>
main()
{
    printf("Hello World");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我正在运行xCode

我应该重新安装DevTools吗?

pax*_*blo 14

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

......blah blah blah/helloworld.o
Run Code Online (Sandbox Code Playgroud)

另一个在:

......yada yada yada/main.o
Run Code Online (Sandbox Code Playgroud)

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

你只需要解决这个问题.


ugh*_*fhw 12

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

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

发生错误

Ld/Users/...
cd ...
setenv ...
/Developer/...

这是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以外的任何链接错误.


小智 10

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

在此输入图像描述