编译链接

举报
用户已注销 发表于 2021/11/19 02:09:03 2021/11/19
【摘要】 目录 1,编译链接 (1)预处理(预编译) (2)编译 (3)汇编 (4)链接 2,编译过程 (1)词法分析 (2)语法分析 (3)语义分析 3,链接 1,编译链接 编译链接分为4个步骤:预处理、编译、汇编、链接 (1)预处理(预编译) 预编译过程把源文件变成.i文件,主要处理以#开头的预编译指令,比如#i...

目录

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

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/116654835

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。