当前位置:   article > 正文

gcc和g++的关系_gcc其实是驱动程序

gcc其实是驱动程序

GCCGNU 编译器集合的意思, 对于用户能用的常用命令, 有 gccg++.

无论是 gcc 还是 g++, 他们的定位都是 driver (驱动程序). driver 负责调用编译器(狭义), 把源码编译到汇编代码. 比如 C 语言的编译器(狭义)是 cc1, 而 C++ 语言的编译器(狭义)是 cc1plus. driver 再调用 as, 把汇编代码变成二进制代码. 最后调用 ld, 负责把二进制代码拼在一起.

gccg++ 的区别无非就是调用的编译器不同, 并且传递给链接器的参数不同.

具体而言 :

  • g++ 会把 .c 文件当做是 C++ 语言文件 (在 .c 文件前后分别加上 -xc++-xnone, 强制变成 C++), 从而调用 cc1plus 进行编译;
  • g++ 遇到 .cpp 文件也会当做是 C++, 调用 cc1plus 进行编译;
  • g++ 还会默认告诉链接器, 让它链接上 C++ 标准库.
  • gcc 会把 .c 文件当做是 C 语言文件, 从而调用 cc1 进行编译;
  • gcc 遇到 .cpp 文件, 会当作是 C++ 语言文件处理, 调用 cc1plus 进行编译;
  • gcc 默认不会链接上 C++ 标准库.

driver 一般会根据文件后缀名确定它是什么语言. 下面这段 GCC 的源代码中, 就储存了文件后缀名和处理流程的默认对应关系. The default list of file name suffixes and their compilation specs.
文件后缀对应的编译器

因此我们可以使用 gfortran 编译 .c 文件而不会报错的;
gfortran编译.c文件

目前网上最常见的误导性言论是说:

gcc 会调用 g++ 或者说 g++ 会调用 gcc”. X

其实 gccg++ 都是 driver , 实际上 gcc 遇到 .cpp 调用的是 cc1plus, 就像 gcc 遇到 .d 文件会调用 d21 而不是 gdc (也是 driver), 遇到 .f 文件会调用 f951 而不是 gfortran (也是 driver) 一样.

参考文章

  1. gcc和g++是什么关系-知乎用户的回答
  2. GCC 的整体架构
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/260807
推荐阅读
相关标签
  

闽ICP备14008679号