程序的预处理

前言: 每一个编译的 .c 文件,到可执行的obj文件,都会经历一系列的操作,使计算机运行程序;

下图所示: 一个 c文件转换到exe文件再到obj文件,其中c文件转换到exe文件需要翻译环境的编译器进行预编译,编译,汇编和连接器进行链接四步操作,得到exe,具体过程如下:

左图表示c文件经过预编译, 编译,汇编的过程,add ,main为全局变量,add为外部函数,因此出
现两次,合并之后使用有效 地址的add,test文件中的 add为无效地址,不使用。

预编译阶段 (test.c -E > tese.i) : 1.C文件所包含的头文件会完成包含 2.#define定义的符号和宏会完成替换 3.注释删除

编译阶段(tese.i -S >test.s ): C语言的代码转化成汇编代码, 进行语法分析,词法分析,语义分析,符号汇总

汇编阶段(test.s - C > test.o(test.obj) ): 生成符号表 ,将汇编代码转换为机器指令(二进制指令), 文件变为test.o (elf格式) 可以使用readelf工具阅读文件。

链接阶段: 将多个目标文件和连接库进行链接 将每个文件的段表合并,以及符号表的合并和重定位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值