一、预处理
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文件。这是在自己存放代码的地方找到的。