随缘补充
从源程序到可执行文件
以UNIX系统中的GCC程序为例子:
- 预编译处理阶段:预编译处理器(CPP)对源程序中以#开头的命令进行处理,例如将#include命令后的.h文件内容插入程序文件。输出结果是一个以.i为扩展名的源文件hello.i
- 编译阶段:编译器(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序hello.s
- 汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一个称为可重定向目标的文件hello.o,它是一种二进制文件,因此再文本编辑器中打开它时会显示乱码。
- 链接阶段:链接器(ld)将多个可重定位目标文件和标准库函数合并为一个可执行目标文件,或简称可执行文件。本例子中,链接器将hello.o和标准库函数printf所在的可重定位目标模块prinft.o合并,生成可执行文件hello。最终生成可执行文件被保存在磁盘上。