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.
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'. –
Woher bekommst du '-Plugin'? – melpomene
@chewsocks Welche Version von gcc verwendest du? – melpomene