- build的四个过程:
-
预处理:
- 命令:gcc -E hello.c
- 宏替换
- include文件复制进来
-
编译:
- 命令:gcc -S hello.i
- 整个过程的核心部分,进行词法分析,语法分析,语义分析。
- gcc将预编译和编译合并成一个步骤交由ccl程序处理。
-
汇编:
- 命令:gcc -c hello.c
- 将汇编语言转化成机器可执行的指令。
-
链接:
- 命令:。。。。。。很复杂。
- 就是这本书着重要讲的内容之一
-
编译的整个过程,词法分析到目标代码生成,书中只是简略介绍,但真正要了解的话,建议学习编译原理,比较复杂的一个过程不可能一两句话描述清楚。
-
模块拼装-----静态链接
- 分模块的原因:将复杂系统简单化。
- 再将简单模块拼装成复杂系统,降低复杂系统的开发难度。
- 静态链接的过程就是重定位的过程。比如我们的main程序调用了另一个模块func.c中的func函数。那么在编译main的时候,编译器并不知道func函数的具体地址,所以会先搁置,等到链接的时候,链接器就会去查找func的地址,然后将该地址补到main函数中相应的调用位置。就是重定位。