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ährend gold und insbesondere lld -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 vor ld.

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.