编译和链接

6 篇文章 0 订阅
6 篇文章 0 订阅

1.GCC 的编译过程

预处理cpp gcc -E hello.c -o hello.i  or cpp hello.c > hello.i

主要是展开所有的#define #include,#if 等等

编译

进行编译原理那些(词法分析,语法分析,语义分析,优化等)

gcc -S hello.i -o hello.s

生成的就是汇编代码。

汇编

将汇编器是将汇编代码转变成及其可以执行的指令。

as hello.s -o hello.o

or

gcc -c hello.s -o hello.o

链接

链接器将我们需要的.a库 和生成的.o 链接成可执行的文件。

ld 命令就是用来干这个的。

编译原理:

词法分析:"翻译"源代码,用利用有限状态机的算法来翻译为token。

语法分析:产生语法树,上下文无关文法。

语义分析:静态语义(声明和类型的匹配, 类型的转换),动态语义(?没有找到相应解释 )

中间语言生成

三地址码  和 p-code

目标代码的生成:

源代码优化器中间代码标志着下面都属于编译器后端。编译器后端主要包括代码生成器和目标代码优化器。

代码生成器把中间代码生成为目标代码。

优化过程:选择合适的寻址方式,使用位移来代替乘法运算,删除多余的代码。

 

2.链接器:

链接的主要内容就是把各个模块之间相互引用的部分都处理好,使得各个模块之间能够正确地衔接。

主要内容:地址和空间的分配,符号决议和重地位。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值