gcc -O 选项详解

  这个选项控制所有的优化等级。使用优化选项会使编译过程耗费更多的时间,并且占用更多的内存,尤其是在提高优化等级的时候。

  -O设置一共有五种:-O0、-O1、-O2、-O3和-Os。你只能在 /etc/make.conf 里面设置其中的一种。

  除了 -O0 以外,每一个 -O 设置都会多启用几个选项,请查阅gcc手册的优化选项章节,以便了解每个 -O 等级启用了哪些选项及它们有何作用。

  让我们来逐一考察各个优化等级:

  -O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是 CFLAGS 或 CXXFLAGS 中没有设置 -O 等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。

  -O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。

  -O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2 会比 -O1 启用多一些标记。设置了 -O2 后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。

  -O3:这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在 3.x,-O3 生成的代码也只是比 -O2 快一点点而已,而 gcc4.x 中还未必更快。用 -O3 来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。

  -Os:这个等级用来优化代码尺寸。其中启用了-O2中不会增加磁盘空间占用的代码生成选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。

  正如前面所提到的,-O2 是推荐的优化等级。如果编译软件出现错误,请先检查是否启用了 -O3。再试试把 CFLAGS 和 CXXFLAGS 倒回到较低的等级,如 -O1 甚或 -O0 -g2 -ggdb(用来报告错误和检查可能存在的问题),再重新编译。 

发表评论

电子邮件地址不会被公开。 必填项已用*标注