当前位置 博文首页 > nameofcsdn的博客:编译链接

    nameofcsdn的博客:编译链接

    作者:[db:作者] 时间:2021-07-11 22:27

    目录

    1,编译链接

    (1)预处理(预编译)

    (2)编译

    (3)汇编

    (4)链接

    2,编译过程

    (1)词法分析

    (2)语法分析

    (3)语义分析

    3,链接


    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

    cs
    下一篇:没有了