我在尝试获得答案时遇到了this。但是看起来这张海报有多个文件而且它们没有被链接,因而错误。
但是,为什么在使用单个文件时会出现此错误?
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";
}
};
答案 0 :(得分:8)
您正在尝试编译可执行文件,因此需要main
函数。您应该使用-c
标志编译目标文件:
g++ -c myClass.cpp
当你在场时,我建议至少添加警告标志-Wall -Wextra
。
答案 1 :(得分:8)
main
。有必要将程序链接到可执行文件[1],因为程序必须从某个地方开始。
你需要告诉编译器“这不是我的整个程序,只是编译,但不要链接”,使用'-c'选项,所以
g++ -c myClass.cpp
将生成myClass.o
文件,稍后您可以使用该文件,例如
g++ -o myprog myClass.o myOtherClass.o something_that_has_main.o -lsomelib
(显然,用您项目中的任何内容替换名称)
[1]假设您使用编译器附带的常规链接器scrips。还有“解决方法”,但我认为这超出了这个答案。
答案 2 :(得分:1)
您正在将源代码构建为应用程序。添加-c
选项仅生成目标文件:
g++ -c myClass.cpp
答案 3 :(得分:1)
仅编译?!使用-c
选项
g++ -c file.cpp
否则项目需要main
。
答案 4 :(得分:1)
您需要使用-c
标志进行编译,并且只告诉编译器生成目标文件。你告诉编译器生成一个可执行文件。