如果我想编译我的项目,-flto
构建 gcc 是否足够,--enable-gold
或者我还需要构建 gold 并用它替换 ld?我还需要其他标志吗?即我正在这样做
gcc -flto one.c two.c
如果我想编译我的项目,-flto
构建 gcc 是否足够,--enable-gold
或者我还需要构建 gold 并用它替换 ld?我还需要其他标志吗?即我正在这样做
gcc -flto one.c two.c
根据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 版本相反,链接命令行上传递的优化和目标选项被忽略。