g++和 gcc 的区别
gcc 可以判断出目标程序所使用编程语言的类别,会把 xxx.c 文件当作 C 语言编译,把 xxx.cpp 文件当作 C++语言编译。而 g++只把 xxx.c 和 xxx.cpp 一律都当作 C++语言来编译。
在编译 C++文件的时候,g++会自动链接一些标准库或基础库,而 gcc 不会。当正在编译的 C++代码文件依赖 STL 标准库的时候,为了使用 STL,gcc 命令需要增加参数–lstdc++。因此,虽然 gcc 和 g++都可以编译 C++语言程序,但是使用 g++会更方便一些。
但是g++相应的也会比gcc更加严格一些,比如说gcc编译会出现警告问题,但实际上换了g++这些警告就会变成相应的报错问题,所以很多情况下还是要挑选出满足条件、符合要求的编译器。
常见代码文件后缀名
(1)目标文件:
xxx.o, 操作系统:Linux, Mac
xxx.obj, 操作系统:windows
(2)二进制文件:
xxx(没有后缀名), 操作系统:Linux, Mac, FreeBSD,
xxx.exe, 操作系统:windows
xxx.hex,操作系统:嵌入式系统
(3)共享库文件,也叫动态库文件:
xxx.dll, 操作系统:windows
xxx.so, 操作系统:Linux
xxx.dylib, 操作系统:Mac
(4)静态库文件
xxx.a
C/C++语言的编译过程
1.预处理
预处理命令声明了编译时需要的各种头文件和宏,比如包含哪些头文件、宏定义的扩展、在哪个代码段做条件编译等。涉及预处理的语法有:#define,#include,#ifdef...#endif
2.编译
首先检查代码的规范性和语法错误等,检查完毕后把代码翻译成汇编语言,生成汇编语言文件
3.汇编
基于汇编语言文件生成二进制格式的目标文件
3.链接
将目标代码与所依赖的库文件进行关联或者组装,合成一个可执行文件
具体过程如图: