我刚开始学习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吗?
答案 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)
我也遇到了这个问题。在“目标成员资格”中,只需勾选要运行的文件。在你不想运行的其他文件中取消这个。然后再试一次。
答案 3 :(得分:3)
同样重要的是要记住,如果您有#include "...filename..."
创建了函数调用的副本,则可能收到此错误消息。但是,在您的情况下,这是不可能的。
请记住,#include
基本上只是复制并粘贴代码的副本,其中#include
发生。