用 GCC 编译 C 程序

新手上路,请多包涵

如何使用 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++程序吗?在相关说明中, gccg++ 有什么区别?

原文由 xyz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 416
2 个回答

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

奇怪的是,如果您将编译行更改为:

 gcc info.C -lstdc++

这使它链接到标准 C++ 库,然后它就可以正常工作了。

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


Rup他对另一个答案的评论 中说得最好:

[…] gcc 将根据文件扩展名选择正确的后端编译器(即会将 .c 编译为 C 并将 .cc 编译为 C++),并且默认情况下仅针对标准 C 和 GCC 帮助程序库链接二进制文件,无论输入语言; g++ 还将根据扩展名选择正确的后端,除了我认为它将所有 C 源代码编译为 C++(即,它将 .c 和 .cc 都编译为 C++),并且无论输入语言如何,它都在其链接步骤中包含 libstdc++。

原文由 Evan Teran 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

gcc:致命错误:无法执行’cc1plus’:execvp:没有这样的文件或目录

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

现在,如果我使用扩展 .cc ,我可以直接调用 gcc 但是,警告和错误仍然出现。要干净地使用 gcc.c 扩展名,我必须 这样 称呼它:

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

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

 gcc info.cc -lstdc++

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

原文由 Nagev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题