编译器编译过程简介

完整的编译器编译过程分为四步:预处理、编译、汇编、链接。下面简单介绍一下各个过程。

1、预处理(The Preprocessor)

        预处理器产生编译器的输入。通过预处理,将存储在不同文件中的程序模块集成为一个完整的源程序代码,并将宏展开为原始语句加入到头文件中。简单概括就是:文件合并、宏定义替换、删除注释等。

2、编译(The Compiler)

        编译器将独立于目标的高级语言源代码转换为特定于目标的汇编代码。由于汇编程序代码是特定于目标硬件的,所以编译器也特定于目标硬件。

        编译阶段首先对源代码的语法进行检查,然后对代码进行优化,最终生成机器目标代码——汇编代码。此时生成的文件为.S文件。

3、汇编(The Assembler)

        通过编译器产生的汇编代码需要交由汇编器进行进一步的处理,生成可重定位的机器代码,体现在文件上为将.s文件转换为.o文件。此时生成的.o文件为二进制文件。

4、链接(The Linker)

        经过汇编后的.o文件仍然是不可执行的,还需要经过链接阶段,将程序所引用的外部文件(库函数、链接脚本等)关联起来,生成可执行文件。

   链接的方式有静态链接和动态链接,动态链接的代码是存放在动态链接库或者某个共享对象的目标文件中,不会将库的内容copy到可执行程序中,所以生成的程序体积较小;而静态链接库则将需要的代码从相应的静态链接库中copy到可执行程序中。

你可能感兴趣的:(编译器,c语言,编程语言)