用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,此工具非常有用。