使用flto的要求

问题描述 投票:10回答:2

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

gcc -flto one.c two.c
gcc ld binutils lto gold-linker
2个回答
17
投票

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

尽管名称为“链接时间”,但LTO不需要使用任何特殊的链接器功能。所需的基本机制是检测目标文件中的GIMPLE部分。目前在collect2实施。因此,LTO将适用于GCC已经支持的任何链接器。

此外,GCC documentation-fuse-linker-plugin说:

默认情况下启用此选项时,启用GCC中的LTO支持并将GCC配置为与支持插件(GNU ld 2.21或更高版本或更高版本)的链接器一起使用。

所以你根本不需要gold,即使你想使用特殊的“链接器插件”功能从库档案中的目标文件中获取优化信息。


-flto documentation中有一些用法示例。或

      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会自动执行链接时优化。

GCC 5开始:

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


-1
投票

我在文档中找不到任何确认这一点的东西,但实验上LTO仅在启用某种级别的编译器优化时启用。因此,在命令行中添加-O,您将看到LTO的结果。

(我认为这就是为什么-O2-flto所有gcc手册页示例的一部分。)

© www.soinside.com 2019 - 2024. All rights reserved.