2009-02-15 46 views
17

我有以下代码:编译错误:未定义的符号: “_main”,从引用:开始crt1.10.5.o

#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并包含这个文件吗?

非常感谢!

回答

22

您试图链接已经是:

g++ file.cpp 

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

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

这将创建两个文件file.o和hasmain.o,两者都只编译到目前为止。现在,您可以使用g ++它们关联起来:

g++ -omy_program hasmain.o file.o 

它会自动找出那些已经编译的文件,并调用链接它们来创建一个文件“MY-”,这是你的可执行文件。

1

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

除非你从包含主函数的文件中包含文件的全部内容,否则这也可以工作,虽然有点奇怪。但是,如果你这样做,那么你必须确保你编译具有main()函数的文件。

相关问题