C++编译过程
编译:把文本形式的源代码翻译成机器语言,并生成目标文件
链接:将目标文件和操作系统的启动代码、库文件组织起来形成可执行文件
1. 编译:i-s-o
1.1 编译预处理(Pre-Processing)
编译器执行预处理指令(#开头),生成.i文件,不再包含#,例如#include, 宏定义#define,条件编译#ifdef等
1.2 编译(Compiling)
通过语法和词法分析,确定所有指令是否符合规则,翻译成汇编代码.s文件
1.3 汇编(Assembling)
把汇编语言翻译成目标机器指令的过程,生成.obj或.o目标文件,目标文件存放的就是与源程序等效的机器语言代码;
目标文件由段组成,通常至少包含两个段:
- 代码段:包含程序指令
- 数据段:存放程序用到的全局变量和静态变量
2.链接:(Lingking)
将目标文件和调用的库链接起来,生成bin文件;
其中有目标文件调用其它目标文件内的内容的情况,也有目标文件调用库的情况;
gcc编译器
GNU Compiler Collection
gcc特点:
- 可移植,多平台支持
- 交叉编译cross-compiler
- 支持多语言前端
- 模块化,可植入新语言和cpu
- 自由软件