使用flto的要求

che*_*cks 11 gcc ld binutils lto gold-linker

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

gcc -flto one.c two.c
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 18

根据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
Run Code Online (Sandbox Code Playgroud)

要么

      gcc -c -O2 -flto foo.c
      gcc -c -O2 -flto bar.c
      gcc -o myprog -flto -O2 foo.o bar.o
Run Code Online (Sandbox Code Playgroud)

将工作.


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

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

GCC 5开始:

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