Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 使用flto的要求_Gcc_Ld_Binutils_Lto_Gold Linker - Fatal编程技术网

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