Requirements to use flto

笑着哭i 提交于 2019-11-29 09:31:26

According to https://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements,

Despite the "link time" name, LTO does not need to use any special linker features. The basic mechanism needed is the detection of GIMPLE sections inside object files. This is currently implemented in collect2. Therefore, LTO will work on any linker already supported by GCC.

Furthermore, the GCC documentation for -fuse-linker-plugin says:

This option is enabled by default when LTO support in GCC is enabled and GCC was configured for use with a linker supporting plugins (GNU ld 2.21 or newer or gold).

So you don't need gold at all, even if you want to use the special "linker plugin" feature to pick up optimization information from object files in library archives.


There are usage examples in the -flto documentation. Either

      gcc -o myprog -flto -O2 foo.c bar.c

or

      gcc -c -O2 -flto foo.c
      gcc -c -O2 -flto bar.c
      gcc -o myprog -flto -O2 foo.o bar.o

will work.


As of GCC 4.9, you don't even need -flto for linking:

The only important thing to keep in mind is that to enable link-time optimizations you need to use the GCC driver to perform the link-step. GCC then automatically performs link-time optimization if any of the objects involved were compiled with the -flto.

And as of GCC 5:

Contrary to earlier GCC releases, the optimization and target options passed on the link command line are ignored.

I can't find anything in the docs to confirm this, but experimentally LTO is only enabled if some level of compiler optimization is on. So add -O to the command line and you will see results of LTO.

(I think this is why -O2 is part of all the gcc man page examples for -flto.)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!