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

  • Mitkä olivat virheet? ' Muisti on todennäköisesti loppunut ja OoM tappoi ld. ld voi easilu kuluttaa useita Gt RAM-muistia suurissa C ++ -projekteissa, kun taas gold ja erityisesti lld linkkerit ovat paljon resurssitehokkaampia.
  • kyllä ld tapahtui muistivirhe, mutta kultalinkki pystyi yhdistämään sen

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 etuliite ld.

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ä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *