Használta már valaki a gold linkelőt? Egy meglehetősen nagy projekt összekapcsolásához ezt kellett használnom, szemben a GNU ld -vel, amely néhány hibát felvetett és nem sikerült összekapcsolni.

Hogyan van a gold linkelő képes olyan nagy projekteket összekapcsolni, ahol a ld nem sikerül? Van valamiféle memória trükk valahol?

Megjegyzések

  • Melyek voltak a hibák? ' valószínűleg elfogyott a memóriád, és az OoM megölte ld -t. A ld könnyebben elfogyaszt sok GB RAM-ot egy nagy C ++ projektnél, míg a gold és különösen a lld linkerek sokkal erőforrás-hatékonyabbak.
  • igen ld memóriahiány történt, de az arany linker képes volt összekapcsolni

Válasz

A gold linkert ELF-specifikus linkerként tervezték, fenntarthatóbb és gyorsabb linker előállítása céljából, mint a BFD ld (a „hagyományos” GNU binutils linker). Mellékhatásként valóban képes nagyon nagy programokat összekapcsolni kevesebb memóriával, mint a BFD ld, feltehetően azért, mert kevesebb absztrakciós réteg van, amivel foglalkozni kell, és mert a linkelő adatai A struktúrák közvetlenül az ELF formátumhoz kapcsolódnak.

Nem biztos, hogy sok olyan dokumentum létezik, amely kifejezetten foglalkozik a két linker közötti tervezési különbségekkel és azok memóriahasználatra gyakorolt hatásával. Van egy nagyon érdekes linkersről szóló cikksorozat , amelyet Ian Lance Taylor, a GNU különféle linkjeinek szerzője írt le, és sokféle, a gold. azt írja , hogy

Az a linker, amelyet most dolgozok, az úgynevezett arany, akarat szerint légy a harmadik. Kizárólag ELF linker. A cél ismét a sebesség, ebben az esetben gyorsabb, mint a második linkerem. Ez a linker az évek során jelentősen lelassult az ELF és a megosztott könyvtárak támogatásával. Ezt a támogatást foltozták, nem pedig tervezték.

(A második linkelő BFD ld.)

Megjegyzések

  • a név ' arany ' ' ld ' olvasásból származik ' lead ', és az arany nyilvánvalóan értékesebb, mint az ólom?
  • @Aganju Nem, csak ' csak go előtag ld.

Válasz

Az arany linkert azért írták, hogy a linkelési folyamat jelentősen gyorsabb legyen. Az arany szerző szerint Ian Lance Taylor

Jelenleg az aranynak csak egy van jelentős előny a meglévő linkerrel szemben: gyorsabb. Nagy C ++ programok esetén ötször gyorsabban mértem.

Összehasonlítja az arany linker teljesítményét a hagyományos GNU linkerrel. Az gold (ellentétben a GNU linkerrel) nem használja a BFD könyvtárat az objektumfájlok feldolgozásához.

Az arany korlátozása az, hogy (ellentétben a GNU linkerrel, amely sok objektum fájltípust képes feldolgozni) csak az ELF formátumú objektum fájlokat tudja összekapcsolni.

A GNU használatakor szembesült problémákkal kapcsolatban linker, íme egy érdekes válasz Michael dam id: hasonló kérdésére a SO -on:

Az arany linker még függőségi problémákat is talált a kódunkban, mivel egyes részletek tekintetében helyesebbnek tűnik, mint a klasszikus. Lásd pl. ez a Samba elkötelezettség.

Válasz

gold vs ld benchmark

Közzétettem az ld és az arany konkrét szintetikus referenciaértékét: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

Összefoglaló eredmények: az arany 2–3x-szor gyorsabb volt, mint az ld.

Ez az időnövekedés hatalmas játékváltó lehet komplex C ++ projekteken, kontrollon kívüli sablonokkal és kódgenerálással, mert a linkelési lépés minden fájlt magában foglal a projektből, és a fordítástól eltérően, mindig meg kell tenni, még akkor is, ha csak egyetlen .cpp fájlt módosítasz.

Tehát a lassú linkidő elviselhetetlenné teszi a fejlesztési ciklust, és valószínűleg ez a fő ok A Google erőforrásokat vetett bele. Képzelje csak el, milyen előnyökkel jár, ha minden triviális fájlcseréhez 30-at várunk 10-re.

A modern GNU / Linux rendszereken három linkelő áll rendelkezésre:

  • ld , amelyet a GNU binutils tart fenn,
  • arany , a GNU binutils fenntartja, “még béta tesztben van”,
  • lld , amelyet az LLVM projekt részeként fejlesztettek ki.

A sebességi referenciaértékekről lásd: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld a leggyorsabb, majd gold, majd ld

Egyes források szerint az arany projekt stagnál , és a Fedora csomagstruktúrája ezt tükrözi.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük