Hat jemand zuvor den Linker gold
verwendet? Um ein ziemlich großes Projekt zu verknüpfen, musste ich dies im Gegensatz zur GNU ld
verwenden, die einige Fehler verursachte und keine Verknüpfung herstellte.
Wie ist das? Der Linker gold
kann große Projekte verknüpfen, bei denen ld
fehlschlägt. Gibt es irgendwo eine Art Speicher-Trick?
Kommentare
- Was waren die Fehler? Sie ' haben wahrscheinlich keinen Speicher mehr und
ld
wurde von OoM getötet.ld
kann in großen C ++ – Projekten problemlos viele GB RAM verbrauchen, währendgold
und insbesonderelld
-Linker sind viel ressourceneffizienter. - yes
ld
hat einen Speicherfehler festgestellt, aber der Gold-Linker konnte ihn verknüpfen
Antwort
Der gold
-Linker wurde als ELF-spezifischer Linker entwickelt. mit der Absicht, einen wartbareren und schnelleren Linker als BFD ld
(den „traditionellen“ GNU-Binutils-Linker) herzustellen. Als Nebeneffekt ist es tatsächlich möglich, sehr große Programme mit weniger Speicher als BFD ld
zu verknüpfen, vermutlich weil weniger Abstraktionsebenen zu verarbeiten sind und weil die Daten des Linkers Strukturen werden direkter dem ELF-Format zugeordnet.
Ich bin nicht sicher, ob es viele Dokumentationen gibt, die speziell die Designunterschiede zwischen den beiden Linkern und ihre Auswirkungen auf die Speichernutzung behandeln. Es gibt eine sehr interessante Artikelserie über Linker von Ian Lance Taylor, dem Autor der verschiedenen GNU-Linker, die viele der Entwurfsentscheidungen erklärt, die zu gold
. Er schreibt , dass
der Linker, an dem ich gerade arbeite, Gold heißt sei mein dritter. Es ist ausschließlich ein ELF-Linker. Wieder einmal ist das Ziel Geschwindigkeit, in diesem Fall schneller als mein zweiter Linker. Dieser Linker wurde im Laufe der Jahre durch die Unterstützung von ELF und gemeinsam genutzten Bibliotheken erheblich verlangsamt. Diese Unterstützung wurde gepatcht und nicht entworfen.
(Der zweite Linker ist BFD ld
.)
Kommentare
- würde der Name ' gold ' kommen aus dem Lesen von ' ld ' als ' lead ' und Gold ist offensichtlich wertvoller als Blei?
- @Aganju Nein, es ist ' nur
go
vorld
.
Antwort
Die Gold Linker wurde geschrieben, um den Link-Prozess erheblich zu beschleunigen. Laut dem Goldautor Ian Lance Taylor
Im Moment hat Gold nur einen Ein wesentlicher Vorteil gegenüber dem vorhandenen Linker: Er ist schneller. Bei großen C ++ – Programmen habe ich gemessen, dass es fünfmal schneller läuft.
Er vergleicht die Leistung von Gold-Linkern mit dem herkömmlichen GNU-Linker. Gold verwendet (im Gegensatz zum GNU-Linker) die BFD-Bibliothek nicht zum Verarbeiten von Objektdateien.
Die Einschränkung von Gold besteht darin, dass es (im Gegensatz zum GNU-Linker, der viele Objektdateitypen verarbeiten kann) nur Objektdateien im ELF-Format verknüpfen kann.
In Bezug auf die Probleme, mit denen Sie bei der Verwendung von GNU konfrontiert waren Linker, hier ist eine interessante Antwort auf eine ähnliche Frage zu SO von Michael Adam:
Der Goldlinker hat sogar einige Abhängigkeitsprobleme in unserem Code gefunden, da er in einigen Details korrekter zu sein scheint als der klassische. Siehe z. dieses Samba-Commit.
Antwort
gold
vs ld
Benchmark
Ich habe einen konkreten synthetischen Benchmark von ld vs gold veröffentlicht unter: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263
Zusammenfassung von Ergebnisse: Gold war 2x bis 3x schneller als ld.
Dieser Zeitgewinn kann bei komplexen C ++ – Projekten mit außer Kontrolle geratenen Vorlagen und Codegenerierung eine große Veränderung bedeuten, da der Verknüpfungsschritt alle Dateien umfasst Im Gegensatz zum Kompilieren muss dies immer aus dem Projekt erfolgen, auch wenn Sie nur eine einzelne CPP-Datei ändern.
Eine langsame Verbindungszeit macht den Entwicklungszyklus unerträglich und ist wahrscheinlich der Hauptgrund Google hat Ressourcen darin versenkt. Stellen Sie sich vor, Sie müssen 10 statt 30 Sekunden auf jede triviale Dateiänderung warten.
Die Zeitgewinne des synthetischen Benchmarks stimmten auch mit den tatsächlichen Gewinnen überein, die ich bei einem komplexen realen Projekt (gem5) hatte, wie auch in dieser Antwort erwähnt.
Antwort
Auf modernen GNU / Linux-Systemen stehen drei Linker zur Verfügung:
- ld , gepflegt von GNU binutils,
- gold , gepflegt von GNU binutils, „noch im Beta-Test“,
- lld , entwickelt im Rahmen des LLVM-Projekts.
Geschwindigkeitsbenchmarks finden Sie unter: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld
ist am schnellsten, gefolgt von gold
, gefolgt von ld
Einige Quellen sagen, das Goldprojekt sei gewesen stagniert , und die Paketstruktur in Fedora spiegelt dies wider.