这是一个再简单不过的C语言程序:
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
执行gcc test.c,就使一个源文件变成了可执行文件,这个步骤我们很熟悉,但是从一个源文件(.c文件)到可执行程序到底经历了哪几步,每一步具体做了什么,这是我想要总结一下的:
一:预处理
使用-E选项:gcc -o test.i -E test.c
预处理阶段主要做了处理“#”的过程:有头文件展开,宏替换,条件编译,去掉注释等。
二:编译
使用-S选项:gcc -o test.s -S test.c
编译阶段将高级语言翻译成机器语言,生成对应的汇编代码。
三:汇编
使用-c选项:gcc -o test.o -c test.c
汇编阶段主要将源文件翻译成二进制文件。
四:链接
链接过程主要将翻译成的二进制文件与需要用到的库链接。
gcc的这三个选项不太好记,我有一个窍门,就是ESc,刚好就是键盘上的esc键,这样就很快记住了,而三个选项对应的命名风格,为iso。