GCC 优化标志

Posted

技术标签:

【中文标题】GCC 优化标志【英文标题】:GCC Optimization Flags 【发布时间】:2013-12-08 23:05:49 【问题描述】:

我正在尝试将一堆具有不同优化的可执行文件放在一起。我唯一的问题是,带有 -c 的 gcc 命令也应该能够使用 -O 标志吗? 我问这个,因为我意识到当我只在 gcc 命令中放置优化标志来制作 exe 时,文件之间的大小根本没有区别,这似乎不正确。

例如,我有这样的事情:

g++ -c cat.cpp 
g++ -c dog.cpp        
g++ cat.o dog.o -o catdog

我会在这样的所有东西上使用标志吗:

g++ -c -O2 sobol.cpp
g++ -c -O2 sobol_prb.cpp        
g++ sobol.o sobol_prb.o -O2 -o catdog02

如果有人可以帮助我,我将不胜感激。

谢谢。

【问题讨论】:

【参考方案1】:

你可以这样做:

  g++ sobol.cpp sobol_prb.cpp -O2 -o catdog02

如果你需要编译超过 2 或 3 个文件,你应该考虑 Makefile。

如果您正在处理一个重要的项目,您应该开始考虑 @polkadotcadaver 建议的构建系统,尽管我会选择 automake 或 cmake,因为它们比其他构建系统更受欢迎。

【讨论】:

【参考方案2】:

是的,在每个对象编译时使用优化标志。

(一般来说,使用像 SCons 这样的构建系统可以让这种事情变得更容易,即使它是一个“小”项目。)

【讨论】:

【参考方案3】:

当您对对象 (.o) 文件执行 gcc 时,这基本上只是调用链接器并选择适当的库等等。在通常模式下,此步骤不涉及编译,优化标志将不起作用。

优化发生在编译步骤(带有 .cpp 输入的那个),这就是优化开关的相关之处。

链接时间优化 (-flto) 有点不同,在编译和链接时需要使用优化开关。

【讨论】:

以上是关于GCC 优化标志的主要内容,如果未能解决你的问题,请参考以下文章

不可见的 GCC 优化标志?

嵌入式 GCC 优化魔法

O2 中导致未定义符号的 gcc 优化标志

不要在 GCC 中使用 -O3 标志优化特定循环 [关闭]

如何查看 gcc 优化选项?

GCC优化内存访问[重复]