gcc编译器的四个过程:
预处理:头文件展开,对源程序中的伪指令和特殊符号进行处理(宏定义指令,条件编译指令,头文件包含指令)(.i文件)
gcc -E hello.c -o hello.i
编译:将源程序转化为计算机可以执行的二进制代码(.s文件)
gcc -S hello.i -o hello.s
汇编:将汇编语言翻译成机器语言(.o文件)
gcc -c hello.s -o hello.o
链接:将目标文件和各库函数进行连接,得到一个可执行的二进制文件。
gcc hello.s -o hello
gcc编译器的三级优化:-o1,-o2,-o3
-o1:编译会尝试减少代码体积和代码运行时间。但是并不执行会花费大量时间的优化操作。在该模式下将打开一些优化选项.
-o2:进一步优化.GCC执行几乎所有支持的操作但不包括空间和速度之间权衡的优化。与-O1比较该优化-O2将会花费更多的编译时间当然也会生成性能更好的代码。-O2优化等级下,并不执行循环展开和函数“内联”优化操作。
-o3:更进一步优化。-O3打开-O2指定的所有优化操作并且打开:-finline-functions -funswitch-loops -fgcse-after-reload
编译器静态编译:-static
在支持动态连接(dynamic linking)的系统上,阻止连接共享库.即禁止调用动态库,该选项在其他系统上无效.完全编译出的东西比较大。
把所有都需要的函数库都集成进编译出来的程序上,这个程序就可以不依赖外部的函数库运行了。