编译链接的过程做了什么

一个.c文件变成可执行文件,一共经历了以下几个过程:

预编译,编译,汇编,链接。

预编译阶段(预编译之后生成.i文件)主要处理那些源代码文件中以“#”开始的预编译指令,例如#include,#define等。主要规则如下:

  • 1,删除所有的#define,展开所有的宏定义;
  • 2,处理所有的条件预编译指令,如#if,#ifdef,#elif,#else,#endif
  • 3,处理#include预编译指令,将被包含的文件插入到该预编译指令的位置(该过程是递归进行的);
  • 4,删除所有的注释(实际上是被替换为一个空格);
  • 5,添加行号和文件名标识;
  • 6,保留所有的#pragma编译器指令

编译过程(编译之后生成.s文件)将预处理完的文件进行一系列的词法分析,语法分析,语义分析以及优化产生相应的汇编代码文件。

汇编过程(汇编之后生成.o文件)将汇编代码转化成机器可以识别的指令;

链接过程的主要内容是把各个模块之间相互引用的部分都处理好,使得各个模块之间可以正常的拼接,包括以下三个部分:

  • 1,地址和空间的分配;
  • 2,符号决议;
  • 3,重定位;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值