用gcc编译一个C ++程序

问题:如何用gcc编译器编译C ++程序?

info.c:

#include<iostream> using std::cout; using std::endl; int main() { #ifdef __cplusplus cout << "C++ compiler in use and version is " << __cplusplus << endl; #endif cout <<"Version is " << __STDC_VERSION__ << endl; cout << "Hi" << __FILE__ << __LINE__ << endl; } 

当我尝试编译info.c

$ gcc info.C

 Undefined first referenced symbol in file cout /var/tmp/ccPxLN2a.o endl(ostream &) /var/tmp/ccPxLN2a.o ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o ostream::operator<<(int) /var/tmp/ccPxLN2a.o ostream::operator<<(long) /var/tmp/ccPxLN2a.o ostream::operator<<(char const *) /var/tmp/ccPxLN2a.o ld: fatal: Symbol referencing errors. No output written to a.out collect2: ld returned 1 exit status 

gcc编译器不能编译C ++程序吗? 在相关说明中,gcc和g ++有什么区别。 谢谢,

gcc实际上可以编译c ++代码就好了。 您收到的错误是链接器错误,而不是编译器错误。

很可能是,如果您将编辑行更改为:

 gcc info.C -lstdc++ 

这使得它链接到标准的C ++库,那么它将工作得很好。

但是,你应该让你的生活更轻松,并使用g ++。


编辑:

Rup在对另一个答案的评论中说得最好:

gcc将根据文件扩展名select正确的后端编译器(即将C编译为.c,.cc编译为C ++),默认情况下将二进制文件与标准C和GCC辅助函数库链接在一起input语言; g ++也会根据扩展select正确的后端,不过我认为它将所有C源代码编译为C ++(即,它将.c和.cc编译为C ++),并且在其链接步骤中包括libstdc ++而不考虑input语言。

如果你给代码一个.c扩展名,编译器会认为它是C代码,而不是C ++。 而C ++编译器驱动程序被称为g ++,如果使用gcc驱动程序,则会遇到链接程序问题,因为标准C ++库默认情况下不会链接。 所以你要:

 g++ myprog.cpp 

甚至不要考虑使用大写的.C扩展名,除非你不想移植你的代码,并且准备被那些与你一起工作的人讨厌。

使用g++而不是gcc

gcc和g ++的区别是:

  gcc | g++ compiles c source | compiles c++ source 

使用g ++而不是gcc来编译你的c ++源代码。

它为我工作得很好。 在cmd中只需一行代码。

首先,确认你已经安装了gcc (for c)或者g ++ (for c ++)编译器。

在cmd中为gcctypes:

gcc –version

在cmd为g ++types:

g ++ –version

如果安装,然后继续。

现在,使用cmd编译你的.c或者.cpp文件

对于.c语法:

gcc -o exe_filename yourfilename.c

例:

gcc -o myfile myfile.c

这里的exe_filename(例如myfile)是你想要在编译后生成的.exe文件的名称(注意:我没有在这里放任何扩展名)。 而你的文件名.c (例如myfile.c)的扩展名为.c的源文件

现在转到包含.c文件的文件夹,在这里您将find一个带有.exe扩展名的文件。 只要打开它。 欢呼..

对于.cpp语法:

g ++ -o exe_filename yourfilename.cpp

之后它的过程与.c相同。

如果我没有记错,gcc从后缀中确定文件types。 所以,使它foo.cc,它应该工作。

而且,要回答你的其他问题, 就是“gcc”和“g ++”之间的区别。 gcc是select正确编译器的前端。

你可以使用gcc来强制使用-x选项来select不同的语言后端:

 gcc -x c++ 

下面的gcc手册页中详细介绍了更多选项。 参见例如http://linux.die.net/man/1/gcc

在gcc无法使用文件扩展名猜测语言的情况下,例如如果您正在生成代码并通过stdin将其提供给gcc,此工具非常有用。