@TOC
序言
这个模块是C语言的的基础部分,放在现在说是害怕之前听不太懂,今天我们就仔细的看看一个文件是如何变成一个可执行程序的
程序编译
一个代码要变成可执行程序要经过以下若干步骤,我先列出来,在Linux的环境下给大家演示,有些命令看不太懂没有关系,就看文件的变化就可以了
-
预处理
-
编译
-
汇编
- 链接
代码准备
#include <stdio.h>
#define M 10
int main()
{
printf("%d\n",M);
return 0;
}
预处理(预编译)
gcc -E test.c -o test.i
这里是将#include<stdio.h>等库展开,将宏定义替换好
作用
- 展开库
- 替换宏
我们打开test.i看看
看看,代码一下子变成了800多行,这是库函数的展开,并且我们看到宏M已经被替换成了10,此时仍旧是C语言代码
编译
gcc -S test.i -o test.s
作用
- 将C语言编译成汇编代码
汇编
gcc -c test.s -o test.o
作用
- 将汇编语言变成二进制
链接
这里我没办法具体演示,就说一下吧,我们在代码中使用了printf函数,这里链接的便是printf函数,存在printf.o中
拓展
要是有兴趣学习Linux中多文件编译,可以看看这个博客
Linux下多文件编译运行