一.预处理
预处理阶段包括宏替换,去注释,头文件的展开和条件编译,其中条件编译非常具有实际意义。
.指令: gcc -E -o myfile.exe(预处理后,生成test.i文件)
.条件编译
由上图可知,有宏定义的V1,因此在此条件下编译生成并运行可执行程序后屏幕上仅打印出“功能1”,由此实现了代码的动态裁剪,这种方法就叫做条件编译有利于提高后期的维护效率。
当然,我们也可以输入gcc -D 指令进行条件编译:
二.编译
gcc -S file.name生成test.s文件,将C语言转化为汇编语言
三.汇编
gcc -c file.name 生成test.o文件,并且将汇编语言转化位二进制目标文件。
四.链接
链接是将我们写的程序与库结合起来,有利于提高开发效率
①动态链接
动态链接需要链接到系统下的动态链接库,这是一个共享库,实际上很多指令都是可执行程序,在编译时,编译器会传递目标库的地址,因此动态库的缺失,会导致很多程序无法执行。
这里的libc-2.28.so,就是一个c标准库 ,
注:可执行程序和库实际上都是加载到内存上,但由于动态库是共享的,只需加载一份,可以提高内存的利用率。
②静态链接
静态链接是把库中的方法直接拷贝到可执行程序中,只需要在编译时加上-stastic的后缀即可进行静态链接。