从上大学开始学习编程至今,十年有余,这次头一回尝试总结一下平时最常见的工作的在计算机中的本质。
从源代码到可执行文件,正常需要经过“预处理器(Preprocessor)”->“编译器(Compiler)”->“链接器(Linker)”这三个过程。如果是嵌入式系统,还需要经过“加载器(Loader)”加载到目标机器的存储器中才能运行。
现在逐个解释每个过程的含义:
- 预编译器(Preprocessor)
不同的预处理器会包含不同的功能,以词法预处理器有例,它主要做宏替换、包含头文件(#include)以及条码编译等功能。也就是说,它的输入是源代码(.asm、.c、.cpp……),仅是在源代码的基础上进行宏替换、将#include的内容导入以及根据条件选择有效的编译内容,生成中间文件,输出给“编译器”。
- 编译器(Compiler)
编译器将预处理器的输出经过词法分析、语法分析、语义分析,最后生成等效的汇编代码(Assembly File),这一步及之前的代码都是可以阅读的文本。
- 汇编器(Assembler)
汇编器将汇编代码翻译成目标代码(Object File),这时已经是二进器的机器码。
- 链接器(Linker)
每一个源文件都会生成经过编译器都会生成相应的目标代码,链接器将所有的目标代码组装(链接)起来,生成可执行文件。
时间: 2024-10-11 23:17:51