用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将根据文件扩展名选择正确的后端编译器(例如,将C编译为.c,将.cc编译为C ++),并默认将二进制文件与标准C和GCC辅助程序库链接在一起,而不管输入语言; g ++也会根据扩展选择正确的后端,不过我认为它将所有C源代码编译为C ++(即,它将.c和.cc编译为C ++),并且在其链接步骤中包括libstdc ++,而不管输入语言如何。


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

g++ myprog.cpp

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


使用g++而不是gcc

链接地址: http://www.djcxy.com/p/85743.html

上一篇: Compiling a C++ program with gcc

下一篇: GCC: Undefined reference to vtable