问题:如何使用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 ++之间有什么区别。 谢谢,
答案 0 :(得分:102)
gcc实际上可以很好地编译c ++代码。您收到的错误是链接器错误,而不是编译器错误。
如果您将编译行更改为:
,则可能存在gcc info.C -lstdc++
使它链接到标准的c ++库,然后就可以了。
但是,你应该让你的生活更轻松,并使用g ++。
修改强>
Rup在his 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是一个选择正确编译器的前端。