繁体   English   中英

使用 gcc 编译 C++ 程序

[英]Compiling a C++ program with gcc

问题:如何用gcc编译器编译C++程序?

信息.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 ++。


编辑:

鲁普说, 对另一个答案的评论最好:

[...] 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

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

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

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

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

gcc -x c++

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

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

它对我很有用。 只有cmd中的一行代码。

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

在cmd中为gcc类型:

gcc --version

在cmd中为g ++类型:

g ++ --version

如果已安装,请继续。

现在,使用cmd编译.c或.cpp

for .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相同。

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

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

对于 .cpp 文件:

          g++ myprog.cpp -o myprog

我的gcc 版本 10.3.0在 Ubuntu 上的更新。 即使我添加-lstdc++或使用正确的扩展名,也必须在系统上安装cc1plus ,否则会出现此错误:

gcc: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory

获得它的一种方法是安装g++即使您不打算直接使用它,例如sudo apt install g++

现在,如果我使用扩展名.cc我可以直接调用gcc ,但是,仍然会出现警告和错误。 要使用gcc干净,具有.c扩展我不得不把它像这样

gcc -x c++ info.c -lstdc++

如果我使用.cc扩展名, .cc短,就像接受的答案一样

gcc info.cc -lstdc++

或者像其他人所说的那样,只需使用g++ info.c代替,不需要额外的参数来指示 C++,并且它适用于.c.cc.cpp扩展名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM