ld:1个用于体系结构x86_64的重复符号

时间:2014-09-19 23:39:16

标签: c xcode6

我对C和C ++编程非常陌生,并且在软件编程方面经验很少(我的背景是基于Web的)但我正在尝试使用C / C ++和Xcode ...所以我发现了这段代码(以及许多类似的在线变体):

#include <stdio.h>

int main()
{
    printf ("Test");
    return 0;
}

然而,当我在Xcode中编译它时,我收到以下错误:

> duplicate symbol _main in:
>     /Users/thomas/Library/Developer/Xcode/DerivedData/test-etqojvxbxhxjqeggdzkbfufvbeza/Build/Intermediates/test.build/Debug/test.build/Objects-normal/x86_64/first.o
>     /Users/thomas/Library/Developer/Xcode/DerivedData/test-etqojvxbxhxjqeggdzkbfufvbeza/Build/Intermediates/test.build/Debug/test.build/Objects-normal/x86_64/main.o
> ld: 1 duplicate symbol for architecture x86_64 clang: error: linker
> command failed with exit code 1 (use -v to see invocation)

对我来说,使用新手可能Xcode是错误的吗?如果有人可以推荐一个更好的编译器,那也会很棒!

2 个答案:

答案 0 :(得分:12)

在Xcode中创建新项目时,它会自动为您提供一个包含main()的起始文件。如果您创建了一个新文件,例如first.c,然后将测试代码粘贴到其中,那么您将定义main()两次,并获得该错误。

您需要删除Xcode在新项目中提供的文件(例如main.cmain.m),或者将示例代码剪切并粘贴到该文件中,而不是创建新文件之一。

答案 1 :(得分:0)

在我的情况下,我创建了另一个.c文件,Xcode将其视为另一个主文件,因此创建了错误-> 架构x86_64的重复符号

选择第二个.c文件->显示文件检查器->并删除项目中第二个.c文件的目标成员资格,以消除此错误。

enter image description here

@Thomas Fearn-您需要删除 first.c 文件上的目标成员身份。