这里写图片描述
从上大学开始学习编程至今,十年有余,这次头一回尝试总结一下平时最常见的工作的在计算机中的本质。

从源代码到可执行文件,正常需要经过“预处理器(Preprocessor)”->“编译器(Compiler)”->“链接器(Linker)”这三个过程。如果是嵌入式系统,还需要经过“加载器(Loader)”加载到目标机器的存储器中才能运行。

现在逐个解释每个过程的含义:

  • 预编译器(Preprocessor)
    不同的预处理器会包含不同的功能,以词法预处理器有例,它主要做宏替换、包含头文件(#include)以及条码编译等功能。也就是说,它的输入是源代码(.asm、.c、.cpp……),仅是在源代码的基础上进行宏替换、将#include的内容导入以及根据条件选择有效的编译内容,生成中间文件,输出给“编译器”。
  • 编译器(Compiler)
    编译器将预处理器的输出经过词法分析、语法分析、语义分析,最后生成等效的汇编代码(Assembly File),这一步及之前的代码都是可以阅读的文本。
  • 汇编器(Assembler)
    汇编器将汇编代码翻译成目标代码(Object File),这时已经是二进器的机器码。
  • 链接器(Linker)
    每一个源文件都会生成经过编译器都会生成相应的目标代码,链接器将所有的目标代码组装(链接)起来,生成可执行文件。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐