编译错误:未定义的符号:“_ main”,引自:crt1.10.5.o中的start

时间:2009-02-15 07:14:04

标签: c++

我有以下代码:

#include <iostream>

using namespace std;

class testing{
   int test() const;
   int test1(const testing& test2);
};

int testing::test() const{
   return 1;
}

int testing::test1(const testing& test2){
   test2.test();
   return 1;
}

编译后,它给出了以下错误:

Undefined symbols:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

为什么抱怨主?我不能在另一个文件中声明main并包含这个吗?

非常感谢!

3 个答案:

答案 0 :(得分:23)

您已尝试将其链接:

g++ file.cpp

这不仅会编译它,还会尝试创建可执行文件。然后链接器无法找到它需要的主要功能。嗯,这样做:

g++ -c file.cpp
g++ -c hasmain.cpp

这将创建两个文件file.o和hasmain.o,两者都只编译到目前为止。现在你可以用g ++链接它们了:

g++ -omy_program hasmain.o file.o

它会自动确定那些已编译的文件,并调用它们上的链接器来创建一个文件“my_program”,这是你的可执行文件。

答案 1 :(得分:1)

如果在另一个文件中声明main函数,则必须单独编译这两个文件,然后将它们链接到1个可执行文件中。

除非你使用main函数从文件中包含文件的全部内容,否则这也会有效,尽管有点奇怪。但是,如果你这样做,那么你必须确保编译具有main()函数的文件。

答案 2 :(得分:0)

尝试这些(它们对我有用):

  • /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  • brew install mingw-w64

请在运行之前保存您的代码。

有关参考,请参见此video