返回首页   进站必读

9.1 编译和链接


9.1 编译和链接

9.1.1 编译

编译: 1、利用编译程序从源语言编写的源程序产生目标程序的过程。 2、用编译程序产生目标程序的动作,编译就是把高级语言变成计算机可以识别的2进制语言。

编译程序把一个源程序翻译成目标程序的工作分为5个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码生成。主要是进行词法分析和语法分析。

9.1.2 链接

链接就是对.o文件进行符号解析和重定位的过程,链接器就是用来完成不同模块之间的链接问题。
1、符号解析:
当一个模块使用了在该模块中没有没有定义过的函数或者全局变量时,编译器生成的符号表会标记出所有这样的函数或者全局变量。而连接器的责任就是要到别的模块中去查找它们的定义,如果没有找到适合的定义或者找到的合适定义不唯一,符号解析就无法正常完成。

2、重定位:
编译器在编译生成目标文件时,通常都使用从零开始的相对地址。然而,在链接过程中,连接器将从一个指定的地址开始,根据输入的目标文件的顺序以段为单位将它们一个接一个拼接起来。除了目标文件的拼装之外,在重定位的过程中还完成了两个任务:一是生成最终的符号表;二是对代码段的某些位置进行修改,所有需要修改的位置都由编译器生成的重定位表指出。