用gcc编译C ++程序

时间:2010-07-05 09:17:03

标签: c++ gcc g++ gnu

问题:如何使用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 ++之间有什么区别。 谢谢,

7 个答案:

答案 0 :(得分:102)

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

如果您将编译行更改为:

,则可能存在
gcc info.C -lstdc++

使它链接到标准的c ++库,然后就可以了。

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


修改

Ruphis comment中对另一个答案说得最好:

  

[...] gcc会   选择正确的后端编译器   基于文件扩展名(即将   将.c编译为C,将.cc编译为C ++)   和链接二进制文件只反对   标准C和GCC助手库   默认无论输入语言如何;   g ++也会选择正确的   后端基于扩展名除外   我认为它编译了所有C源代码   而不是C ++(即它编译两者   .c和.cc作为C ++),它包括   无论如何,libstdc ++在其链接步骤中   输入语言。

答案 1 :(得分:36)

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

g++ myprog.cpp

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

答案 2 :(得分:18)

使用g++代替gcc

答案 3 :(得分:10)

gcc和g ++之间的区别是:

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

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

答案 4 :(得分:7)

默认情况下,gcc根据文件扩展名选择语言,但您可以强制gcc使用-x选项选择不同的语言后端:

gcc -x c++

“控制输出类型的选项”下的gcc手册页中详细介绍了更多选项。参见例如http://linux.die.net/man/1/gcc(在页面上搜索文字-x language)。

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

答案 5 :(得分:3)

对我来说效果很好。只有cmd中的一行代码。

首先,确认您已安装 gcc (对于c)或 g ++ (对于c ++)编译器。

在gd类型的cmd中:

gcc --version

in cmd for g ++ type:

g ++ --version

如果已安装,请继续。

现在,使用cmd

编译.c或.cpp

代表 .c 语法:

gcc -o exe_filename yourfilename.c

示例:

gcc -o myfile myfile.c

此处 exe_filename(示例中为myfile)是您要在编译后生成的 .exe文件的名称(注意:我没有在此处添加任何扩展名) 。 yourfilename.c(示例中为myfile.c)您的源文件,其扩展名为.c。

现在转到包含.c文件的文件夹,在这里您将找到扩展名为.exe的文件。打开它吧。乌拉..

对于 .cpp 语法:

g ++ -o exe_filename yourfilename.cpp

之后,该过程与.c。

相同

答案 6 :(得分:1)

如果我没记错的话,gcc会根据后缀确定文件类型。所以,把它变成foo.cc它应该可以工作。

而且,为了回答你的另一个问题, 是“gcc”和“g ++”之间的区别。 gcc是一个选择正确编译器的前端。