8

我在试图得到答案时遇到了这个问题。但似乎海报有多个文件并且它们没有被链接,因此出现了错误。

但是,为什么在使用单个文件时会出现此错误?

g++ myClass.cpp  
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

为什么main在编译时这里是必要的(从哪里可以找到我的代码中提到的 main)?main是代码执行的起点,但是为什么编译器会假设我需要在main这里。我可以在其他文件中定义它并gcc -o用来制作可执行文件吗?

或者我可能在代码中遗漏了导致错误的其他内容?

#include<iostream>
class myClass
{

public:
myClass()
{
    std::cout<<"Constructor";
}

~myClass()
{
    std::cout<<"Destructor";    
}

};
4

5 回答 5

9

您正在尝试编译可执行文件,因此需要一个main函数。您应该使用以下-c标志编译目标文件:

g++ -c myClass.cpp

当您使用它时,我建议-Wall -Wextra至少添加警告标志。

于 2013-04-26T13:17:58.247 回答
9

main不需要编译源文件。有必要将程序链接到可执行文件 [1],因为程序必须从某个地方开始。

你需要告诉编译器“这不是我的程序的全部,只是编译,但不要链接”,使用'-c'选项,所以

g++ -c myClass.cpp

这将生成一个myClass.o您可以稍后使用的文件,例如

g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib

(显然,用您项目中的任何名称替换名称)

[1] 假设您使用编译器附带的常规链接器脚本。也有“解决方法”,但我认为这超出了这个答案。

于 2013-04-26T13:20:34.530 回答
1

您正在将源构建为应用程序。添加-c选项以仅生成目标文件:

g++ -c myClass.cpp
于 2013-04-26T13:18:31.457 回答
1

只编译?!使用-c选项

g++ -c file.cpp

否则项目需要一个main.

于 2013-04-26T13:19:01.193 回答
1

您需要使用该-c标志进行编译,并且只告诉编译器生成一个目标文件。你告诉编译器制作一个可执行文件。

于 2013-04-26T13:19:19.763 回答