程序的编译,链接

  我们基本都知道一个程序由代码行再到最后被执行生成目标文件,会经历四个过程: 1:预编译(Prepressing)   2.编译(Compilation) 3.汇编(Linking)4.链接(Assembly) 但其中每个步骤都发生了什么,还是不太清楚,今天我们就来学习了解下这个过程.

 

一.预编译.(假设原文件是.c文件   .c------> .i文件)

linux命令(gcc -E test.c -o test.i  或者 cpp test.c > test.i    // test.i代表处理生成的.i文件程序名)

预编译主要处理那些源代码文件中以"#"的预编译指令.如"#define"  "#include".

1.#define定义的标识符替换,#define定义的宏也会发生替换.或者直接说#define的删除,并展开宏定义.

2.处理"#include"预编译指令,将包含的头文件插到该预编译指令的位置,该过程是递归的.

3.处理所有条件预编译指令,比如"#if ","#endif","else","#elif". 注意#pragma pack(8)设置默认对齐数在这个阶段不会进行语法检查.

4注释的替换删除     将注释替换成了空格.

 

二.编译(生成 .s文件-->由汇编代码组成)

Linux命令(gcc -S test.i -o test.s)

1.语法检查

2.语法分析(生成语法树)

3.语义分析

4.符号汇总

 

三.汇编 (生成 .o文件->生成机器可识别代码  objcode 也称为目标文件)

linux命令(gcc  -c test.s  -o  test.o

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值