Har noen brukt linken gold før? For å koble et ganske stort prosjekt, måtte jeg bruke dette i motsetning til GNU ld, som kastet opp noen feil og ikke klarte å koble til.

Hvordan er gold linkeren som kan koble store prosjekter der ld mislykkes? Er det noe slags minneplager et sted?

Kommentarer

  • Hva var feilene? Du ' har sannsynligvis gått tom for minne og ld ble drept av OoM. ld kan lett forbruke mange GB ram på store C ++ -prosjekter, mens gold og spesielt lld linkers er mye mer ressurseffektive.
  • ja ld opplevde en feil på minnet, men gulllinkeren klarte å koble den

Svar

gold linker ble designet som en ELF-spesifikk linker, med den hensikt å produsere en mer vedlikeholdbar og raskere linker enn BFD ld (den «tradisjonelle» GNU binutils linker). Som en bivirkning er den faktisk i stand til å koble til veldig store programmer som bruker mindre minne enn BFD ld, antagelig fordi det er færre lag med abstraksjon å håndtere, og fordi linkerens data strukturer kartlegges mer direkte til ELF-formatet.

Jeg er ikke sikker på at det er mye dokumentasjon som spesifikt adresserer designforskjellene mellom de to linkerne, og deres effekt på minnebruk. Det er en veldig interessant artikkelserie om lenker av Ian Lance Taylor, forfatteren av de forskjellige GNU-linkerne, som forklarer mange av designbeslutningene som fører frem til gold. Han skriver at

Linkeren jeg nå jobber, kalt gull, på vilje være min tredje. Det er utelukkende en ELF-linker. Nok en gang er målet fart, i dette tilfellet å være raskere enn min andre linker. Denne linkeren har blitt betydelig redusert gjennom årene ved å legge til støtte for ELF og for delte biblioteker. Denne støtten ble lappet i stedet for å være designet i.

(Den andre lenken er BFD ld.)

Kommentarer

  • ville navnet ' gull ' kommer fra å lese ' ld ' som ' føre ', og gull er åpenbart mer verdifullt enn bly?
  • @Aganju Nei, det ' er bare go prefikset til ld.

Svar

gulllinker ble skrevet for å gjøre koblingsprosessen betydelig raskere. I følge gullforfatteren Ian Lance Taylor

For øyeblikket har gull bare en betydelig fordel over den eksisterende koblingen: den er raskere. På store C ++ -programmer har jeg målt det som å kjøre fem ganger raskere.

Han sammenligner ytelse med gulllinker med den tradisjonelle GNU-linkeren. gull (i motsetning til GNU linker) bruker ikke BFD-biblioteket til å behandle objektfiler.

Begrensningen av gull er at den (i motsetning til GNU linker som kan behandle mange objektfiltyper) bare kan koble ELF-format objektfiler.

Når det gjelder problemene du møtte når du bruker GNU linker, her er et interessant svar på et lignende spørsmål på SO fra Michael Adam:

Gulllinkeren fant til og med noen avhengighetsproblemer i koden vår, siden den ser ut til å være mer korrekt enn den klassiske med hensyn til noen detaljer. Se f.eks. denne Samba-forpliktelsen.

Svar

gold vs ld referanseindeks

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

Sammendrag av resultater: gull var 2x til 3 ganger raskere enn ld.

Denne tidsgevinsten kan være en enorm spillveksler på komplekse C ++ -prosjekter med ut-av-kontroll maler og kodegenerering, fordi koblingstrinnet involverer alle filer fra prosjektet, og i motsetning til kompilering, må det gjøres alltid, selv om du bare endrer en enkelt .cpp-fil.

Så en langsom koblingstid gjør utviklingssyklusen uutholdelig, og er sannsynligvis hovedårsaken Google sank ressurser i det. Tenk deg gevinsten ved å vente 10-tallet i stedet for 30-tallet for hver trivielle filendring.

Tidsgevinstene for den syntetiske referanseindeksen stemte også overens med faktiske gevinster jeg hadde på et komplekst virkelige verdensprosjekt (gem5), som også nevnt i det svaret.

Svar

Det er tre lenker tilgjengelig på moderne GNU / Linux-systemer:

  • ld , vedlikeholdt av GNU binutils,
  • gull , vedlikeholdt av GNU binutils, «still in beta test»,
  • lld , utviklet som en del av LLVM-prosjektet.

For hastighetsmål, se: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld er raskest, etterfulgt av gold, etterfulgt av ld

Noen kilder sier at gullprosjektet har vært stagnerer , og pakkestrukturen i Fedora gjenspeiler dette.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *