编译链接
目录
1,编译链接
编译链接分为4个步骤:预处理、编译、汇编、链接
(1)预处理(预编译)
预编译过程把源文件变成.i文件,主要处理以#开头的预编译指令,比如#include、#define等
主要处理规则:
(2)编译
编译是把预处理完的文件进行一系列词法分析、语法分析、语义分析、优化后,生成相应的汇编代码文件.s。
(3)汇编
汇编器将汇编代码变成机器指令,没有复杂语法,也没有语义,也不需要优化,只需要一一对应的翻译即可,最后生成目标文件,Windows中的.obj,Linux中的.o。
(4)链接
链接过程把.o文件和.a库文件链接到一起,生成可执行文件。
2,编译过程
(1)词法分析
词法分析就是把源代码变成一个个词,即token,
每个token的类型有关键字、标识符、字面量、特殊符号等。
(2)语法分析
语句分析就是建立语法树,一个语句对应一颗语法树。
(3)语义分析
有些符合语法的句子在语义层面不合法,比如两个指针相乘。
编译器所能分析的是静态语义,即编译器可以确定的语义,另外一种是动态语义,即运行期语义。
3,链接
链接过程主要包括地址和空间分配、符号决议(符号绑定/地址绑定)、重定位等。
各个模块是单独编译的,编译完成之后链接起来的过程叫静态链接。
编译时,对于其他模块的各符号地址都是未知的,先暂时写成0,这里会留一个重定位入口,
链接时,各个符号都有了地址之后,把各模块中各符号的地址都刷新成正确的值,这个过程叫重定位。
动态链接库:Windows中的.dll,Linux中的.so
静态链接库:Windows中的.lib,Linux中的.a
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/116654835
- 点赞
- 收藏
- 关注作者
评论(0)