C\C++预编译、编译、汇编和链接

C\C++预编译、编译、汇编和链接_编译器

预编译(Precompiling)

预编译是做些代码文本的替换工作。是整个编译过程的最先做的工作。

处理以#开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。

主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。

C编译系统在对程序进行通常的编译之前,首先进行预处理。

编译(Compliation)

编译是对于预处理完的文件进行词法分析语法分析语义分析和中间代码生成代码优化后产生相应的汇编代码文件。
内联函数的替换就发生在这一阶段。
主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
C\C++预编译、编译、汇编和链接_编译器_02

汇编(Assembly)

汇编器是将汇编代码转化成机器可以执行的命令,每一条汇编语句都对应一条机器指令,并生成可重定位目标程序的.o文件。
汇编相对于编译的过程比较简单,根据汇编指令表和机器指令表一一进行翻译就可以了。所以汇编器的汇编过程相对与编译器是比较简单的
C\C++预编译、编译、汇编和链接_预编译指令_03

链接(Link)

链接分为:静态链接动态链接
静态链接:由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。生成的可执行文件太大,需要更多的系统资源,在装入内存时也会消耗更多的时间。
动态链接:在可执行文件装载时或运行时,由操作系统的装载程序加载库。