Linux / Unix parancs: Id

NÉV

ld - Az LD használata , a GNU linker

SZINOPSZIS

ld [ opciók ] objfile ...

LEÍRÁS

Az ld számos objektumot és archív fájlt egyesíti, áthelyezi az adatait és megszünteti a szimbólum hivatkozásokat. Általában a program összeállításának utolsó lépése az ld futtatása.

Az ld elfogadja a Linker Command Language fájlokat, amelyeket az AT & T Link Editor Command Language szintaxisában írtak le, hogy explicit és teljes ellenőrzést biztosítson az összekapcsolási folyamat során.

Ez a man oldal nem írja le a parancsnyelvet; lásd az ld bejegyzést az "info" -ban vagy a manuális ld: a GNU linker, a parancsnyelvre és a GNU linker egyéb vonatkozásairól.

Az ld ezen verziója az általános célú BFD könyvtárakat használja az objektumfájlok kezelésére. Ez lehetővé teszi az ld számára, hogy többféle formátumban olvaszon , kombináljon és írjon objektumfájlokat - például COFF vagy "a.out". Különböző formátumok össze lehetnek kapcsolva az elérhető típusú objektumfájlok előállításához.

Rugalmassága mellett a GNU linker sokkal hasznosabb, mint a többi kapcsoló a diagnosztikai információk nyújtásában. Sok linker haladéktalanul hagyja el a végrehajtást hiba esetén; amikor csak lehetséges, az ld folytatja a végrehajtást, lehetővé téve más hibák azonosítását (vagy bizonyos esetekben a hiba ellenére kimeneti fájlt kaphat).

A GNU linker ld célja a szituációk széles körének lefedése, és a lehető legteljesebb kompatibilitás a többi linkerrel. Ennek eredményeképpen számos lehetőség van a viselkedésének ellenőrzésére.

LEHETŐSÉGEK

A linker számos parancssori opciót támogat, de a tényleges gyakorlatban kevesen használják őket bármelyik kontextusban. Például az ld gyakori használata szabványos Unix objektumfájlok összekapcsolására szabványos, támogatott Unix rendszeren keresztül . Egy ilyen rendszeren a "hello.o" fájl összekapcsolásához:

ld -o /lib/crt0.o hello.o -lc

Ez azt mondja az ld-nek , hogy a "/lib/crt0.o" fájlt a "hello.o" és a "libc.a" könyvtárhoz, amely a standard keresési könyvtárakból származik. (Lásd az alábbi opciót.)

Az ld parancssori opciók némelyikét a parancssor bármely pontján lehet megadni. A fájlokra (például -l vagy -T) vonatkozó beállítások azonban azt eredményezik, hogy a fájl az objektumfájlokhoz és egyéb fájlbeállításokhoz képest a parancssorban megjelenik. A nem fájltartalmú opciók megismétlése egy másik argumentummal vagy nincs további hatása, vagy felülírja az adott esemény előtti eseményeket (a továbbiakban a bal oldali parancssorban). Az alábbiakban felsorolt ​​opciókat, amelyek értelmezhetően többször vannak megadva, az alábbiakban találhatók.

A nem opcionális argumentumok objektumfájlok vagy archívumok, amelyeket össze kell kötni. Lehet követni, megelőzni vagy összekeverni a parancssori opciókkal, kivéve, hogy egy objektumfájl argumentum nem helyezhető el az opció és az argumentuma között.

Általában a linker legalább egy objektumfájllal kerül meghívásra, de a bináris bemeneti fájlok más formáit a -l , -R és a script parancsnyelv segítségével adhatja meg. Ha egyáltalán nincs megadva bináris bemeneti fájl, a linker nem hoz létre semmilyen kimenetet, és kiadja a Nincs bemeneti fájlt .

Ha a linker nem ismeri fel az objektumfájl formátumát, akkor azt feltételezi, hogy egy hivatkozó parancsfájl. Az így megadott parancsfájl növeli a linkhez használt legfontosabb hivatkozási parancsfájlt (vagy az alapértelmezett hivatkozási parancsfájl, vagy a -T által megadott érték). Ez a szolgáltatás lehetővé teszi a linker számára, hogy egy olyan objektummal vagy archívummal rendelkező fájlhoz kapcsolódjon, amely csak néhány szimbólum értéket definiál, vagy "INPUT" vagy "GROUP" -t használ más objektumok betöltésére. Ne feledje, hogy a parancsfájl ilyen módon történő megadása csupán növeli a fő hivatkozási parancsfájlt; használja a -T opciót az alapértelmezett linkkód-parancsfájl teljes cseréjéhez.

Az olyan opciók esetében, amelyeknek neve egy betű, az opcionális argumentumoknak vagy követniük kell az opcionális betűt anélkül, hogy behatolnának a fehérekbe, vagy közvetlenül megadnák a különálló argumentumokat, miután megkívánta őket.

Az olyan opciók esetében, amelyek nevének több betűje van, egy vagy két vonal előjelezheti az opció nevét; például a " trójai szimbólum" és a " trák" szimbólum egyenértékűek. Megjegyzés: egy kivétel van ettől a szabálytól. A "0" kisbetűvel kezdődő többszörös levél opciók csak két kötőjelet tartalmazhatnak. Ezzel csökkenthető a zavarás a -o opcióval. Tehát például -omagic állítja be a kimeneti fájl nevét a mágiára, míg a -omagic beállítja az NMAGIC jelzőt a kimeneten.

A többes betűvel kapcsolatos érveket vagy el kell választani az opció nevétől egyenlő jelzéssel, vagy különálló argumentumként kell megadni a szükséges opció után. Például, a -rrace-szimbólum foo és a -trace-symbol = foo egyenértékűek. A többes betűs nevek egyedi rövidítései elfogadottak.

Megjegyzés: ha a linkert indirekt módon fordítottuk fordító meghajtón keresztül (pl gcc ), akkor az összes linker parancssori opciót a -Wl (vagy bármi legyen az adott fordító illesztőprogramhoz megfelelő) előtagja megelõzõen :

gcc -Wl, - startgroup foo.o bar.o -Wl, - végcsoport

Ez azért fontos, mert különben a fordító illesztőprogramja csendben lecsökkenheti a linker opciókat, ami rossz kapcsolatot eredményezhet.

A GNU linker által elfogadott generikus parancssori kapcsolók táblázata itt található:

-a kulcsszó

Ezt az opciót a HP / UX kompatibilitás támogatja. A kulcsszóelemzésnek az egyik archívumnak , megosztottnak vagy alapértelmezettnek kell lennie. -a-archívum funkcionálisan egyenértékű a -static-val , és a másik két kulcsszó funkcionálisan egyenértékű a -Bdynamic-val . Ez az opció többször használható.

- Egy építészet

--architecture = architektúra

Az ld aktuális kiadásában ez az opció csak az Intel 960 architektúrák családjához használható. Az ld konfigurációban az architektúra- argumentum a 960-as család egyedi architektúráját azonosítja, amely lehetővé teszi bizonyos biztosítékokat és módosítja az archívkönyvtár keresési útvonalát.

Az ld jövőbeli verziói hasonló funkciókat támogathatnak más architektúrák családja számára.

-b bemeneti formátum

--format = bemeneti formátum

ld konfigurálható többféle objektumfájl támogatására. Ha az ld konfigurálva van ilyen módon, akkor a -b beállítással megadhatja a bináris formátumot a bemeneti objektumfájlokhoz, amelyek ezt a parancsot követik a parancssorban. Még akkor is, ha az ld az alternatív objektumformátumok támogatására van beállítva, általában nem kell ezt megadnia, mivel az ld-t úgy kell beállítani, hogy alapértelmezett bemeneti formátumként minden gépen a leggyakoribb formátumot várják. A bemeneti formátum egy szöveges karakterlánc, a BFD könyvtárak által támogatott formátum neve. (A bináris formátumokat az objdump -i paranccsal lehet felsorolni.)

Ezt a lehetőséget akkor érdemes használni, ha szokatlan bináris formátumú fájlokat csatlakoztat. A -b gombbal kiválaszthatja a formátumokat is explicit módon (különböző formátumú objektumfájlok összekapcsolásakor), az egyes fájlok objektumfájljainak csoportosítása előtt a -b bemeneti formátum használatával.

Az alapértelmezett formátum a "GNUTARGET" környezeti változóból származik.

A bemeneti formátumot a "TARGET" parancs segítségével is meghatározhatja egy szkriptből;

-c MRI parancsfájl

--mri-script = MRI-parancsfájl

Az MRI által gyártott kapcsolókkal való kompatibilitás érdekében az ld elfogadja a GNU ld dokumentáció MRI kompatibilis parancsfájlok részében leírt, alternatív, korlátozott parancsnyelvben írt szkriptfájlokat. Vigye be az MRI-parancsfájlokat a -c kapcsolóval ; használja a -T opciót az általános célú ld scripting nyelven írt linkszkriptek futtatásához. Ha az MRI-cmdfile nem létezik, az ld a -L beállítások által meghatározott könyvtárakban keres.

-d

-dc

-dp

Ez a három lehetőség egyenértékű; Több formanyomtatványt támogatnak a többi linkerrel való kompatibilitás. Helyet adnak a közös szimbólumoknak akkor is, ha áthelyezhető kimeneti fájl van megadva ( -r ). A "FORCE_COMMON_ALLOCATION" szkript parancs ugyanazt a hatást fejtette ki.

-e bejegyzést

--entry = bejegyzés

Használja a bejegyzést a program megkezdésének kifejezett szimbólumaként, az alapértelmezett belépési pont helyett. Ha nincs bejegyzést jelző szimbólum, akkor a linker megpróbálja a bejegyzést számként értelmezni, és használhatja ezt bejegyzéscímként (a számot a 10-es alapértelmezésben kell értelmezni; a 16-os alapú vezetőhöz vagy a vezető 0-hoz a 8 alapra).

-E

--export dinamikus

Dinamikusan kapcsolódó végrehajtható fájl létrehozásakor minden szimbólumot hozzá kell adni a dinamikus szimbólum táblához. A dinamikus szimbólumtáblázat olyan szimbólumokkészlet, amelyek a dinamikus objektumokban futási idő alatt láthatók.

Ha nem használja ezt a lehetőséget, akkor a dinamikus szimbólumtáblázat általában csak azokat a szimbólumokat tartalmazza, amelyekre a linkben említett néhány dinamikus objektum hivatkozik.

Ha a "dlopen" -t olyan dinamikus objektum betöltésére használja, amelyre a program által definiált szimbólumokra kell hivatkozni, nem pedig egy másik dinamikus objektumon, akkor valószínűleg ezt a lehetőséget kell használni a program összekapcsolásakor.

A verziószkript segítségével ellenőrizheti, hogy mely szimbólumokat kell hozzáadni a dinamikus szimbólum táblához, ha a kimeneti formátum támogatja. Lásd a --version-script leírását @ ref {VERSION} -ben.

-EB

Link nagy-endian objektumok. Ez befolyásolja az alapértelmezett kimeneti formátumot.

EL

Link kis endian objektumok. Ez befolyásolja az alapértelmezett kimeneti formátumot.

-f

- külföldi név

ELF megosztott objektum létrehozásakor állítsa be a belső DT_AUXILIARY mezőt a megadott névre. Ez azt mondja a dinamikus hivatkozónak, hogy a megosztott objektum szimbólumtábláját segédszűrőként kell használni a megosztott objektum neve szimbólumtábláján.

Ha később kapcsolatot létesít egy program ezzel a szűrőobjektummal, akkor a program futtatásakor a dinamikus linker a DT_AUXILIARY mezőt fogja látni. Ha a dinamikus linker megszünteti a szûrõobjektum bármely szimbólumát, elõször ellenõrizni fogja, hogy van-e definíció a megosztott objektum nevében . Ha van ilyen, a szűrőobjektum definíciója helyett használják. A megosztott objektum neve nem létezik. Így a megosztott objektumnevet használhatják bizonyos funkciók alternatív megvalósításához, talán hibakereséshez vagy gépi teljesítményhez.

Ez az opció többször megadható. A DT_AUXILIARY bejegyzések a parancssorban megjelenő sorrendben kerülnek létrehozásra.

-F nevet

--szűrő neve

ELF megosztott objektum létrehozásakor állítsa be a belső DT_FILTER mezőt a megadott névhez. Ez azt mondja a dinamikus összekötőnek, hogy a létrehozott megosztott objektum szimbólumtábláját szűrőként kell használni a megosztott objektum neve szimbólumtábláján.

Ha később kapcsolatot létesít egy program ezzel a szűrőobjektummal, akkor a program futtatásakor a dinamikus linker a DT_FILTER mezőt fogja látni. A dinamikus linker a szimbólumokat a szûrõobjektum szimbólum táblázat szerint rendezi, a szokásos módon, de valójában a megosztott objektum nevében található definíciókhoz kapcsolódik. Így a szűrőobjektum az objektum neve által biztosított szimbólumok részhalmazának kiválasztására használható.

Néhány régebbi linker a -F opciót használta egy összeállítás eszköztárában objektum-fájlformátum megadásához mind a bemeneti, mind a kimeneti objektumfájlhoz. A GNU linker más mechanizmusokat használ erre a célra: a -b , --format , --oformat opciók, a "TARGET" parancs a linker szkriptekben és a "GNUTARGET" környezeti változó. A GNU linker figyelmen kívül hagyja a -F beállítást, ha nem hoz létre ELF megosztott objektumot.

-fini név

ELF-futtatható vagy megosztott objektum létrehozásakor hívja fel a NAME-t, amikor a futtatható vagy a megosztott objektumot letölti, a DT_FINI beállítást a funkció címére. Alapértelmezés szerint a linker a "_fini" funkciót használja hívásként.

-g

Figyelmen kívül hagyva. Feltéve, hogy kompatibilis más eszközökkel.

-G érték

--gpsize = érték

Állítsa be a GP-regiszterrel optimalizálható objektumok maximális méretét a mérethez . Ez csak az objektumfájlformátumokra vonatkozik, mint például a MIPS ECOFF, amely támogatja a nagy és kicsi objektumok különböző szakaszokba helyezését. Ezt más objektumfájlformátumokra figyelmen kívül hagyja.

-h név

-soname = név

ELF megosztott objektum létrehozásakor állítsa be a belső DT_SONAME mezőt a megadott névre. Amikor egy végrehajtható fájl egy DT_SONAME mezővel rendelkező megosztott objektummal van összekapcsolva, akkor a végrehajtó futtatásakor a dinamikus linker megpróbálja betölteni a DT_SONAME mezõben megadott megosztott objektumot, nem pedig a linkerrel megadott fájlnevet.

-én

Végezze el a növekményes linket (ugyanúgy, mint a -r opció).

név

ELF-futtatható vagy megosztott objektum létrehozásakor hívja a NAME-t, amikor a futtatható vagy a megosztott objektum betöltődik, a DT_INIT beállítást a funkció címére. Alapértelmezés szerint a linker a "_init" funkciót használja hívásként.

- archívum

- könyvtár = archívum

Adja hozzá az archív fájl archívumát a hivatkozni kívánt fájlok listájához. Ez az opció többször használható. Az ld minden egyes archívumhoz keresni fogja a "libarchive.a" előfordulási útvonalát.

Azokra a rendszerekre, amelyek támogatják a megosztott könyvtárakat, az ld könyvtárakat is megkereshet, amelyek nem ".a" kiterjesztéssel rendelkeznek. Különösen az ELF és a SunOS rendszereken az ld egy ".so" kiterjesztésű könyvtár könyvtárát keres, mielőtt egy ".a" kiterjesztéssel keresne. Megegyezés szerint a ".so" kiterjesztés egy megosztott könyvtárat jelez.

A linker csak egyszer keres egy archívumot a parancssorban megadott helyen. Ha az archívum olyan szimbólumot definiál, amely nem volt meghatározva olyan objektumban, amely az archívum előtt megjelenik a parancssorban, akkor a linker tartalmazza a megfelelő fájlokat az archívumból. Azonban a parancssorban később megjelenő objektum nem definiált szimbóluma nem okozza a linkernek, hogy újra keressen az archívumban.

Lásd a - ( opciót arra vonatkozóan, hogyan kényszerítheti a linker többszörös keresést az archívumban.

Ugyanazt az archívumot többször is felsorolhatja a parancssorban.

Ez a fajta archív keresési szabvány a Unix linkerek számára. Ha azonban ld onAIX-t használ, vegye figyelembe, hogy ez különbözik az AIX hivatkozó viselkedésétől.

-L keresődir

- könyvtár-elérési út = searchdir

Adja hozzá az elérési útvonalat az ld listákhoz , amelyek az archív könyvtárakat és az ld vezérlőszkripteket keresik. Ezt az opciót többször is használhatja. A könyvtárakat a parancssorban megadott sorrendben keresik. A parancssorban megadott könyvtárak az alapértelmezett könyvtárak előtt keresésre kerülnek. Az összes -L opció minden -l függvényre érvényes, függetlenül attól, hogy milyen sorrendben jelenik meg a beállítás.

Ha a searchdir "=" -al kezdődik, akkor a "=" helyére a sysroot előtag kerül , a hivatkozó konfigurálásakor megadott elérési út.

A keresett útvonalak alapértelmezett halmaza (anélkül, hogy -L- vel megadnák ) attól függ, hogy melyik emulációs mód használja az ld- t, és bizonyos esetekben a konfigurálás módját is.

Az útvonalakat egy linkszkriptben is megadhatja a "SEARCH_DIR" paranccsal. Az így megadott könyvtárakat arra a pontra keresik, ahol a linkszkript jelenik meg a parancssorban.

-m emuláció

Emulálja az emulációs linkert. A rendelkezésre álló emulációk felsorolása a --verbose vagy a -V opciókkal lehetséges.

Ha az -m opciót nem használják, akkor az emuláció az "LDEMULATION" környezeti változóból származik, ha ez meg van határozva.

Ellenkező esetben az alapértelmezett emuláció a kapcsoló konfigurálásának módjától függ.

-M

--print-térkép

Nyomtasson egy hivatkozási térképet a szabványos kimenetre. A hivatkozási térkép a linkre vonatkozó információkat tartalmaz, többek között a következőket:

*

Az objektumfájlok és szimbólumok leképezése a memóriába.

*

A szokásos szimbólumok kiosztása.

*

A linkben szereplő minden archívum tagja, a szimbólum megemlítésével, amely az archívum tagjának bevitelét okozta.

-n

--nmagic

Kapcsolja ki a szakaszok oldalirányítását, és jelölje ki a kimenetet "NMAGIC" -ként, ha lehetséges.

-N

--omagic

Állítsa be a szöveges és adatszekciókat olvashatóvá és írhatóvá. Ne fűzze oldalra az adatszegmenst, és kapcsolja ki a megosztott könyvtárakhoz való kapcsolódást. Ha a kimeneti formátum támogatja a Unix stílusú mágia számokat, jelölje ki a kimenetet "OMAGIC" -ként.

-no-omagic

Ez az opció elutasítja az -N opció legtöbb hatását. A szövegrész csak olvasható, és arra kényszeríti az adatszegmenst, hogy oldalirányban legyen. Megjegyzés: ez a lehetőség nem engedélyezi a megosztott könyvtárakhoz való kapcsolódást. Használd ezt a -Bdynamic- t.

-o output

- kimenet = kimenet

Használja a kimenetet, mint az ld által előállított program nevét; Ha ezt az opciót nem adta meg, az a.out név alapértelmezés szerint használatos. Az "OUTPUT" szkript parancs megadhatja a kimeneti fájl nevét is.

-O szintet

Ha a szint egy nulla értéknél nagyobb számérték, akkor az optimalizálja a kimenetet. Ez lényegesen hosszabb időt vehet igénybe, ezért valószínűleg csak az utolsó binárisra van engedélyezve.

-q

--emit-relocs

Hagyja áthelyezési szakaszokat és tartalmakat teljesen összekapcsolt exececutables. A linkek elemzéséhez és optimalizálásához szükséges eszközökre szükség lehet ez az információ a végrehajtható fájlok helyes módosítása érdekében. Ez nagyobb végrehajtható fájlokat eredményez.

Ez az opció jelenleg csak az ELF platformokon támogatott.

-r

--relocateable

Generáljon áthelyezhető kimenetet --- azaz generáljon kimeneti fájlt, amely viszont ld-nek adható. Ezt gyakran részleges összekapcsolásnak nevezik. Hány mellékhatásként, a szabványos Unix mágia számokat támogató környezetekben ez az opció a kimeneti fájl mágikus számát "OMAGIC" -ra állítja. Ha ez az opció nincs megadva, abszolút fájlt hoz létre. A C ++ programok összekapcsolásakor ez a lehetőség nem oldja meg a konstruktorokra vonatkozó hivatkozásokat; Ehhez használja a -Ur .

Ha a bemeneti fájlnak nincs a formátuma, mint a kimeneti fájl, akkor a részleges összekapcsolás csak akkor támogatott, ha a bemeneti fájl nem tartalmaz áttelepítést. A különböző kimeneti formátumok további korlátozásokkal rendelkezhetnek; például néhány "a.out" alapú formátum nem támogatja a más formátumú bemeneti fájlok részleges összekapcsolását.

Ez az opció ugyanaz, mint a -i .

-R fájlnév

--just-symbols = fájlnév

Olvassa le a szimbólumneveket és azok címét a fájlnévből , de ne helyezze át, vagy ne tegye be a kimenetbe. Ez lehetővé teszi, hogy a kimeneti fájl szimbolikusan utaljon a többi programban meghatározott memória abszolút helyére. Ezt az opciót többször is használhatja.

Más ELF kapcsolókkal való kompatibilitás esetén, ha a -R opciót egy könyvtárnév követi, a fájlnév helyett, akkor a -rpath opciónak tekinthető.

-s

--strip-all

Távolítsa el az összes szimbólumadatot a kimeneti fájlból.

-S

--strip-debug

Hagyja el a hibakereső szimbólum információit (de nem minden szimbólumot) a kimeneti fájlból.

-t

--nyom

Nyomtassa ki a bemeneti fájlok nevét, ahogy azokat feldolgozza.

-T parancsfájl

--script = parancsfájl

Használja a parancsfájlt linkerkódként . Ez a parancsfájl helyettesíti az ld alapértelmezett linker szkriptjét (nem hozzá hozzáadásával), így a parancsfájlnak meg kell adnia mindent, ami szükséges a kimeneti fájl leírásához. Ha a parancsfájl nem létezik az aktuális könyvtárban, akkor az "ld" az előző -L beállítások által meghatározott könyvtárakban keres. Többszörös -T lehetőségek felhalmozódnak.

-u szimbólum

--undefined = szimbólum

Erő szimbólumot kell megadni a kimeneti fájlban, mint nem definiált szimbólum. Ehhez például hozzárendelheti a további modulok összekapcsolását a standard könyvtárakkal. -u meg lehet ismételni a különböző opcionális érvekkel további nem definiált szimbólumok beírásához. Ez a beállítás megegyezik az "EXTERN" linker szkript parancsával.

-Ur

A C ++ programokon kívül bármi más is, ez az opció egyenértékű a -r-vel : relocatable kimenetet generál --- azaz egy kimeneti fájlt, amely viszont ld-nek adható. A C ++ programok összekapcsolásakor a -Ur a konstruktorokra hivatkozik, ellentétben a -r . Nem működik a -Ur fájlok használata, amelyek maguk is kapcsolódtak a -Ur-hoz ; ha a konstrukciós tábla épült, akkor nem lehet hozzáadni. Használja -Ur csak az utolsó részleges linket, és -r a többiek számára.

--unique [= SZAKASZ ]

Készít egy külön kimeneti részt minden egyes SECTION bemeneti szakaszhoz, vagy ha az opcionális helyettesítő SECTION argumentum hiányzik, minden árva bemeneti szakaszhoz. Az árva szakasz olyan, amely nem szerepel kifejezetten egy linkszkriptben. Ezt a beállítást többször is használhatja a parancssorban; Ez megakadályozza a beviteli szakaszok azonos névvel történő normális összevonását, ami felülírja a kimeneti szakaszok hozzárendelését egy linkszkriptben.

-v

--változat

-V

Az ld verziószámának megjelenítése. A -V opció felsorolja a támogatott emulációkat is.

-x

--discard-all

Törölje az összes helyi szimbólumot.

-X

--discard helyiek

Törölje az ideiglenes helyi szimbólumokat. A legtöbb célhoz ez minden olyan helyi szimbólum, amelynek nevei L- vel kezdődnek.

-y szimbólum

- trak-szimbólum = szimbólum

Adja meg az egyes csatolt fájlok nevét, ahol a szimbólum megjelenik. Ez a lehetőség többször is megadható. Számos rendszernél szükséges aláhúzni az aláhúzást.

Ez az opció akkor hasznos, ha egy nem definiált szimbólum van a linkben, de nem tudja, honnan származik a referencia.

-Y ösvény

Adja hozzá az elérési útvonalat az alapértelmezett könyvtárkeresési útvonalhoz. Ez a lehetőség létezik a Solaris kompatibilitásra.

-z kulcsszó

Az elismert kulcsszavak az "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "most", "származás", "combreloc", "nocombreloc" és "nocopyreloc ”. A többi kulcsszó figyelmen kívül marad a Solaris kompatibilitás miatt. Az "initfirst" azt a tárgyat jelöli, amelyet inicializálni kell először futás közben, mielőtt bármilyen más objektumot megkezdenének. Az "interpose" jelöli azt az objektumot, amelyet a szimbólum táblája az összes szimbólum, de az elsődleges futtatható fájl előtt áll össze. A "loadfltr" jelöli az objektumot, hogy a fájljait futás közben azonnal feldolgozzák. "nodefaultlib" jelöli azt az objektumot, amelyet az objektum függvényeinek keresése nem veszi figyelembe alapértelmezett könyvtári keresési útvonalak. A "nodelete" azt jelzi, hogy az objektumot futás közben nem szabad kirakodni. A "nodlopen" a "dlopen" elérhetetlen objektumot jelöli. A "csomópont" azt jelzi, hogy az objektumot nem lehet "dldump" -al dobni. "most" jelöli az objektumot a nem lusta futásidejű kötéssel. "eredet" jelzi, hogy az objektum tartalmazhat $ ORIGIN. A "defs" nem definiált szimbólumokat tilt. A "muldefs" többféle definíciót tesz lehetővé. A "combreloc" egyesíti a többszörös áthelyezési szakaszokat, és rendezi őket, hogy dinamikus szimbólumkeresési gyorsítótárat lehessen elérni.

A "nocombreloc" letiltja a többszörös reloc szakaszok kombinációját. A "nocopyreloc" letiltja a másoló relok készítését.

- ( archívumok -)

--start-csoport archívum --end-csoport

Az archívumoknak az archív fájlok listáját kell tartalmazniuk. Ezek lehetnek kifejezett fájlnevek vagy -l- beállítások.

A megadott archívumokat ismételten keresik, amíg új, nem definiált hivatkozásokat hoznak létre. Általában egy archívumot csak egyszer keresnek a parancssorban megadott sorrendben. Ha az archívumban olyan szimbólumra van szükség, amely egy objektum által hivatkozott, a parancssorban később megjelenő archívumban szereplő nem definiált szimbólumot rendez, akkor a linker nem tudja megoldani ezt a hivatkozást. Az archívumok csoportosításával mindegyiket többször is meg kell keresni, amíg az összes lehetséges hivatkozás meg nem oldódik.

Ennek az opciónak a használata jelentős teljesítményköltséget eredményez. A legjobb, ha csak két vagy több archívum között elkerülhetetlen körkörös hivatkozások vannak.

--accept-unknown-input-arch

-no-elfogadják-unknown-input-arch

Az összekötőnek azt a bemeneti fájlt fogadja el, amelynek architektúráját nem ismeri fel. A feltételezés az, hogy a felhasználó tudja, mit csinál és szándékosan hivatkozni szeretne az ismeretlen bemeneti fájlokban. Ez volt a linker alapértelmezett viselkedése a 2.14 kiadás előtt. Az alapértelmezett viselkedés a 2.14-es verzióról az ilyen bemeneti fájlok elutasítása, így az " accept-unknown-input-arch" opció hozzá lett adva a régi viselkedés visszaállításához.

-assert kulcsszó

Ezt az opciót a SunOS kompatibilitás figyelmen kívül hagyja.

-Bdynamic

-dy

-call_shared

Link dinamikus könyvtárakkal. Ez csak olyan platformokon érhető el, amelyekhez a megosztott könyvtárak támogatottak. Ez az opció általában az ilyen platformokon alapértelmezett. Az opció különböző változatai különböző rendszerek kompatibilitására szolgálnak. Többször is használhatja ezt az opciót a parancssorban: ez befolyásolja a könyvtár keresését -l, amely követi.

-Bgroup

Állítsa be a "DF_1_GROUP" jelzőt a "DT_FLAGS_1" bejegyzéshez a dinamikus szakaszban. Ez azt eredményezi, hogy a futásidejű linker kezeli a lekérdezéseket ebben az objektumban és annak függőségeit, amelyeket csak a csoporton belül végezzen. --nem-undefined utal . Ez a lehetőség csak az ELF platformokon érhető el, amelyek támogatják a megosztott könyvtárakat .

-Bstatic

-dn

-non_shared

-statikus

Ne kapcsolódjon a megosztott könyvtárakhoz. Ez csak olyan platformokon érhető el, amelyekhez a megosztott könyvtárak támogatottak. Az opció különböző változatai különböző rendszerek kompatibilitására szolgálnak. Többször is használhatja ezt az opciót a parancssorban: ez befolyásolja a könyvtár keresését -l, amely követi.

-Bsymbolic

Megosztott könyvtár létrehozásakor hivatkozzon a globális szimbólumokra a megosztott könyvtár definíciójába, ha vannak ilyenek. Általában lehetséges, hogy egy megosztott könyvtárral összekapcsolt program felülbírálja a definíciót a megosztott könyvtáron belül. Ez az opció csak az ELFplatformokon használható, amelyek támogatják a megosztott könyvtárakat.

--check-szakaszok

-no-check-szakaszok

Megkéri a linkert, hogy ne ellenőrizze a címeket, miután kijelölték őket, hogy láthassanak átfedéseket. Általában a linker elvégzi ezt a csekket, és ha megtalálja az átfedéseket, akkor megfelelő hibaüzeneteket eredményez. A linker nem ismeri, és nem teszi lehetővé az oszlopokban lévő szakaszok kibocsátását. Az alapértelmezett viselkedés visszaállítható a parancssori kapcsoló - ellenőrző szakaszok használatával .

--cref

Adjon meg egy kereszthivatkozási táblát. Ha létrehoz egy összekötő térképfájlt, a kereszttájékoztató táblázat a térképfájlba kerül kinyomtatásra. Ellenkező esetben a szabványos kimenetre nyomtatódik.

A táblázat formátuma szándékosan egyszerű, így szükség esetén szkriptet is feldolgozhat. A szimbólumokat kinyomtatják, név szerint rendezve. Minden egyes szimbólumhoz megadja a fájlnevek listáját. Ha a szimbólum definiálva van, akkor a felsorolt ​​első fájl a meghatározás helyszíne. A fennmaradó fájlok hivatkozásokat tartalmaznak a szimbólumra.

-no meghatározzák gyakori

Ez az opció meggátolja a címek hozzárendelését a közös szimbólumokhoz. Az "INHIBIT_COMMON_ALLOCATION" parancsfájl ugyanezzel a hatással bír.

A --no-define-common opció lehetővé teszi a címzettek közös szimbólumokhoz való hozzárendelését a kimeneti fájltípus kiválasztásától való függetlenítéshez; ellenkező esetben egy nem áthelyezhető kimeneti típusú erők hozzárendelnek címeket a Közös szimbólumokhoz. A --no-define-common használatával a közös könyvtárakhoz tartozó közös szimbólumok csak a főprogramban rendelhetők hozzá. Ez kiküszöböli a fel nem használt duplán lévő területet a megosztott könyvtárban, és megakadályozza a hibás másolat feloldására vonatkozó esetleges zavarokat is, ha sok olyan dinamikus modul létezik, amelyek speciális keresési útvonalakat tartalmaznak a futásidejű szimbólumfelbontáshoz.

--defsym szimbólum = kifejezés

Hozzon létre globális szimbólumot a kimeneti fájlban, amely tartalmazza a kifejezés által adott abszolút címet. Ezt az opciót annyiszor használhatja, amennyi szükséges ahhoz, hogy több szimbólumot definiáljon a parancssorban. Az aritmetika korlátozott formája támogatható a kifejezéshez ebben az összefüggésben: hexadecimális konstansot vagy létező szimbólumot adhat meg, vagy a "+" és a "-" billentyűket hexadecimális konstansok vagy szimbólumok hozzáadásához vagy kivonásához. Ha bonyolultabb kifejezésekre van szüksége, fontolja meg a linker parancsnyelvének használatát a parancsfájlból. Megjegyzés: a szimbólum , az egyenlő jel (`` = '') és a kifejezés között nem lehet üres hely.

--demangle [= stílus ]

-no-demangle

Ezek a beállítások szabályozzák, hogy a hibajelentések és más kimenetek szimbólumneveket szétkeverik-e. Amikor a linkert megkérdezi, hogy megpróbálja megmutatni a szimbólumneveket, az megpróbálja megjeleníteni a szimbólumneveket: az elülső aláhúzásokat szalagolja, ha az objektum fájlformátumát használja, és a C ++ kódolt szimbólumneveket felhasználó által olvasható nevekké alakítja. A különböző fordítóprogramok különböző felépítési stílusokkal rendelkeznek. Az opcionális demangling stílus argumentum használható a megfelelő fordítási stílus kiválasztásához. A linker alapértelmezés szerint eldöntheti, hacsak nincs beállítva a COLLECT_NO_DEMANGLE környezeti változó. Ezek az opciók használhatók az alapértelmezett beállítások felülbírálására.

- dinamikus linker fájl

Állítsa be a dinamikus linker nevét. Ez csak akkor értelmezhető, ha dinamikusan kapcsolt ELF-futtatható fájlokat generál. Az alapértelmezett dinamikus linker általában helyes; ne használd ezt, hacsak nem tudod, mit csinálsz.

--embedded-relocs

Ez az opció csak akkor értelmezhető, ha összekapcsolja a beépített PIPS-kódot a -membedded-pic opcióval a GNU fordítóhoz és összeszerelőhöz. Ennek eredményeképpen a linker létrehoz egy táblázatot, amelyet futásidőben használhatunk olyan adatok áthelyezésére, amelyeket statikusan inicializáltak pointer értékekként. A részletekért lásd a codesuite / ld-empic kódot.

--fatal-figyelmeztetések

Az összes figyelmeztetést hibaként kezelje.

--force-exe-utótag

Győződjön meg róla, hogy a kimeneti fájl rendelkezik .exe utótagdal.

Ha a sikeresen megépített, teljesen összekapcsolt kimeneti fájlnak nincs " .exe " vagy " .dll " utótagja, akkor ez az opció arra kényszeríti a kapcsolót, hogy a kimeneti fájlt egy ".exe" utótagra másolja. Ez az opció akkor hasznos, ha a nem módosított Unix makefile- eket egy Microsoft Windows-kiszolgálón használja, mivel a Windows egyes verziói nem fognak futtatni képeket, kivéve ha a ".exe" utótag végződik.

-no-GC-szakaszok

--gc-szakaszok

Engedélyezze a fel nem használt beviteli szakaszok szemétgyűjtését. A célokat nem veszi figyelembe, amelyek nem támogatják ezt az opciót. Ez a lehetőség nem kompatibilis a -r-vel , és nem használható dinamikus összekapcsolással. Az alapértelmezett viselkedés (ennek a szemétgyűjtésnek a nem teljesítése) helyreállítható a --no-gc szakaszok megadásával a parancssorban.

--Segítség

Nyomtassa ki a parancssori opciók összefoglalását a szabvány kimeneten és kilép.

--target-help

Nyomtassa ki az összes cél-specifikus opció összefoglalását a szabványos kimeneten és a kilépéskor.

-Térkép mapfile

Hivatkozási térkép nyomtatása a fájl mapfile-be . Lásd a fenti " M" opciót.

-no-keep-memória

Az ld általában optimalizálja a memóriahasználat sebességét a memóriában tárolt bemeneti fájlok szimbólum tábláinak tárolásával. Ez az opció azt jelenti, hogy az ld helyette optimalizálja a memóriahasználatot, a szimbólum táblák szükség szerinti újraolvasásával. Ez akkor válhat szükségessé, ha az ld elfogy a memóriaterület, miközben egy nagy végrehajtható fájlt összekapcsol.

-no-meghatározatlan

-z defs

Normális esetben egy nem szimbolikus megosztott könyvtár létrehozásakor definiálatlan szimbólumok engedélyezettek és a futásidejű betöltő nem oldja meg. Ezek az opciók letiltják az ilyen nem definiált szimbólumokat.

--allow-multiple-definition

-z muldefs

Általában, ha egy szimbólum többször definiált, a linker végzetes hibát jelent. Ezek az opciók lehetővé teszik több fogalommeghatározást, és az első meghatározást fogják használni.

--allow-shlib-definiálatlan

A nem definiált szimbólumok engedélyezése a megosztott objektumokban akkor is, ha a --no-undefined be van állítva. A nettó eredmény az lesz, hogy a rendszeres objektumokban meg nem határozott szimbólumok továbbra is hibát okoznak, de a megosztott objektumokban nem definiált szimbólumokat figyelmen kívül hagyják. A no_undefined végrehajtása azt a feltevést teszi, hogy a futásidejű linker elfojtja a nem definiált szimbólumokat. Azonban van legalább egy olyan rendszer (BeOS), ahol a nem megosztott szimbólumok a megosztott könyvtárakban normálisak, mivel a rendszermag betöltési idő alatt feltölti azokat, hogy kiválassza, melyik függvény a leginkább megfelelő az aktuális architektúrához. IE dinamikusan kiválasztja a megfelelő memset függvényt. Úgy tűnik, hogy a HPPA megosztott könyvtárak számára is normális, hogy meghatározatlan szimbólumokkal rendelkezzen.

-no-definiálatlan-verzió

Általában, ha egy szimbólum nem definiált változata, a linker figyelmen kívül hagyja. Ez az opció letiltja a nem definiált verziójú szimbólumokat, és helyette halálos hibát ad ki.

-no-warn-mismatch

Általában az ld hibát okoz, ha valamilyen oknál fogva össze nem illesztett bemeneti fájlokat próbál összeilleszteni, talán azért, mert különböző processzorokra vagy különböző endianness-okra lettek fordítva. Ez az opció azt mondja az ld számára , hogy csendesen engedélyezzen ilyen hibákat. Ezt az opciót csak akkor szabad gondosan használni, ha olyan speciális műveletet hajtott végre, amely biztosítja, hogy a linkerhibák nem megfelelőek.

-no-egész-archív

Kapcsolja ki a teljes archívum opció hatását a későbbi archív fájlokhoz.

--noinhibit-exec

Tartsa meg a végrehajtható kimeneti fájlt, ha még mindig használható. Általában a linker nem hoz létre kimeneti fájlt, ha hibát észlel a kapcsolatfolyamat során; akkor kilép a kimeneti fájl írása nélkül, amikor valamilyen hibát okoz.

-nostdlib

Csak a parancssorban kifejezetten megadott könyvtárkönyvtárakat keres. A linker szkriptekben (beleértve a parancssorban megadott hivatkozási parancsfájlokat is) tartalmazó könyvtárkönyvtárakat figyelmen kívül hagyja.

--oformat kimeneti formátum

ld konfigurálható többféle objektumfájl támogatására. Ha a ld beállítása így történik, akkor a -oformat opcióval megadhatja a kimeneti objektum fájl bináris formátumát. Még akkor is, ha az ld az alternatív objektumformátumok támogatására van konfigurálva, ezt általában nem kell megadnia, mivel az ld-t úgy kell beállítani, hogy alapértelmezett kimeneti formátumként adja meg az egyes gépek legelterjedtebb formátumát. A kimeneti formátum egy szöveges karakterlánc, a BFD könyvtárak által támogatott formátum neve. (A bináris formátumokat az objdump -i paranccsal listázhatja.) Az "OUTPUT_FORMAT" parancsfájl is megadhatja a kimeneti formátumot, de ez az opció felülírja.

-qmagic

Ez az opció figyelmen kívül marad a Linux kompatibilitás miatt.

-Qy

Ezt az opciót az SVR4 kompatibilitás figyelmen kívül hagyja.

--relax

Egy lehetőség gépfüggő hatásokkal. Ez az opció csak néhány célt támogat.

Néhány platformon a --relax opció olyan globális optimalizációkat hajt végre, amelyek akkor válik lehetővé, ha a linker a program címzését megoldja, például pihentető címmódokat és új utasításokat szintetizál a kimeneti objektumfájlban.

Néhány platformon ezek a kapcsolódási idő a globális optimalizálás lehetetlenné teszi az eredményül kapott végrehajtható fájl szimbolikus hibakeresését . Ez ismeretes a Matsushita MN10200 és MN10300 processzorcsalád esetében.

Olyan platformokon, ahol ez nem támogatott, a relaxot elfogadják, de figyelmen kívül hagyják.

--retain-symbols-file fájlnév

Csak a fájlnév fájlban felsorolt ​​szimbólumokat tárolja, elvetve az összes többiet. a fájlnév egyszerűen egy lapos fájl, egy soronként egy szimbólumnévvel. Ez az opció különösen hasznos olyan környezetekben (például a VxWorks), ahol egy nagy globális szimbólumtáblázat fokozatosan felhalmozódik, hogy megőrizze a futásidejű memóriát.

A -retain-symbols-file nem dobja el a nem definiált szimbólumokat vagy az áthelyezésekhez szükséges szimbólumokat.

A parancssorban csak a --retain-szimbólumok fájlt adhatod meg. Ez felülírja a -s és a -S .

-rpath dir

Adjon hozzá egy könyvtárat a futásidejű könyvtár keresési útvonalához. Ezt akkor használjuk, ha egy ELFexecutable-t osztott objektumokkal kapcsolunk. Az összes -rpath argumentumot összekapcsolják és átadják a futásidejű hivatkozónak, amely a megosztott objektumokat futási időben keresi. A -rpath opciót akkor is használjuk, ha olyan megosztott objektumokat találunk, amelyekre a linkben kifejezetten szerepeltetett megosztott objektumok szükségesek; lásd a -rpath-link opciót. Ha a -rpath nem használatos egy ELF-futtatható fájl összekapcsolásakor, akkor az "LD_RUN_PATH" környezeti változó tartalmát használjuk, ha definiáltuk.

A -rpath opció használható a SunOS-on is. Alapértelmezés szerint a SunOS-on a linker egy adott futásidejű keresési javítást hoz létre a megadott -L opciók közül. Ha a -rpath opciót használjuk, akkor a futásidejű keresési útvonal kizárólag a -rpath opciók használatával kerül kialakításra, figyelmen kívül hagyva a -L opciókat. Ez hasznos lehet a gcc használatakor, amely számos -L opciót tartalmaz, amelyek lehetnek az onFS fájlrendszerek.

Más ELF kapcsolókkal való kompatibilitás esetén, ha a -R opciót egy könyvtárnév követi, a fájlnév helyett, akkor a -rpath opciónak tekinthető.

-rpath-link DIR

Az ELF vagy a SunOS használata esetén egy megosztott könyvtárnak szüksége lehet egy másikra. Ez akkor történik, ha egy "ld-megosztott" link egy megosztott könyvtárat tartalmaz, mint az egyik bemeneti fájlt.

Ha a linker egy ilyen jellegű függőséget tapasztal, amikor egy nem megosztott, nem áthelyezhető linket tesz, automatikusan megpróbálja megtalálni a szükséges megosztott könyvtárat, és felveszi azt a hivatkozásra, ha ez nem szerepel kifejezetten. Ilyen esetben a -rpath-link opció megadja a keresés első könyvtárakészletét. A -rpath-link opció megadhatja a könyvtárnevek sorrendjét vagy a kettőspontokkal elválasztott nevek listájának megadásával vagy többszörös megjelenítéssel.

Ezt az opciót óvatosan kell használni, mivel felülírja azt a keresési elérési utat, amelyet keményen osztott könyvtárba rendeztek. Ilyen esetben lehetséges, hogy nem szándékosan más keresési útvonalat használ, mint a futásidejű linker.

A linker a következő keresési útvonalakat használja a szükséges megosztott könyvtárak kereséséhez.

1.

A -rpath-link opciók által megadott könyvtárak.

2.

A -rpath opciók által megadott könyvtárak. A -rpath és a -rpath-link közötti különbség az, hogy a -rpath opciók által megadott könyvtárak a futtatható fájlban szerepelnek, és a futásidejűek, míg a -rpath-link beállítás csak a kapcsolat időben érvényes. Csak a natív linker.

3.

Az ELF rendszeren, ha a -rpath és az "rpath-link" opciókat nem használtuk, keressük meg az "LD_RUN_PATH" környezeti változó tartalmát. Csak a natív linker.

4.

A SunOS-ban, ha a -rpath opciót nem használtuk, keressünk minden, a -L opcióval megadott könyvtárat.

5.

Natív hivatkozó esetén az "LD_LIBRARY_PATH" környezeti változó tartalma.

6.

Egy natív ELF-linker esetén a megosztott könyvtár "DT_RUNPATH" vagy "DT_RPATH" könyvtárai a szükséges megosztott könyvtárakra keresnek. A "DT_RPATH" bejegyzések figyelmen kívül maradnak, ha léteznek "DT_RUNPATH" bejegyzések.

7.

Az alapértelmezett könyvtárak, általában a / lib és / usr / lib .

8.

Az ELF rendszerben lévő natív hivatkozó esetén, ha a /etc/ld.so.conf fájl létezik, az adott fájlban található könyvtárak listája.

Ha a szükséges megosztott könyvtár nem található, a linker figyelmeztetést ad, és folytatja a hivatkozást.

-shared

-Bshareable

Hozzon létre egy megosztott könyvtárat. Ezt jelenleg csak az ELF, az XCOFF és a SunOS platformokon támogatják. A SunOS-on a linker automatikusan létrehoz egy megosztott könyvtárat, ha a -e opciót nem használják, és a hivatkozásban nincsenek meghatározva szimbólumok.

--sort-common

Ez az opció azt jelenti, hogy az ld rendezi a közös szimbólumokat méret szerint, amikor azokat a megfelelő kimeneti szakaszokba helyezi. Először az összes byte szimbólumot, majd a két bájtot, majd a négy bájtot, majd minden mást. Ennek célja, hogy megakadályozza a szimbólumok közötti eltéréseket az igazítási korlátok miatt.

--specifikáció [ méret ]

Hasonló a --split-by-relochoz, de létrehoz egy új kimeneti részt minden egyes bemeneti fájlhoz, amikor a méret elérésre kerül. A méret alapértelmezett értéke 1-es méret, ha nem.

--specifikáció-reloc [ count ]

Megpróbálja létrehozni extra szakaszokat a kimeneti fájlban, hogy egyetlen fájl egyetlen szakaszában ne tartalmazzon többet az áthelyezésnél. Ez akkor hasznos, ha hatalmas áthelyezhető fájlokat generál, amelyek bizonyos valós idejű rendszermagokba tölthetők le a COFF objektumfájlformátummal; mivel a COFFcannot több mint 65535 áthelyezést jelent egyetlen szakaszban. Ne feledje, hogy ez nem működik olyan objektumfájlformátumokkal, amelyek nem támogatják az önkényes szakaszokat. A linker nem osztja fel az egyes bemeneti szakaszokat az újraelosztás érdekében, tehát ha egyetlen bemeneti rész többet tartalmaz, mint a számlálás áthelyezése, akkor egy kimeneti szakasz tartalmaz sok áthelyezést. az alapértelmezett érték 32768.

--stats

Számlálja ki és jelenítse meg a linker működésével kapcsolatos statisztikákat, például a végrehajtási időt és a memóriahasználatot.

--traditional formátumú

Néhány cél esetében az ld kimenete bizonyos értelemben különbözik a meglévő linker kimenetétől. Ez a kapcsoló kéri az ld-t , hogy a hagyományos formátumot használja.

Például a SunOS-on az ld egyesíti az ismétlődő bejegyzéseket a szimbólum-karakterlánc táblázatban. Ezzel akár 30 százalékkal is csökkentheti a kimeneti fájl méretét teljes hibakeresési információkkal. Sajnos a SunOS "dbx" program nem tudja olvasni az így létrejövő programot ("gdb" nincs gond). A --traditional-formátumú kapcsoló azt jelenti, hogy az ld nem egyesíti a kettős bejegyzéseket.

szekció-start sectionname = org

Keresse meg a kimeneti fájl egy részét az org . Ezt az opciót annyiszor használhatja, amennyit a parancssorban több rész megkereséséhez szükséges. org egyetlen hexadecimális egész szám; a többi linkerrel való kompatibilitás miatt elhagyhatja a vezető 0x-et, amely általában hexadecimális értékekkel van társítva. Megjegyzés: a keresztmetszet , az egyenlő jel (`` = '') és az org között nem lehet üres hely.

-Tbss org

-Tdata org

-Text org

Használja az org- ot a kimeneti fájl --- --- --- "bss", "adat" vagy "szöveg" szegmensének kiindulási címeként. org egyetlen hexadecimális egész szám; a többi linkerrel való kompatibilitás miatt elhagyhatja a vezető 0x-et, amely általában hexadecimális értékekkel van társítva.

--dll-bőbeszédű

--bőbeszédű

Az ld verziószámának megjelenítéséhez és a támogatott linkeremulációk listájának megjelenítéséhez. Megmutathatja, mely bemeneti fájlokat lehet és nem lehet megnyitni. Mutassa be a linker által használt hivatkozási parancsfájlt.

--version-script = verzió- parancsfájl

Adja meg a verziószkript nevét a linkerhez. Ezt általában akkor használják, ha megosztott könyvtárakat hoz létre, hogy további információkat adjon meg a létrehozandó könyvtár verzióiról. Ez a lehetőség csak az ELF platformokon érhető el, amelyek támogatják a megosztott könyvtárakat.

--warn-common

Figyelmeztetés, ha egy közös szimbólum egy másik közös szimbólummal vagy egy szimbólum definícióval van kombinálva. A Unix linkerek lehetővé teszik ezt a kissé hanyag gyakorlatot, de más operációs rendszereken lévő linkerek nem. Ez az opció lehetővé teszi a globális szimbólumok kombinálásával kapcsolatos problémák megoldását. Sajnos néhány C könyvtár használja ezt a gyakorlatot, így figyelmeztetéseket kaphat a könyvtárak szimbólumairól, valamint a programjairól.

Háromféle globális szimbólum van, amelyeket itt C példák szemléltetnek:

int i = 1;

A definíció, amely a kimeneti fájl inicializált adatrészében megy.

extern int i;

Egy nem definiált referencia, amely nem ad helyet. A változó definíciója vagy közös szimbóluma legyen valahol.

int i;

Egy közös szimbólum. Ha egy változóhoz csak egy (vagy több) közös szimbólum van, akkor a kimeneti fájl nem inicializált adatterületébe kerül. A linker több azonos szimbólumot egyesíti ugyanazon változó egyetlen szimbólumaként. Ha különböző méretűek, akkor a legnagyobb méreteket választja. A linker egy közös szimbólumot deklarál, ha van ugyanazon változó definíciója.

A --warn-common opció ötféle figyelmeztetést tud felmutatni. Minden figyelmeztetés pár sorból áll: az első a szimbólumot ismerteti, a második pedig az előző azonos nevű szimbólumot írja le. Egy vagy mindkét szimbólum közös szimbólum lesz.

1.

A közös szimbólum hivatkozássá alakítása, mivel már létezik egy definíció a szimbólumhoz.

(): warning: a ` (
): warning: defined here

2.

A közös szimbólum hivatkozássá alakítása, mert a szimbólum későbbi meghatározása megtörtént. Ez ugyanaz, mint az előző eset, kivéve, hogy a szimbólumokat más sorrendben találjuk meg.

(): warning: <

3.

Egy közös szimbólum egyesítése egy azonos azonos méretű közös szimbólummal.

(): figyelmeztetés: többszörös közös < (): warning: előző common here

4.

Egy közös szimbólum egyesítése egy korábbi nagyobb közös szimbólummal.

(
): warning: a common (
) által felülbírált ` 'gyakori: figyelmeztetés: nagyobb common here

5.

Egy közös szimbólum egy korábbi, kisebb közös szimbólummal való egyesítése. Ez ugyanaz, mint az előző eset, kivéve, hogy a szimbólumokat más sorrendben találjuk meg.

(): warning: gyakori a ` 'felülbíráló kisebb common (
): warning: kisebb common here

--warn-konstruktőrök

Figyelmeztetés, ha bármilyen globális konstruktort használnak. Ez csak néhány objektumfájlformátum esetében hasznos. A COFF vagy ELF formátumok esetében a linker nem ismeri fel a globális konstruktorok használatát.

--warn-multiple-gp

Figyelmeztetés, ha a kimeneti fájlban többszörös globális mutatóértékre van szükség. Ez csak bizonyos processzorok, például az Alpha számára érdemes. Pontosabban, egyes processzorok nagy értékű konstansokat helyeznek el egy speciális szakaszban. Egy speciális regiszter (a globális mutató) a szakasz közepére mutat, így a konstansok hatékonyan tölthetők be egy alapregiszterrel való relatív címzési módon keresztül. Mivel az alapregiszterrel kapcsolatos eltolódás fix és viszonylag kicsi (pl. 16 bites), ez korlátozza az állandó pool maximális méretét. Így nagy programokban gyakran több globális mutató értéket kell használni ahhoz, hogy minden lehetséges állandót meg tudjon birkózni. Ez az opció figyelmeztetést ad ki, amikor ez az eset fordul elő.

--warn egyszer

Csak egyszer figyelmeztessen minden egyes nem definiált szimbólumra, nem pedig egy modulra, amely utal rá.

--warn-szakasz-align

Figyelmeztetés, ha a kimeneti rész címe megváltozik az igazítás miatt. Tipikusan az illesztést bemeneti szakasz határozza meg. A cím csak akkor módosul, ha nincs kifejezetten megadva; azaz, ha az "SZEKCIÓK" parancs nem adja meg a szakasz kezdőcímét.

--whole-archív

Az összes archívum, amely a parancssorban a --whole-archive opció után szerepel, minden objektumfájlt a linkben lévő archívumban kell tartalmaznia, nem pedig a szükséges objektumfájlok archívumának keresésére. Ezt rendszerint egy archív fájl megosztott könyvtárba való bekapcsolására használják, és arra kényszerítik, hogy minden objektum szerepeljen a kapott megosztott könyvtárban. Ez az opció többször is használható.

Két megjegyzés, amikor ezt az opciót használja a gcc-ből: Először is, a gcc nem tudja ezt a lehetőséget, ezért a -Wl, -whole-archive-t kell használni. Másodszor, ne felejtsd el használni a -Wl, -no-whole-archívumot az archívumok listája után, mert a gcc hozzáadja saját archívumlistáját a linkhez, és nem akarja, hogy ez a zászló is hatással legyen azokra.

- wrap szimbólum

Használjon csomagolás funkciót a szimbólumhoz . Minden szimbólumra utaló nem definiált utalás "__ wrap_symbol" -ra fog megoldódni. Minden "__real_symbol" -ra definiált utalás megszűnik szimbólumként .

Ezzel a funkcióval egy burkológépet lehet létrehozni egy rendszerfunkcióhoz. A csomagolási funkciót "__wrap_symbol" -nak kell nevezni. Ha meg akarja hívni a rendszer funkcióját, akkor "__ real_symbol" -t kell hívnia.

Itt egy triviális példa:

void * __wrap_malloc (int c) {printf ("malloc nevű% ld \ n", c); visszatérés __real_malloc (c); }

Ha más kódot köti össze ezzel a fájllal - wrap malloc segítségével , akkor a "malloc" összes hívása helyett a "__wrap_malloc" funkciót hívja. A "__wrap_malloc" "__real_malloc" hívása a valódi "malloc" függvényt fogja hívni.

Lehet, hogy egy "__real_malloc" funkciót is szeretne megadni, így a --wrap opció nélküli kapcsolatok sikerülnek. Ha ezt megteszi, ne tegye a "__ real_malloc" definíciót ugyanabba a fájlba, mint a "__wrap_malloc"; Ha igen, akkor az összeszerelő megoldhatja a hívást, mielőtt a linkernek lehetősége lenne arra, hogy "malloc" -ra csomagolja.

--enable-new-dtags

--disable-new-dtags

Ez a linker létrehozhatja az új dinamikus címkéket az ELF-ben. De a régebbi ELF rendszerek nem értik meg őket. Ha megadja a --enable-new-dtagokat , a dinamikus címkék szükség szerint jönnek létre. Ha megadod a --disable-new-dtagot , akkor nem hoz létre új dinamikus címkéket. Alapértelmezés szerint az új dinamikus címkék nem jönnek létre. Vegye figyelembe, hogy ezek a beállítások csak az ELF rendszerekre vonatkoznak.

Az i386 PE kapcsoló támogatja a megosztott opciót, amely a kimenet dinamikusan kapcsolt könyvtárának (DLL) a normál futtatható fájl helyett. Ha ezt az opciót használja, akkor nevezze el a "* .dll" kimenetet. Ezenkívül a linker teljes mértékben támogatja a szabványos "* .def" fájlokat, amelyeket a linker parancssori sorában lehet megadni, mint egy objektumfájl (valójában meg kell előznie az archívumokat, ahonnan a szimbólumokat exportálja, mint egy normál objektumfájl).

Az összes célhoz tartozó opciók mellett az i386 PE kapcsoló további parancssori opciókat támogat, amelyek az i386 PE célpontra jellemzőek. Az értékeket elválasztó opciók elválaszthatók az értékektől szóközzel vagy egyenlő értékekkel.

--add-stdcall-alias

Adott esetben a stdcall-utótag (@ nn ) szimbólumokat exportáljuk as-is-ban, és a sztriptíva is leszedve.

- alap fájl fájl

Használja a fájlt, mint egy fájl nevét, amelyben elmenti a DLL-ek generálásához szükséges összes áttelepítés alap címét.

--dll

Hozzon létre egy DLL-t a rendszeres végrehajtható fájl helyett. Használhatsz -megosztást vagy egy "LIBRARY" megadást egy adott ".def" fájlban.

--enable-stdcall-fixup

--disable-stdcall-fixup

Ha a link olyan szimbólumot talál, amelyet nem tud feloldani, akkor megkísérel "fuzzy linkelést" keresni egy másik szimbólumot, amely csak a szimbólum nevében (cdecl vs stdcall) eltér, és ezt a szimbólumot összekapcsolja a meccset. Például a "_foo" nem definiált szimbólum kapcsolható a "_foo @ 12" funkcióhoz, vagy a "_bar @ 16" nem definiált szimbólum kapcsolható a "_bar" funkcióhoz. Amikor a linker ezt teszi, figyelmeztetést nyomtat, mivel rendszerint nem sikerült összekapcsolni, de néha a harmadik féltől származó dll-ekből létrehozott könyvtárakat is szükség lehet erre a szolgáltatásra. Ha megadja a --enable-stdcall-fixup funkciót, ez a funkció teljesen engedélyezett, és a figyelmeztetések nem kerülnek kinyomtatásra. Ha megadja a --disable-stdcall-fixup beállítást , akkor ez a funkció le van tiltva, és az ilyen eltérések hibák.

--export-ALL-szimbólumok

Adott esetben a DLL-ben a DLL-ben a globális szimbólumokat exportálják a DLL-ben. Ne feledje, hogy ez az alapértelmezett, ha egyébként nem lenne exportált szimbólum. Ha a szimbólumokat kifejezetten DEF-fájlokon keresztül importálják, vagy implicit módon a funkció attribútumain keresztül exportálják, akkor az alapértelmezés szerint nem exportál semmit, hacsak nem adjuk meg ezt a lehetőséget. Vegye figyelembe, hogy a "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" és "impure_ptr" szimbólumok nem lesznek automatikusan exportálva. A más DLL-ből importált szimbólumokat nem fogják újraexportálni, sem a DLL belső elrendezését meghatározó szimbólumokat, például a "_head_" vagy a "_iname" végződést. Ezenkívül a "libgcc", a "libstd ++", a "libmingw32" vagy a "crtX.o" szimbólumokat nem exportálják. A "__rtti_" vagy "__builtin_" -el kezdődő szimbólumokat nem exportálják a C ++ DLL-khez. Végül a cygwin-privát szimbólumok kiterjedt listája létezik, amelyeket nem exportálnak (nyilvánvalóan ez akkor érvényes, ha DLL-eket építenek a cygwin célok számára).

Ezek a cygwin-kizárások a következők: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_ cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3 "és" környezet ".

- kizárni-szimbólum szimbólum , szimbólum , ...

Olyan szimbólumok listáját adja meg, amelyeket nem szabad automatikusan exportálni. A szimbólumneveket vesszőkkel vagy kettőspontokkal lehet határolni.

--exclude-libs lib , lib , ...

Megadja azon archív könyvtárak listáját, amelyekből a szimbólumokat nem szabad automatikusan exportálni. A könyvtár nevét vesszővel vagy kettőspontokkal határolhatja. A "--exclude-libs ALL" kifejezés kizárja az összes archiválási könyvtárban lévő szimbólumokat az automatikus exportálásból. Az .def fájlban kifejezetten felsorolt ​​szimbólumok továbbra is exportálva, függetlenül attól, hogy melyik lehetőség van.

--file-igazítás

Adja meg a fájlok igazítását. A fájlban lévő szakaszok mindig a file-offset-eken kezdődnek, amelyek többszöröznek e számmal. Ez az alapértelmezett érték 512.

--heap tartalék

- takarékos tartalék

Adja meg, hogy milyen mennyiségű memóriát kell tárolni (és opcionálisan el kell készíteni), hogy ezt a programot gyűjteményként használja. Az alapértelmezett érték 1Mb foglalt, 4K elkötelezett.

- kép-alapérték

Használja az értéket a program vagy a dll alap címeként. Ez a legalacsonyabb memóriahely, amelyet a program vagy a DLL betöltésekor használunk. A dll-ek teljesítményének áthelyezésének és javításának szükségességét csökkenteni kell mindegyiknek egyedi alapcímét, és nem kell átfednie más dll-eket. Az alapértelmezett beállítás 0x400000 a végrehajtható fájlokhoz és 0x10000000 a dll-ekhez.

--kill-at

Adott esetben a stdcall-utótagokat (@ nn ) a kivitelt megelőzően a szimbólumokról le lesz vonva.

--major-image-version érték

Beállítja a `` image verzió '' legnagyobb számát. Az alapértelmezett értékek: 1.

--major-os-verzió érték

Az "os verzió" legnagyobb számát állítja be. Alapértékek 4-re.

--major-alrendszer-verzió érték

Az "alrendszer-verzió" legnagyobb számát állítja be. Alapértékek 4-re.

--minor-image-version érték

Beállítja a `` image verzió '' kisebb számát. Alapértékek 0-ra.

--minor-os verzió érték

Beállítja az "os verzió" kisebb számát. Alapértékek 0-ra.

--minor-alrendszer-verzió értéke

Az alrendszer változatának kisebb számát állítja be. Alapértékek 0-ra.

- kimenő-def fájl

A linker létrehozza a fájl fájlt, amely tartalmaz egy DEF fájlt, amely megfelel a linker által generált DLL-nek. Ez a DEF fájl (amelyet "* .def" névnek kell nevezni) használhat egy "dlltool" nevű import könyvtár létrehozására, vagy használható az automatikus vagy implicit módon exportált szimbólumok hivatkozására.

- out-implib fájl

A linker létrehozza a fájl fájlt, amely tartalmaz egy import lib-et, amely megfelel a linker által generált DLL-nek. Ez az import lib (amelyet "* .dll.a" vagy "* .a" névvel lehet összekapcsolni az ügyfelekkel az generált DLL-vel szemben); ez a viselkedés lehetővé teszi egy külön "dlltool" import könyvtár létrehozásának lépését.

--enable-auto-image-bázis

Automatikusan válassza ki a DLL-k képalapját, hacsak nincs megadva a "--image-base" argumentumot. A DLL-ből generált hash segítségével minden egyes DLL-hez egyedi képalapokat hozhat létre, elkerülhetők a memória-ütközések és áttelepítések, amelyek késleltethetik a program végrehajtását.

--disable-auto-image-bázis

Ne hozzon létre automatikusan egyedi képalapot. Ha nincs felhasználó által megadott képalap ("--image-base"), akkor használja a platform alapértelmezését.

--dll-search-prefix string

Amikor dinamikusan kapcsolódik egy dll-hez importkönyvtár nélkül, keresse meg a " .dll" -t, a "lib .dll" helyett. Ez a viselkedés megkönnyíti a különbséget a különböző "subplatforms" ': natív, cygwin, uwin, pw stb. Számára létrehozott DLL-ek között. Például a cygwin DLL általában "--dll-search-prefix = cyg".

--enable-auto-import

Csinálhatja a "_symbol" és a "__imp__symbol" kifinomult összekapcsolását a DAT-ok importálásához DLL-ből, és hozzon létre a szükséges szimbólumokat az import könyvtáraknak ezekkel a DATAexports-kal történő létrehozásakor. Ez általában "csak működni fog" --- de néha láthatja ezt az üzenetet:

A "változó" "nem importálható. Kérjük, olvassa el az ld" --enable-auto-import "dokumentációját."

Ez az üzenet akkor jelentkezik, amikor néhány (al) kifejezés egy olyan címen érkezik, amelyet végül két állomás összege ad meg (a Win32 importálási táblázatok csak egy engedélyt adnak). Az esetek, amikor ez bekövetkezik, magukban foglalják a DLL-ből importált struktur változók tagterületeit, valamint egy állandó indexet egy DLL-ből importált tömbváltozó használatával. Bármely többszavas változó (tömbök, struktúrák, hosszú ideig stb.) Kiválthatja ezt a hibaállapotot. Azonban, függetlenül a sértő exportált változó pontos adattípustól, az ld mindig észleli, kiadja a figyelmeztetést és kilép.

Ez a nehézség számos módon megoldható, függetlenül az exportált változó adattípusától:

Az egyik módja a --enable-run-time-pseudo-reloc kapcsoló használata. Ezzel a feladattal az ügyfélkódban lévő hivatkozásoknak a futásidejű környezetre történő beállítása feladata, így ez a módszer csak akkor működik, ha a futásidejű környezet támogatja ezt a funkciót.

Egy másik megoldás az, hogy az egyik "állandót" egy változónak nevezzük - azaz ismeretlen és nem optimalizálható a fordítási idő alatt. A tömbökhöz két lehetőség van: a) az indexee (a tömb címe) egy változót, vagy b) egy változó "állandó" indexét. És így:

extern típusú extern_array []; extern_array [1] -> {illékony típus * t = extern_array; t [1]}

vagy

extern típusú extern_array []; extern_array [1] -> {illékony int t = 1; extern_array [t]}

Az építmények (és a legtöbb többszöveges adattípus esetében) az egyetlen lehetőség, hogy maga a struktúra (vagy a hosszú, vagy ...) változó legyen:

extern struct extern_struct; extern_struct.field -> {illékony struktúra s * t = & extern_struct; t-> mező}

vagy

extern hosszú hosszú extern_ll; extern_ll -> {volatile long long * local_ll = & extern_ll; * local_ll}

A nehézség kezelésének harmadik módja az, hogy elhagyja a "sértő" szimbólum "automatikus importálását", és "__declspec (dllimport)" jelöléssel látja el. Azonban a gyakorlatban szükség van a fordítási idő #defines használatára annak jelzésére, hogy DLL-t építesz, olyan ügyfélkódot állít elő, amely a DLL-hez kapcsolódik, vagy egyszerűen egy statikus könyvtárat épít fel / kapcsolódik. A "közvetlen cím és az állandó offset" probléma megoldásának különböző módjai közötti választás során figyelembe kell vennie a tipikus valós felhasználást:

Eredeti:

--foo.h extern int arr []; --foo.c #include "foo.h" érvénytelen fő (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

1. megoldás:

--foo.h extern int arr []; --foo.c #include "foo.h" érvénytelen fő (int argc, char ** argv) {/ * Ez a megoldás win32 és cygwin; ne "optimalizálja" * / illékony int * parr = arr; printf ( "% d \ n", Parr [1]); }

2. megoldás:

--foo.h / * Megjegyzés: az automatikus kivitelt feltételezzük (nincs __declspec (dllexport)) * / #if (definiált (_WIN32) || definiált (__ CYGWIN__)) && \! (definiált (FOO_BUILD_DLL) || definiált (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c #include "foo.h" érvénytelen fő (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

A probléma elkerülésének negyedik módja a könyvtár újbóli kódolása a funkcionális felület helyett a sértő változók (pl. Set_foo () és get_foo () accessor függvények adatinterfészének használata ).

--disable-auto-import

Ne kísérelje meg a "_symbol" ("_symbol") "DIMAGE_Symbol" ("__imp__symbol") illesztését DATA-importokból DLL-ből.

--enable-runtime-ál-RELOC

Ha a kódod tartalmazza a --enable-auto-import szakaszban leírt kifejezéseket, vagyis a DATAimports a nem nulla eltolású DLL-től, ez a kapcsoló létrehoz egy "futásidejű ál-áthelyezések" vektort, amelyet a futási környezet használhat a hivatkozások beállításához az ügyfélkódban lévő ilyen adatokhoz.

--disable-runtime-ál-RELOC

Ne hozzon létre pseudo áthelyezést a nem nulla eltolású DATA importáláshoz DLL-kből. Ez az alapértelmezett.

--enable-extra-pe-debug

Az automatikus importálás szimbólummal kapcsolatos további hibakeresési információk megjelenítése.

--section-igazítás

Beállítja a szakaszok igazítását. A memóriában lévő részek mindig a címek többszörösével kezdődnek. Alapértékek 0x1000-re.

- tartalék tartalék

- Állandó tartalék

Adja meg, hogy mennyi memóriát tartalékoljon (és opcionálisan elkövethessen), hogy ezt a programot veremként használja. Az alapértelmezett 2Mb foglalt, 4K elkötelezett.

- a rendszer, amely

--szektor, amely :

--szektor, amely : . kisebb

Megadja azt az alrendszert, amely alatt a program végrehajtásra kerül. A jogi értékek "natív", "ablak", "konzol" és "posix". Opcionálisan beállíthatja az alrendszer verzióját is.

Fontos: Az ember paranccsal ( % man ) tekintse meg, hogyan használják a parancsot az adott számítógépen.