Alternativer Linker zu "ld"



  • Hallo,

    welche Linker gibt es noch für Windows? Ich kenne nur "ld", aber ld produziert immer so fette Dateien... was gibts für Alternativen?



  • Du musst den Linker auch freundlich behandeln. Schonmal --gc-sections probiert?



  • Kennt keinere weitere Linker?



  • Visual Studio hat natürlich auch einen Linker. Heißt "Link". Ob der mit GCCs Objektdateien kompatibel ist... wahrscheinlich nicht.



  • gold (nur elf)



  • welche Linker gibt es noch für Windows?

    gold (nur elf)

    Das war die Frage. Seit wann laufen ELF-Binaries unter Windows?



  • ist gold unter linux besser als ld?



  • alink,wlink,jwlink
    und beim llvm project gibt es auch einen linker, keine Ahnung ob der schon pe kann

    aaabbb schrieb:

    ist gold unter linux besser als ld?

    Das Ziel von Google ist, dass gold schneller ist und weniger Speicher verbraucht als ld. Gold ist für große C++ Anwendungen optimiert.
    Zuletzt hieß es das gold sehr viel schneller ist als ld.


  • Mod

    gary1195 schrieb:

    aaabbb schrieb:

    ist gold unter linux besser als ld?

    Das Ziel von Google ist, dass gold schneller ist und weniger Speicher verbraucht als ld. Gold ist für große C++ Anwendungen optimiert.
    Zuletzt hieß es das gold sehr viel schneller ist als ld.

    Klingt ja interessant. Wo ist der Haken? ld ist wohl kaum mit Absicht langsam, also muss gold irgendetwas grundlegend anders machen.

    Im Netz finde ich leider so gut wie überhaupt keine Informationen zu gold.



  • SeppJ schrieb:

    gary1195 schrieb:

    aaabbb schrieb:

    ist gold unter linux besser als ld?

    Das Ziel von Google ist, dass gold schneller ist und weniger Speicher verbraucht als ld. Gold ist für große C++ Anwendungen optimiert.
    Zuletzt hieß es das gold sehr viel schneller ist als ld.

    Klingt ja interessant. Wo ist der Haken? ld ist wohl kaum mit Absicht langsam, also muss gold irgendetwas grundlegend anders machen.

    Im Netz finde ich leider so gut wie überhaupt keine Informationen zu gold.

    Gold soll ld ersetzen(ist bereits Teil der binutils), ist selbst in C++ geschrieben und nutzt mehrere Threads um das Linken zu beschleunigen. Anscheinend unterstützt er aber noch nicht alle Linker-Scripte.
    Mehr weiß ich auch nicht.



  • SeppJ schrieb:

    ld ist wohl kaum mit Absicht langsam

    Doch. Um ein Symbol zu finden macht zum Beispiel eine lineare Suche über alle Symbole. Es geht hier nicht um irgend einen Mehrwert, sondern um algorithmische "Unachtsamkeit". Solange die Anzahl der Symbole überschaubar ist, kosten Hashtables und Threads mehr, als sie bringen.


  • Mod

    Du meinst, ld skaliert besser für kleine Projekte, gold für große? Das ist ein verständlicher, nachvollziehbarer Unterschied.



  • http://code.google.com/p/mclinker/wiki/RelatedWork

    gold ist einfach moderner. ld ist ein altes konstrukt dass keine Parallelisierung kennt. Moderne Maschinen, gerade wenn auf ihnen viel kompiliert wird, haben aber sehr viele Kerne - ergo profitieren sie sehr stark von Multithreading.

    Und genau das nützt gold aus.

    PS:
    das bedeutet gold ist in quasi jeder Situation deutlich schneller als ld.



  • Von welchen Zeitlichen unterschieden reden wir hier? Also mir ist es eigentlich egal, ob der Linkvorgang 2 sekunden oder 1,5 sekunden dauert.


  • Mod

    skeptiker schrieb:

    Von welchen Zeitlichen unterschieden reden wir hier? Also mir ist es eigentlich egal, ob der Linkvorgang 2 sekunden oder 1,5 sekunden dauert.

    Da steht ja extra dabei, dass das für große Projekte ist. Da selbst meine kleinen Programme die von dir beschriebenen paar Sekunden benötigen, mittelgroße selbstcompilierte OS Programme (zum Beispiel gnuplot) auch mal ein paar Minuten, dann extrapoliere ich mal, dass ein ld bei wirklich riesigen Projekten (bei Google zum Beispiel das hauseigene Chrome, das wohl kaum jemand selber bei sich Zuhause compiliert) auch ein paar Stunden dauern kann.



  • Linken muss man immer alles - egal ob man nun 1 objekt Datei geaendert hat oder alle. Deshalb ist schnelles linken schon sehr praktisch.



  • SeppJ schrieb:

    Im Netz finde ich leider so gut wie überhaupt keine Informationen zu gold.

    Ist auch nicht unbedingt als gesondertes Projekt mit User-Visibility zu sehen. Seit einigen Jahren kannst du die GNU Binutils aber schon mit Gold anstatt BFD ld als Standard-LD kompilieren. Wahrscheinlich hast du Gold (als Binary ld.gold) sogar bereits installiert.

    Vor einer Weile gab es mal Bestrebungen bei einigen Linux-Distributionen (z.B. Fedora) Gold zum Standardlinker zu machen. Ist aber eingeschlafen, anscheinend weil die Kompatibilitätsprobleme doch größer waren als erwartet.

    GCCGO, das GCC-Frontend für die Programmiersprache Go, setzt übrigens zwingend die Nutzung von Gold voraus. Benötigt wird dies zur Umsetzung der Split Stacks, die die Implementierungen der Sprache zur Realisierung der leichtgewichtigen "Goroutinen" (Thread-/Coroutinen-Äquivalent) verwenden.


Anmelden zum Antworten