Har nogen brugt linken gold før? For at forbinde et ret stort projekt måtte jeg bruge dette i modsætning til GNU ld, som kastede et par fejl og ikke kunne linke.

Hvordan er gold linkeren er i stand til at linke store projekter, hvor ld mislykkes? Er der nogen form for hukommelsestriper et eller andet sted?

Kommentarer

  • Hvad var fejlene? Du ' er sandsynligvis løbet tør for hukommelse, og ld blev dræbt af OoM. ld kan let forbruge mange GBer ram på store C ++ projekter, mens gold og især lld linkere er meget mere ressourceeffektive.
  • ja ld oplevede en hukommelsesfejl, men guldlinkeren var i stand til at linke den

Svar

gold linker blev designet som en ELF-specifik linker, med den hensigt at producere en mere vedligeholdelig og hurtigere linker end BFD ld (den “traditionelle” GNU binutils linker). Som en bivirkning er det faktisk i stand til at linke meget store programmer ved hjælp af mindre hukommelse end BFD ld, formodentlig fordi der er færre abstraktionslag at håndtere, og fordi linkerens data strukturer kortlægges mere direkte til ELF-formatet.

Jeg er ikke sikker på, at der er meget dokumentation, der specifikt adresserer designforskellene mellem de to linkere og deres virkning på hukommelsesbrug. Der er en meget interessant artikelserie om linkere af Ian Lance Taylor, forfatteren af de forskellige GNU linkere, hvilket forklarer mange af designbeslutningerne, der fører op til gold. Han skriver at

Den linker, jeg arbejder nu, kaldet guld, om vilje være min tredje. Det er udelukkende en ELF-linker. Endnu en gang er målet hastighed, i dette tilfælde hurtigere end min anden linker. Denne linker er blevet væsentligt bremset gennem årene ved at tilføje support til ELF og til delte biblioteker. Denne understøttelse blev patched i stedet for at blive designet i.

(Den anden linker er BFD ld.)

Kommentarer

  • ville navnet ' guld ' kommer fra at læse ' ld ' som ' føre ', og guld er naturligvis mere værdifuldt end bly?
  • @Aganju Nej, det ' er bare go forud for ld.

Svar

guldlinker blev skrevet for at gøre linkprocessen betydeligt hurtigere. Ifølge guldforfatteren Ian Lance Taylor

I øjeblikket har guld kun en betydelig fordel i forhold til den eksisterende linker: den er hurtigere. På store C ++ – programmer har jeg målt det som at køre fem gange hurtigere.

Han sammenligner ydeevne med guldlinker med den traditionelle GNU-linker. guld (i modsætning til GNU linker) bruger ikke BFD-biblioteket til at behandle objektfiler.

Begrænsningen af guld er, at den (i modsætning til GNU linker, der kan behandle mange objektfiltyper) kun kan linke ELF-format objektfiler.

Med hensyn til de problemer, du står over for, når du bruger GNU linker, her er et interessant svar på et lignende spørgsmål på SO fra Michael Adam:

Guldlinkeren fandt endda nogle afhængighedsproblemer i vores kode, da det ser ud til at være mere korrekt end den klassiske med hensyn til nogle detaljer. Se f.eks. denne Samba-forpligtelse.

Svar

gold vs ld benchmark

Jeg har offentliggjort et konkret syntetisk benchmark for ld vs guld på: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

Resumé af resultater: guld var 2x til 3 gange hurtigere end ld.

Denne tidsforøgelse kan være en kæmpe spilskifter på komplekse C ++ – projekter med ude af kontrolskabeloner og kodegenerering, fordi linkstrinet involverer alle filer fra projektet, og i modsætning til kompilering skal det altid gøres, selvom du kun ændrer en enkelt .cpp-fil.

Så en langsom linktid gør udviklingscyklussen uudholdelig og er sandsynligvis hovedårsagen Google sank ressourcer ind i det. Forestil dig gevinsten ved at vente 10ere i stedet for 30ere for hver trivielle filændring.

Tidsgevinsterne for det syntetiske benchmark stemte også overens med de faktiske gevinster, jeg havde på et komplekst virkeligt verdensprojekt (gem5), som også nævnt i det svar.

Svar

Der er tre linkere tilgængelige på moderne GNU / Linux-systemer:

  • ld , vedligeholdt af GNU binutils,
  • guld , vedligeholdt af GNU binutils, “still in beta test”,
  • lld , udviklet som en del af LLVM-projektet.

For hastighedsbenchmarks, se: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld er hurtigst, efterfulgt af gold, efterfulgt af ld

Nogle kilder siger, at guldprojektet har været stagnerende , og pakkestrukturen i Fedora afspejler dette.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *