Har någon använt länken gold
tidigare? För att länka ett ganska stort projekt var jag tvungen att använda detta i motsats till GNU ld
, som kastade upp några fel och misslyckades med att länka.
Hur är det gold
länkaren kan länka stora projekt där ld
misslyckas? Finns det någon form av minnesfel någonstans?
Kommentarer
Svar
gold
-länkar designades som en ELF-specifik länkare, i avsikt att producera en mer underhållbar och snabbare länkare än BFD ld
(den ”traditionella” GNU binutils-länken). Som en bieffekt är det verkligen möjligt att länka mycket stora program som använder mindre minne än BFD ld
, förmodligen för att det finns färre lager av abstraktion att hantera, och eftersom länkarens data strukturer kartläggs mer direkt till ELF-formatet.
Jag är inte säker på att det finns mycket dokumentation som specifikt tar upp designskillnaderna mellan de två länkarna och deras inverkan på minnesanvändningen. Det finns en väldigt intressant artikelserie om länkar av Ian Lance Taylor, författaren till de olika GNU-länkarna, vilket förklarar många av designbesluten fram till gold
. Han skriver att
Den länkare som jag arbetar nu, kallad guld, på kommer att bli min tredje. Det är uteslutande en ELF-länkare. Återigen är målet hastighet, i det här fallet snabbare än min andra länkare. Den länken har saktat ner under åren genom att lägga till stöd för ELF och för delade bibliotek. Detta stöd lappades in snarare än att utformas i.
(Den andra länkaren är BFD ld
.)
Kommentarer
- skulle namnet ' guld ' kommer från att läsa ' ld ' som ' bly ', och guld är uppenbarligen mer värdefullt än bly?
- @Aganju Nej, det ' är bara
go
prefix tillld
.
Svar
guldlänkare skrevs för att göra länkprocessen betydligt snabbare. Enligt guldförfattaren Ian Lance Taylor
För närvarande har guld bara en betydande fördel jämfört med den befintliga länken: den är snabbare. På stora C ++ – program har jag mätt att det körs fem gånger snabbare.
Han jämför guldlänkarprestanda med den traditionella GNU-länken. guld (till skillnad från GNU-länkaren) använder inte BFD-biblioteket för att bearbeta objektfiler.
Begränsningen av guld är att den (till skillnad från GNU-länkar som kan bearbeta många objektfiltyper) bara kan länka ELF-formatfiler.
När det gäller de problem du möter när du använder GNU linker, här är ett intressant svar på en liknande fråga på SO från Michael Adam:
Guldlänkaren hittade till och med några beroendeproblem i vår kod, eftersom den verkar vara mer korrekt än den klassiska med avseende på vissa detaljer. Se t.ex. detta Samba-åtagande.
Svar
gold
vs ld
riktmärke
Jag har publicerat ett konkret syntetiskt riktmärke för ld vs guld på: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263
Sammanfattning av resultat: guld var 2x till 3 gånger snabbare än ld.
Denna tidsförstärkning kan vara en enorm spelväxlare på komplexa C ++ – projekt med out-of-control mallar och kodgenerering, eftersom länksteget involverar alla filer från projektet, och till skillnad från kompilering, måste det göras alltid, även om du bara ändrar en enda .cpp-fil.
Så en långsam länktid gör utvecklingscykeln outhärdlig och är sannolikt huvudorsaken Google sänkte resurser i det. Tänk dig vinsten med att vänta 10-talet istället för 30-talet för varje trivial filändring.
Tidsvinsterna för det syntetiska riktmärket överensstämde också med de faktiska vinsterna jag hade på ett komplext verkligt världsprojekt (gem5), som också nämnts i det svaret.
Svar
Det finns tre länkar tillgängliga på moderna GNU / Linux-system:
- ld , underhålls av GNU binutils,
- guld , underhålls av GNU binutils, ”still in beta test”,
- lld , utvecklat som en del av LLVM-projektet.
För hastighetsriktmärken, se: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld
är snabbast, följt av gold
, följt av ld
Vissa källor säger att guldprojektet har varit stagnerar , och paketstrukturen i Fedora återspeglar detta.
ld
dödades av OoM.ld
kan lätt konsumera många GB RAM på stora C ++ – projekt, medangold
och särskiltlld
linkers är mycket mer resurseffektiva.ld
upplevde ett minnesfel, men guldlänkaren kunde länka det