13

如果我想编译我的项目,-flto构建 gcc 是否足够,--enable-gold或者我还需要构建 gold 并用它替换 ld?我还需要其他标志吗?即我正在这样做

gcc -flto one.c two.c
4

1 回答 1

19

根据https://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements

尽管有“链接时间”的名称,LTO不需要使用任何特殊的链接器功能。所需的基本机制是检测目标文件中的 GIMPLE 部分。这目前在collect2. 因此,LTO 可以在 GCC 已经支持的任何链接器上工作。

此外,GCC文档-fuse-linker-plugin说:

当 GCC 中的 LTO 支持被启用并且 GCC 被配置为与支持插件(GNU ld 2.21 或更新版本或黄金)的链接器一起使用时,此选项默认启用。

gold因此,即使您想使用特殊的“链接器插件”功能从库档案中的目标文件中获取优化信息,您也完全不需要。


-flto文档中有使用示例。任何一个

      gcc -o myprog -flto -O2 foo.c bar.c

或者

      gcc -c -O2 -flto foo.c
      gcc -c -O2 -flto bar.c
      gcc -o myprog -flto -O2 foo.o bar.o

将工作。


GCC 4.9开始,您甚至不需要-flto链接:

唯一需要记住的重要一点是,要启用链接时优化,您需要使用 GCC 驱动程序来执行链接步骤。如果涉及的任何对象是用-flto.

GCC 5开始:

与早期的 GCC 版本相反,链接命令行上传递的优化和目标选项被忽略。

于 2015-07-28T22:38:25.283 回答