Compiling a C++ program with gcc
问题:如何用GCC编译器编译C++程序?
信息C:
1 2 3 4 5 6 7 8 9 10 11 | #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; } |
当我试图编译
江户十一〔一〕号
1 2 3 4 5 6 7 8 9 10 | 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++代码就行了。收到的错误是链接器错误,而不是编译器错误。
如果您将编译行更改为:
1 | gcc info.C -lstdc++ |
这使得它链接到标准的C++库,那么它就可以正常工作了。
但是,你应该让你的生活更简单,使用G++。
编辑:
鲁普在评论另一个答案时说得最好:
[...] gcc will
select the correct back-end compiler
based on file extension (i.e. will
compile a .c as C and a .cc as C++)
and links binaries against just the
standard C and GCC helper libraries by
default regardless of input languages;
g++ will also select the correct
back-end based on extension except
that I think it compiles all C source
as C++ instead (i.e. it compiles both
.c and .cc as C++) and it includes
libstdc++ in its link step regardless
of input languages.
号
如果你给代码一个C扩展,编译器认为它是C代码,而不是C++。而C++编译器驱动程序被称为C++,如果使用GCC驱动程序,就会出现链接器问题,因为标准C++库默认情况下不会链接。所以你想要:
1 | g++ myprog.cpp |
而且不要考虑使用大写的.c扩展,除非你从不想移植你的代码,并且准备好被你的同事憎恨。
用
gcc和g++的区别在于:
1 2 | gcc | g++ compiles c source | compiles c++ source |
号
使用G++而不是GCC编译C++源代码。
默认情况下,gcc根据文件扩展名选择语言,但您可以使用-x选项强制gcc选择不同的语言后端,因此:
1 | gcc -x c++ |
。
更多选项在GCC手册页的"控制输出类型的选项"下详细说明。参见http://linux.die.net/man/1/gcc(在页面上搜索文本
在gcc无法猜测使用文件扩展名的语言的情况下(例如,如果您正在生成代码并通过stdin将其提供给gcc),这个工具非常有用。
它对我很管用。命令中只有一行代码。
首先,确认您已经安装了GCC(对于C)或G++(对于C++)编译器。
在命令中,对于gcc类型:
gcc——版本
在Cmd for G++中,键入:
G++——版本
如果已安装,则继续。
现在,使用cmd编译.c或.cpp
for.c语法:
gcc-o exe文件名yourfilename.c
例子:
gcc-o myfile myfile.c文件
这里的exe文件名(示例中是myfile)是编译后要生成的.exe文件的名称(注意:我没有在此放置任何扩展名)。而yourfilename.c(示例中是myfile.c)是扩展名为.c的源文件。
现在转到包含.c文件的文件夹,在这里您将找到扩展名为.exe的文件。打开它。休瑞……
对于.cpp语法:
g++-o exe文件名yourfilename.cpp
之后,过程与.c相同。
如果我记得正确,gcc根据后缀确定文件类型。所以,让它成为foo.cc,它应该可以工作。
另外,要回答你的另一个问题,那就是"gcc"和"g++"之间的区别。gcc是选择正确编译器的前端。