用gcc编译C ++程序

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;
}

当我试图编译info.c

江户十一〔一〕号

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扩展,除非你从不想移植你的代码,并且准备好被你的同事憎恨。


g++代替gcc


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(在页面上搜索文本-x language)。

在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是选择正确编译器的前端。