什么是GCC? 最简单的回答就是Linux 下的C/C++ 编译器。
其实一开始的确是这样的,GCC 原名为GUN C 语言编译器( GNU C Compiler), 原本只能处理编译C语言。
但是后来GCC发展壮大了,可以编译C++, Fortran,Pascal,Objective-C, Java,Ada,Go以及各类处理器构架上的汇编语言,
后来它就改名叫GNU 编译器套件(GNU Compiler Collection), 虽然改了名,但是简称还是GCC,这就是现在的GCC了。
归纳下:GCC 是一个编译器套件,可以编译好多种语言。
我这里主要就是学习GCC 编译器种的一种,对C/C++ 代码的编译。
一般Linux 操作系统默认都安装了GCC。打开终端窗口输入: gcc -v 就可查看GCC编译器套件的信息。
先写个Hello World 出来,创建一个hello.c 文件,内容如下
#include<stdio.h>
int main(void){
printf("Hello, GCC!\n");
return 0;
}
编译命令为: gcc hello.c -o hello (也可以简写为 gcc hello.c)
编译成功后,就会生成一个可执行的文件hello
终端里面输入命令:./hello 即可以看到执行的结果了("Hello, GCC!")。
2: 编译hello.c ,就只用了一条命令,但实际上,看似很简单的这一步操作,却隐藏了he你多操心细节。GCC的编译过程是相当复杂的。
gcc hello.c -o hello 这一条命令,就干了上面那多事。如果不嫌麻烦,我们也可以一步一步来编译。
1:预处理。 命令:gcc -E hello.c -o hello.i 即可得到 预处理后的文件hello.i (其实还是C代码文件), 有兴趣的可以用 cat hello.i 看看里面内容。
2:编译。命令:gcc -S hello.i 就是把上面的hello.i 文件,编译为汇编语言。懂ASM的人,可以去看。
3:汇编。命令:gcc -c hello.s 。把hello.i 这个汇编文件编译成机器码,将会得到hello.o 文件。
4: 链接。命令:gcc hello.o 尽管3得到了机器码,但是文件却还是不可以运行,必须要经过链接才能运行。
总结下: 预处理就是预处理就是处理引入的头文件,定义的宏等。 “编译”就是把C/C++代码编译成汇编语言。“汇编”就是把汇编代码编译成机器码。最后“链接”生成可以执行的机器码。