在 GCC 命令中使用两个或多个优化选项
Using two or more optimize option with GCC command
我正在尝试从源代码编译开源组件。我正在使用 gcc
命令编译该组件中的所有 C 文件。
当我按顺序 -O2 -Os
传递选项时,二进制文件只有几 KB。但是当我按顺序传递选项时 -Os -O2
二进制大小很大。
我知道在 gcc
命令中包含子目录或链接库时顺序很重要。
为什么顺序对 gcc
命令的优化参数很重要?
我正在使用 gcc 版本 4.9.1。
因为它只是使用它看到的最后一个1选项。
1.来自手册页:如果您使用多个 -O 选项,有或没有级别编号,最后一个这样的选项是有效的。
来自 GCC man page:
If you use multiple -O
options, with or without level numbers, the last such option is the one that is effective.
您不能在命令行中组合使用 -O2
和 -Os
。
但这里是 -Os
的描述:
Optimize for size. -Os
enables all -O2
optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size.
看起来 -Os
已经在做你想做的事了。
我正在尝试从源代码编译开源组件。我正在使用 gcc
命令编译该组件中的所有 C 文件。
当我按顺序 -O2 -Os
传递选项时,二进制文件只有几 KB。但是当我按顺序传递选项时 -Os -O2
二进制大小很大。
我知道在 gcc
命令中包含子目录或链接库时顺序很重要。
为什么顺序对 gcc
命令的优化参数很重要?
我正在使用 gcc 版本 4.9.1。
因为它只是使用它看到的最后一个1选项。
1.来自手册页:如果您使用多个 -O 选项,有或没有级别编号,最后一个这样的选项是有效的。
来自 GCC man page:
If you use multiple
-O
options, with or without level numbers, the last such option is the one that is effective.
您不能在命令行中组合使用 -O2
和 -Os
。
但这里是 -Os
的描述:
Optimize for size.
-Os
enables all-O2
optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size.
看起来 -Os
已经在做你想做的事了。