程序的翻译环境和执行环境
第一种是翻译环境,在这个环境中源代码被转换成可执行的机器指令。
第二种是执行环境,执行实际的代码。
1 组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。
2 每个目标文件由连接器(linker)捆绑在一起,形成一个单一二完整的可执行程序。
3 链接器同时也会引入标准c函数库中任何被该程序所引用到的函数,而且它还可以搜索程序员个人的程序库,将其需要的函数也链接到程序中。
编译(编译器)也分为3阶段(文本操作):
1 预处理(*.c): #include 头文件的包含 生成(.i文件)
2 编译(*.i): 注释删除 ,用空格替换注释 生成(.s文件)
3 汇编(*.s): 替换#define 语法分析(形成符号表) 词法分析 语义分析 符号汇总(把c语言代码翻译成汇编代码,最后将汇编代码转换成二进制代码 ,生成(.obj文件))
符号表:
链接(链接器)分为2阶段:
1 合并段表:不同符号表之间的段按照一定的规则合并,生成exe可执行文件。
2 符号表的合并和重定位
合并后:
执行时链接器会按照合并后的地址去找,对应的函数运行,如果没有,或者合并失败,就是链接错误。