dromodel
dromodel

Reputation: 10193

How to get -flto to work?

I'm using GCC 4.7.2 and LD 2.23 but when I add -flto to my compile options my compile time increases by over 20%! The manual seems to indicate that -fuse-linker-plugin is needed for the optimization to work. It also says that it's enabled by default with -flto but when I add it explicitly I see the following error in the link command:

g++: error: -fuse-linker-plugin is not supported in this configuration

According to manual, it should be supported by LD 2.21 or greater. Any idea why I'm getting this error? For reference here are examples of my full compile commands:

g++ -Wall -pipe -O3 -flto -fno-strict-aliasing -mtune=generic --no-exceptions -fPIC -c some.cc
g++ -o exec -Xlinker some1.o some2.o -static some1.a some2.a -Wl,--wrap,open -flto -fuse-linker-plugin

Running 'ld --help | grep plugin' shows "-plugin" option so I don't understand why GCC is complaining:

-plugin PLUGIN              Load named plugin
-plugin-opt ARG             Send arg to last-loaded plugin

Upvotes: 4

Views: 5749

Answers (1)

Tomas Pruzina
Tomas Pruzina

Reputation: 8877

Link time optimizations aren't supposed to reduce compilation time, but optimize runtime of your program.

@options, just add "-flto -fuse-linker-plugin" to your CFLAGS(or CXXFLAGS for c++) and LDFLAGS and it should work just fine.

@gold: ld --version is probably gonna return gnu LD, to switch to gold, make ld symlink

 which ld 
point to
 which ld.gold 
e.g.
 ln -s /usr/bin/ld.gold /usr/bin/ld 

Upvotes: 4

Related Questions