gcc是用来编译C语言代码的编译器,而g++是用来编译C++代码的编译器的。
而gcc和g++都是软件,需要使用yum进行下载
注:需要使用root权限才能下载
在C语言编译的过程中,会有四个过程:
1预处理,2编译,3汇编,4链接
预处理:从test.c开始,该代码文件会通过预处理后便停下来,形成test.i文件(头文件展开,去注释,宏替换,条件编译)。
编译:从test.i开始,该代码文件会转换成汇编语言,形成test.s文件。
汇编:从test.s开始,该代码文件会转换成计算机能读懂的二进制文件,形成test.o文件。
链接 :将多个test.o文件由链接起绑定在一起,形成单一的可执行程序,并且与C代码库中的函数一起。
Linux对.c文件分辨进行预处理,编译,汇编三大步指令:
gcc -E test.c -o test.i (预处理指令)
gcc -S test.i -o test.s (编译指令)
gcc -c test.s-o test.o (汇编指令)
第四个链接过程指令不需要写:
默认版的链接指令:gcc test.o
因为操作系统会默认从特定目录中找所需要的第三方库,若系统库中没有,则需要使用-l选项去链接:
完整版的链接指令:gcc test.o -l [第三方库]
预处理指令:
gcc -E test.c -o test.i (预处理指令)
预处理所做的工作就是:编译器将.c文件中的头文件从操作系统库中找出来,然后拷贝头文件的内容到一个.i文件中,相当于展开头文件;此外将定义好的宏,条件编译等指令带入代码中;将.c文件中的注释全都注释掉(计算机不需要知道你写的注释,没用!它只需要代码)
通过上图可知:.i文件的行数达到了近900行,百分之90多的内容全是展开的头文件的内容
编译指令:
gcc -S test.i -o test.s (编译指令)
这个过程所做的工作就是:编译器对代码进行语法,词法,语义的分析,将代码从C类型转换为高级汇编型语言。
汇编指令:
gcc -c test.s-o test.o (汇编指令)
该过程所做的工作就是将汇编代码转换为01二进制代码,直到这一步,计算机才能真正读懂我们的代码。
二进制内容对我们来说就是看不懂的乱码!
此时,虽然该文件已经能被计算机所读懂,但是还仍不能被运行,缺少了一步链接过程。
整体来说就是:test.c ---> test.i ---> test.s ---> test.o二进制文件