Onko kukaan käyttänyt linkkiä gold
aiemmin? Liittääkseen melko suuren projektin minun piti käyttää tätä toisin kuin GNU ld
, joka heitti muutamia virheitä ja epäonnistui linkittämisessä.
Kuinka on gold
-linkkijärjestelmä pystyy linkittämään suuria projekteja, joissa ld
epäonnistuu? Onko jossain jonkinlainen muistin temppu?
Kommentit
vastaus
gold
-linkkijärjestelmä on suunniteltu ELF-spesifiseksi linkkeriksi, tarkoituksena tuottaa ylläpidettävämpi ja nopeampi linkkeri kuin BFD ld
(”perinteinen” GNU-binutils-linkkeri). Sivuvaikutuksena se pystyy todellakin linkittämään erittäin suuria ohjelmia, jotka käyttävät vähemmän muistia kuin BFD ld
, oletettavasti siksi, että käsiteltäviä abstraktiokerroksia on vähemmän, ja koska linkittimen tiedot rakenteet kartoittavat suoraan ELF-muotoon.
En ole varma, onko olemassa paljon asiakirjoja, jotka käsittelisivät erityisesti kahden linkin välisiä suunnittelueroja ja niiden vaikutusta muistin käyttöön. On olemassa erittäin mielenkiintoinen linkkereitä käsittelevä artikkelisarja , jonka on kirjoittanut Ian Lance Taylor, erilaisten GNU-linkkien kirjoittaja, joka selittää monia suunnittelupäätöksiä, jotka johtavat gold
. Hän kirjoittaa , että
Linkkeri, jota työskentelen, nimeltään kulta, tahtoon ole kolmas. Se on yksinomaan ELF-linkkeri. Jälleen kerran tavoitteena on nopeus, tässä tapauksessa nopeampi kuin toinen linkkini. Tätä linkkiä on hidastettu merkittävästi vuosien varrella lisäämällä tukea ELF: lle ja jaetuille kirjastoille. Tämä tuki on korjattu eikä suunniteltu sisään.
(Toinen linkkijä on BFD ld
.)
kommentit
- olisiko nimi ' kulta ' tulevat lukemalla ' ld ' nimellä ' lead ', ja kulta on tietysti arvokkaampi kuin lyijy?
- @Aganju Ei, se ' vain
go
etuliiteld
.
Vastaa
kultainen linkkeri kirjoitettiin tekemään linkkiprosessista huomattavasti nopeampi. Kultaisen kirjoittajan mukaan Ian Lance Taylor
Tällä hetkellä kullalla on vain yksi merkittävä etu olemassa olevaan linkkeriin verrattuna: se on nopeampi. Suurissa C ++ -ohjelmissa olen mitannut sen olevan viisi kertaa nopeampi.
Hän vertaa kultaisen linkkinsuorituskyvyn perinteiseen GNU-linkkeriin. kulta (toisin kuin GNU-linkitin) ei käytä BFD-kirjastoa objektitiedostojen käsittelemiseen.
Kultainen rajoitus on, että (toisin kuin GNU-linkittäjä, joka pystyy käsittelemään monia objektitiedostotyyppejä), se voi linkittää vain ELF-muotoisia objektitiedostoja.
Mitä tulee ongelmiin, joita olet kohdannut käyttäessäsi GNU: ta linkkeri, tässä on mielenkiintoinen vastaus vastaavaan kysymykseen SO : sta Michael Adamilta:
Kultalinkeri löysi koodistamme jopa joitain riippuvuusongelmia, koska se näyttää olevan joissakin yksityiskohdissa oikeampi kuin klassinen. Katso esim. tämä Samba-sitoutuminen.
Vastaa
gold
vs ld
vertailuarvo
Olen julkaissut konkreettisen vertailukohdan ld vs kulta osoitteesta: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263
Yhteenveto tulokset: kulta oli 2x – 3x kertaa nopeampi kuin ld.
Tämä ajan voitto voi olla valtava pelinvaihtaja monimutkaisissa C ++ -projekteissa, joissa on hallinnan ulkopuoliset mallit ja koodin luonti, koska linkkivaihe sisältää kaikki tiedostot projektista, ja toisin kuin kokoaminen, se on tehtävä aina, vaikka muuttaisitkin vain yhtä .cpp-tiedostoa.
Joten hidas linkitysaika tekee kehitysvaiheesta sietämättömän ja on todennäköisesti pääsyy Google upotti resursseja siihen. Kuvittele vain voittoja odottaessasi 10 sekuntia 30 sekunnin välein jokaisesta triviaalista tiedostomuutoksesta.
Synteettisen vertailuarvon ajan voitot sopivat myös tosiasiallisiin voittoihin, jotka minulla oli monimutkaisesta tosielämän projektista (gem5), kuten myös vastaus mainitsi.
Vastaus
Nykyaikaisissa GNU / Linux-järjestelmissä on käytettävissä kolme linkkiä:
- ld , ylläpitää GNU binutils,
- kulta , ylläpitää GNU binutils, ”vielä beetatestissä”,
- lld , kehitetty osana LLVM-projektia.
Katso nopeuden vertailuarvot kohdasta: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld
on nopein, jota seuraa gold
, jota seuraa ld
Joidenkin lähteiden mukaan kultaprojekti on ollut pysähtynyt , ja Fedoran pakettirakenne heijastaa tätä.
ld
.ld
voi easilu kuluttaa useita Gt RAM-muistia suurissa C ++ -projekteissa, kun taasgold
ja erityisestilld
linkkerit ovat paljon resurssitehokkaampia.ld
tapahtui muistivirhe, mutta kultalinkki pystyi yhdistämään sen