C/C++程序从文本文件到可执行目标文件都做了什么
来源:深入理解计算机系统(CSAPP)
1.预处理阶段
预处理器根据以字符#开头的命令,修改原始的c程序。比如#include
2.编译阶段
编译器(ccl)将文本文件hello.i翻译成文本文件hello.s 它包含了一个汇编语言程序。它为不同高级语言的不同编译器提供了通用的输出语言。
3.汇编 阶段
汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成文件hello.o中。hello.o文件是一个二进制文件
4.链接阶段
hello程序调用了printf函数,它是每个c编译器都提供的标准c库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好的目标文件中,而这个文件必须以某种方式合并到我们的hello,o程序中,链接器就负责处理这种合并。结果就得到了hello文件,它是一个可执行目标文件或简称为可执行文件,可以被加载到内存中,由系统执行。