【发布时间】:2013-03-14 11:21:12
【问题描述】:
我正在阅读:
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
它首先表明:
不应使用此选项 (-fwhole-program) 与 -flto 结合使用。相反,依赖链接器插件应该提供更安全、更精确的信息。
然后,它建议:
如果程序不需要导出任何符号,则可以结合 -flto 和 -fwhole-program 以允许过程间优化器使用更积极的假设,从而提高优化机会。当链接器插件处于活动状态时,不需要使用-fwhole-program(参见-fuse-linker-plugin)。
这是否意味着理论上,使用-fuse-linker-plugin 和-flto 总是比使用-fwhole-program 和-flto 获得更好的优化可执行文件?
我尝试使用ld分别链接-fuse-linker-plugin和-fwhole-program,至少可执行文件的大小不同。
附:我在 CentOS 6 上使用 gcc 4.6.2 和 ld 2.21.53.0.1。
【问题讨论】:
-
fwiw,按照您的报价 - “链接器插件处于活动状态时不需要使用 -fwhole-program(请参阅 -fuse-linker-plugin)。” - 我们稍后会在文档中看到 - “当 GCC 中的 LTO 支持启用并且 GCC 配置为与支持插件的链接器一起使用(GNU ld 2.21 或更新版本或黄金)时,默认启用此选项 [
-fuse-linker-plugin] ." - 所以我猜这涵盖了最合理的现代 gcc 安装。这意味着他们有一个默认选项,使-fwhole-program变得不必要。但这只是我对这一切的解释! -
@underscore_d 太好了!现在,我们如何关闭该死的东西?! (我的意思是 fuse-linker-plugin。)请参阅:stackoverflow.com/questions/68582122/…