文件的新c ++错误

时间:2018-05-07 00:03:28

标签: c++ console cout

我是c ++的100%新人所以请耐心等待:):

我收到此文件的错误,不知道为什么。任何帮助表示赞赏。

#include <iostream>

using namespace std;

int main()
{
    cout << "hi" << endl;
    return 0;
}

------------ Build:Debug in 1600(编译器:GNU GCC编译器)-------------

g++  -o bin/Debug/1600 obj/Debug/main.o obj/Debug/src/test.o obj/Debug/test03.o   
duplicate symbol _main in:
    obj/Debug/main.o
    obj/Debug/test03.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2 个答案:

答案 0 :(得分:0)

很难说出你从问题中得到了什么。

以下是如何使用gcc

构建一个简单的C ++程序

my_program.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "hi" << endl;
    return 0;
}

编译为目标文件类型

g++ -c my_program.cpp

要链接(您通常在这里有更多文件)

g++ -o my_program my_program.o

所以,这并不是很有趣,所以大多数人都使用像make,cmake,msbuild或者CLion IDE使用的构建系统。

答案 1 :(得分:0)

从源文件中创建符号。 .cpp文件中的main变为_main作为符号。在链接期间,只能有一个main函数,因此只允许和允许一个_main符号。

您创建了三个目标文件:

  • obj / Debug / main.o,其中包含main
  • obj / Debug / src / test.o
  • obj / Debug / test03.o 还包含 main

可能是因为你们每个人都有一个.cpp文件,而你正在使用的命令行或IDE都要编译它们。

duplicate symbol _main

上面的文字告诉你链接器(试图理解所有编译对象(.o)文件)找到了多个main

因此,解决方案是查看您的IDE设置并删除其他文件(或至少从其他文件中删除main),因为您只对编译一个源文件感兴趣。