Gcc 使用flto的要求
如果我想用Gcc 使用flto的要求,gcc,ld,binutils,lto,gold-linker,Gcc,Ld,Binutils,Lto,Gold Linker,如果我想用-flto编译我的项目,用-enable gold构建gcc就足够了,还是我还需要构建gold并用它替换ld?我还需要其他旗帜吗?我正在这样做 gcc -flto one.c two.c 根据, 尽管有“链接时间”名称,LTO不需要使用任何特殊的链接器功能。所需的基本机制是检测对象文件中的GIMPLE部分。这目前在collect2中实现。因此,LTO将在GCC已经支持的任何链接器上工作 此外,for-fuse链接器插件说明: 当GCC中的LTO支持被启用,并且GCC被配置为与支持插件
-flto
编译我的项目,用-enable gold
构建gcc就足够了,还是我还需要构建gold并用它替换ld?我还需要其他旗帜吗?我正在这样做
gcc -flto one.c two.c
根据,
尽管有“链接时间”名称,LTO不需要使用任何特殊的链接器功能。所需的基本机制是检测对象文件中的GIMPLE部分。这目前在collect2
中实现。因此,LTO将在GCC已经支持的任何链接器上工作
此外,for-fuse链接器插件
说明:
当GCC中的LTO支持被启用,并且GCC被配置为与支持插件的链接器(GNU ld 2.21或更新版本或gold)一起使用时,默认情况下会启用此选项
因此,您根本不需要gold
,即使您想使用特殊的“链接器插件”功能从库档案中的目标文件中获取优化信息
中有一些用法示例。或者 或 会有用的
截至,您甚至不需要
-flto
来链接:
要记住的唯一重要一点是,要启用链接时间优化,您需要使用GCC驱动程序来执行链接步骤。然后,如果涉及的任何对象是使用-flto
编译的,GCC将自动执行链接时间优化
截至:
与早期的GCC版本相反,在link命令行上传递的优化和目标选项被忽略
我使用的是LD2.24,它说
-plugin
是一个无法识别的选项。另外,使用上一个示例,如果我将-flto
从最后一个阶段退出,则生成的可执行文件的MD5和与-flto
相同。您从哪里获得-plugin
?您使用的是哪个版本的gcc?我认为有必要拥有支持插件的ld
,我通过做ld-plugin
来测试它。从阅读更多的gcc
文档来看,如果编译是使用-flto
完成的,并且链接阶段使用了gcc
,那么链接时间优化还是完成了。gcc版本6.0.0 20150529(实验)(gcc)
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