用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
。