1.GCC
GCC全称:**GNU编译器套件(GNU Compiler Collection)**包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。
2.编译四个阶段
编译目的是将源程序(文本)生成可执行的目标文件(二进制),其一般包括四个阶段:预处理—— >编译—— >汇编—— >链接。
hello.c
#include <stdio.h>
int main()
{
printf("hello\n");
return 0;
}
2.1预处理阶段
将头文件编译进来,还有完成宏的替换。可以通过指定gcc的-E选项来查看。
命令:unix : gcc -E hello.c -o hello.i
作用:将hello.c预处理并输出为hello.i
2.2编译阶段
这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可通过gcc的-S选项来查看,生成汇编代码。
命令: gcc -S hello.i -o hello.s
作用:将hello.i汇编成hello.s
2.3汇编阶段
这个阶段将汇编文件翻译成机器语言,生成二进制目标文件。可以使用-c选项,这个.o文件无法使用文本查看器来查看,因为它是二进制文件。
命令:gcc -c hello.s -o hello.o
作用:将hello.s转成hello