我写过一篇这个文章, 介绍了 GCC 的整体架构
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++ 标准库.
这些区别都可以在
回答中的那两个源代码中看到.