C语言变成可执行程序的过程

一、预处理

1.头文件的展开
2.去掉注释
3.进行宏替换
4.条件编译

请添加图片描述

请添加图片描述

gcc -E test.c -o test.i		//生成.i文件

请添加图片描述

请添加图片描述

请添加图片描述

对比.c文件和.i文件。

二、编译

把我们的c语言代码转换成了相应的汇编代码。

请添加图片描述

gcc -S test.c -o test.s 	//生成.s文件

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

三、汇编

汇编变成了.o目标二进制文件,并且这个二进制不可以执行。

请添加图片描述

gcc -c test.c -o test.o 	//生成.o文件,注意一下这里 -c这里的c要是小写,如果是大写的话,生成的.o文件的权限不一样。
//大家也可以尝试一下,区别就是如果是大写的c的话,权限就变多了,就直接可以执行.o文件。

请添加图片描述

这是刚打开的时候。

请添加图片描述

请添加图片描述

这里可以通过od命令查一下里面的内容

请添加图片描述

请添加图片描述

这里的.obj文件就对应了上面的.o文件,这个文件是在自己存放代码的地方找到的。

四、链接

本质上是引入我们在代码中所使用到的第三方库,c语言库。
链接的时候gcc会根据文件,进行默认的链接(是由编译器和文件共同决定的)

请添加图片描述

gcc test.c -o mytest 	//这里的mytest是自己起的,这一步就是生成可执行程序。

请添加图片描述

请添加图片描述

./mytest  	//意思是执行当前文件下的可执行程序mytest,可以这样理解

这里链接的就是c语言库,可是口说无凭,接下来给大家说明。

请添加图片描述

红色箭头所指的是我要找的东西在哪一个文件下面。
蓝色箭头所指的是我要找的东西,libc-2.17.so
.so结尾的一般都叫做动态库
.a结尾的一般都叫做静态库
库名就是去掉lib以及.后面的东西,剩下的就是库名,所以就可以证明它是链接了c语言库。

请添加图片描述

这里的.exe文件就对应了上面的mytest文件。这是在自己存放代码的地方找到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值