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
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őtagld
.
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.
ld
-t. Ald
könnyebben elfogyaszt sok GB RAM-ot egy nagy C ++ projektnél, míg agold
és különösen alld
linkerek sokkal erőforrás-hatékonyabbak.ld
memóriahiány történt, de az arany linker képes volt összekapcsolni