gcc与g++

我写过一篇这个文章, 介绍了 GCC 的整体架构

孙孟越:GCC 的整体架构zhuanlan.zhihu.com图标

GCC 是 GNU 编译器集合的意思, 对于用户能用的常用命令, 有 gcc 和 g++.

无论是 gcc 还是 g++, 他们的定位都是 driver.

driver 负责调用编译器(狭义), 把源码编译到汇编代码. 比如 C 语言的编译器(狭义)是 cc1, 而 C++ 语言的编译器(狭义)是 cc1plus.

driver 再调用 as, 把汇编代码变成二进制代码. 最后调用 ld, 负责把二进制代码拼在一起.


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

具体而言

g++ 会把 .c 文件当做是 C++ 语言 (在 .c 文件前后分别加上 -xc++-xnone, 强行变成 C++), 从而调用 cc1plus 进行编译.

g++ 遇到 .cpp 文件也会当做是 C++, 调用 cc1plus 进行编译.

g++ 还会默认告诉链接器, 让它链接上 C++ 标准库.

 

gcc 会把 .c 文件当做是 C 语言. 从而调用 cc1 进行编译.

gcc 遇到 .cpp 文件, 会处理成 C++ 语言. 调用 cc1plus 进行编译.

gcc 默认不会链接上 C++ 标准库.

 

这些区别都可以在

回答中的那两个源代码中看到.

 

posted @ 2021-07-23 10:48  CNHK19  阅读(148)  评论(0编辑  收藏  举报