gcc编译器是一个交叉平台编译器,可以为x86,ARM等不同体系结构的硬件平台编译程序,并且可以编译C,C++,Pascal,java等十数种高级语言。gcc编译程序时其过程可以被分为四个部分:预处理,编译,链接
预处理,gcc -E test.c -o text.i命令语句生成.i文件,-E参数是gcc只进行预编译。
编译,gcc -S text.i -o text.s命令语句生成.s文件,-S参数使gcc只进行编译。
汇编,gcc -c text,s -o text.o命令语句生成.o文件,-c参数 使gcc只进行汇编。
链接,gcc text.o -o text命令语句会生成一个text可执行文件。
除此之外,gcc还拥有多个选项,
-W 屏蔽所有的警告信息
-wall 显示所有类型的警告信息
-g 产生调试信息
-static 使用静态链接
-I 指定头文件第三方搜索路径
-D 定义外部宏
其中优化选项有-o1,-o2,-o3,-o0,分别是不同级别优化,其具体为,
-O1
优化.对于大函数,优化编译占用稍微多的时间和相当大的内存.
不使用`-O'选项时,编译器的目标是减少编译的开销,使编译结果能够调试.语句是独立的:如果在 两条语句之间用断点中止程序,你可以对任何变量重新赋值,或者在函数体内把程序计数器指到其他语句,以及从源程序中 精确地获取你期待的结果.
不使用`-O'选项时,只有声明了register的变量才分配使用寄存器.编译结果比不用 `-O'选项的PCC要略逊一筹.
使用了`-O'选项,编译器会试图减少目标码的大小和执行时间.
如果指定了`-O'选项, `-fthread-jumps'和`-fdefer-pop'选项将被 打开.在有delay slot的机器上, `-fdelayed-branch'选项将被打开.在即使没有帧指针 (frame pointer)也支持调试的机器上, `-fomit-frame-pointer'选项将被打开.某些机器上 还可能会打开其他选项.
-O2
多优化一些.除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作.例如不进行循环展开(loop unrolling)和函数内嵌(inlining).和-O选项比较,这个选项既增加了编译时间,也提高了生成代码的 运行效果.
-O3
优化的更多.除了打开-O2所做的一切,它还打开了-finline-functions选项.
-O0
不优化.