2015-07-28 17 views
5

Wenn ich mein Projekt mit -flto kompilieren will, ist es genug, gcc mit --enable-gold gebaut zu haben oder muss ich auch Gold bauen und ld damit ersetzen? Und brauche ich noch andere Flaggen? Dh ich bin diesenAnforderungen zu verwenden flto

gcc -flto one.c two.c 

Antwort

7

Nach https://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements tun,

Trotz des "Link Zeit" namen, LTO nicht benötigt keine speziellen Linker Funktionen nicht zu nutzen. Der grundlegende Mechanismus, der benötigt wird, ist die Erkennung von GIMPLE-Abschnitten in Objektdateien. Dies wird derzeit in collect2 implementiert. Daher wird LTO an jedem Linker arbeiten, der bereits von GCC unterstützt wird.

Darüber hinaus ist die GCC documentation für -fuse-linker-plugin sagt:

Diese Option ist standardmäßig aktiviert, wenn Unterstützung LTO in GCC aktiviert und wurde GCC für die Verwendung mit einem Linker unterstützt Plugins (GNU ld 2.21 oder höher konfiguriert oder Gold).

So brauchen Sie nicht gold überhaupt, auch wenn Sie die spezielle „Linker-Plugin“ -Funktion zu holen Optimierungsinformationen von Objektdateien in der Bibliothek Archive verwenden möchten.


Es gibt Verwendungsbeispiele in der -flto documentation. Entweder

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

oder

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

arbeiten.


Ab GCC 4.9, Sie auch nicht -flto benötigen für die Verknüpfung:

Die einzige wichtige Sache im Auge zu behalten ist, dass Link-Zeitoptimierungen Sie die GCC-Treiber verwenden müssen, damit um den Verbindungsschritt auszuführen. GCC führt dann automatisch eine Optimierung der Verbindungszeit durch, wenn eines der beteiligten Objekte mit der -flto kompiliert wurde.

Und von GCC 5:

Im Gegensatz zu früheren GCC Versionen ignoriert werden die Optimierung und Zieloptionen auf der Link Befehlszeile übergeben.

+1

Ich benutze ld 2.24 und es sagt, dass '-plugin' eine nicht erkannte Option ist. Wenn ich das letzte Beispiel benutze, wenn ich '-flto' von der letzten Stufe weglasse, ist die md5sum der resultierenden ausführbaren Datei dieselbe wie bei '-flto'. –

+0

Woher bekommst du '-Plugin'? – melpomene

+0

@chewsocks Welche Version von gcc verwendest du? – melpomene