《程序员自我修养》之第二章 编译和链接
1、在linux下,当我们使用gcc编译hello world程序时,可以分解为四个步骤,分别是预处理,编译,汇编,链接。如图所示:
(1) 预处理:相当于执行命令gcc –E hello.c –o hello.i
(2) 编译:就是将预处理后的文件进行词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件。
相当于执行命令 gcc –S hello.i –o hello.s
(3) 汇编:将汇编代码转换成机器代码
相当于执行命令 gcc –c hello.s –o hello.o
(4) 链接:
2、编译过程分为六步:
词法分析、语法分析、语义分析、源代码优化、代码生成、目标代码优化
3、链接过程主要包括了地址和空间分配、符号决议(符号绑定)和重定位。
最基本的静态链接过程如图所示
库其实是一组目标文件的包。