Príkaz Linux / Unix: Id

NÁZOV

ld - Použitie LD , GNU linker

SYNOPSA

ld [ možnosti ] objfile ...

POPIS

ld spája množstvo objektových a archívnych súborov , premiestňuje ich údaje a odkazuje na odkazy symbolov. Zvyčajne posledným krokom pri zostavovaní programu je spustenie ld .

ld prijíma jazykové súbory Linker Command napísané v nadradenej verzii syntaxe jazyka Command Language AT & T, aby poskytli explicitnú a úplnú kontrolu nad procesom prepojenia.

Táto stránka mana nepopisuje príkazový jazyk; pozrite sa na položku ld v "info" alebo na príručke ld: GNU linker, kde nájdete úplné informácie o príkazovom jazyku a ďalších aspektoch linkera GNU.

Táto verzia ld používa univerzálne knižnice BFD na prácu s objektovými súbormi. To umožňuje čítať, kombinovať a zapisovať objektové súbory v rôznych formátoch - napríklad COFF alebo "a.out". Rôzne formáty môžu byť navzájom prepojené na vytvorenie ľubovoľného dostupného súboru objektov.

Okrem flexibilnosti je GNU linker užitočnejší ako iné linkery pri poskytovaní diagnostických informácií. Mnoho linkerov opustí výkon bezprostredne po tom, ako narazí na chybu; ak je to možné, ld pokračuje v vykonávaní, čo vám umožní identifikovať ďalšie chyby (alebo v niektorých prípadoch získať výstupný súbor napriek chybe).

GNU linker ld je určený na pokrytie širokej škály situácií a aby bol čo najviac kompatibilný s ostatnými linkermi. V dôsledku toho máte veľa možností na kontrolu svojho správania.

MOŽNOSTI

Linker podporuje množstvo možností príkazového riadku , ale v skutočnosti sa niektoré z nich používajú v akomkoľvek konkrétnom kontexte. Napríklad časté používanie ld spája štandardné objekty Unixu so štandardným podporovaným systémom Unix . Na takomto systéme odkaz na súbor "hello.o":

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

To hovorí, že ld vytvorí súbor nazvaný výstup ako výsledok prepojenia súboru "/lib/crt0.o" s "hello.o" a knižnice "libc.a", ktorá pochádza zo štandardných adresárov vyhľadávania. (Pozri diskusiu o možnosti -l nižšie.)

Niektoré možnosti príkazového riadku na ld môžu byť zadané v ktoromkoľvek bode príkazového riadku. Možnosti, ktoré sa vzťahujú na súbory, napríklad -l alebo -T , spôsobujú čítanie súboru v bode, v ktorom sa táto možnosť zobrazí v príkazovom riadku vzhľadom na súbory objektov a ďalšie možnosti súboru. Opakovanie volieb iných súborov s iným argumentom nebude mať žiadny ďalší účinok, ani nebude mať vplyv na predchádzajúce udalosti (tie, ktoré sú ďalej vľavo na príkazovom riadku) tejto možnosti. Možnosti, ktoré môžu byť zmysluplne špecifikované viac ako raz, sú uvedené v nasledujúcich popisoch.

Argumenty bez možnosti sú objektové súbory alebo archívy, ktoré majú byť prepojené. Môžu nasledovať, predchádzať alebo byť zmiešané s možnosťami príkazového riadku, s výnimkou toho, že argument medzi objektom a jeho argumentom nemôže byť umiestnený.

Zvyčajne sa odkazovač spustí s aspoň jedným objektovým súborom, ale môžete špecifikovať iné formy binárnych vstupných súborov pomocou príkazov -l , -R a príkazového jazyka skriptu. Ak nie sú zadané žiadne binárne vstupné súbory, odkazovač nevytvára žiadny výstup a vydá hlásenie No input files .

Ak linker nerozpozná formát súboru objektu, predpokladá sa, že ide o spojovací skript. Takto zadaný skript rozširuje hlavný linkerový skript, ktorý sa používa pre odkaz (buď predvolený skript spojovníka, alebo ten, ktorý je špecifikovaný pomocou -T ). Táto funkcia dovoľuje odkazovačovi prepojiť sa so súborom, ktorý sa javí ako objekt alebo archív, ale v skutočnosti iba definuje niektoré hodnoty symbolov alebo používa "INPUT" alebo "GROUP" na načítanie ďalších objektov. Upozorňujeme, že zadanie skriptu týmto spôsobom iba rozšíri hlavný linkerový skript; použite voľbu -T na výmenu predvoleného prepojovacieho skriptu.

Pre možnosti, ktorých mená sú jediné písmená, musia byť argumenty možností buď nasledovať s opčným písmom bez toho, aby zasahovali do medzery, alebo by mali byť uvedené ako samostatné argumenty bezprostredne za možnosťou, ktorá ich vyžaduje.

Pre voľby, ktorých mená sú viaceré písmená, môže pred názvom možnosti predchádzať jedno či druhé; napríklad symbol -trace a symbol -trace sú ekvivalentné. Poznámka - existuje jedno výnimka z tohto pravidla. Možnosti viacerých písmen, ktoré začínajú malými písmenami "o", je možné predchádzať iba dvomi pomlčkami. To má zmierniť zmätok s voľbou -o . Napríklad -omagic nastavuje názov výstupného súboru na magickú, zatiaľ čo --omagic nastavuje príznak NMAGIC na výstup.

Argumenty pre viaceré písmená musia byť buď oddelené od názvu možnosti znakom rovnosti, alebo musia byť uvedené ako samostatné argumenty bezprostredne za možnosťou, ktorá ich vyžaduje. Napríklad --trace-symbol foo a -trace-symbol = foo sú ekvivalentné. Používajú sa jedinečné skratky názvov viacerých písmen.

Poznámka: ak je linker vyvolaný nepriamo cez ovládač kompilátora (napr. Gcc ), všetky voľby príkazového riadku linkera by mali mať predponu -Wl (alebo čo je vhodné pre príslušný ovládač kompilátora) takto:

gcc -Wl, - startgroup foo.o bar.o -Wl, - koncová skupina

To je dôležité, pretože v opačnom prípade program ovládača kompilátorov môže ticho spustiť prepojovacie možnosti, čo má za následok zlý odkaz.

Tu je tabuľka generických prepínačov príkazového riadku akceptovaných GNU linkerom:

-a kľúčové slovo

Táto možnosť je podporovaná pre kompatibilitu s HP / UX. Argument kľúčového slova musí byť jeden z archívov , zdieľaných alebo predvolených . -archív je funkčne ekvivalentný s -Bstatic , a ďalšie dve kľúčové slová sú funkčne ekvivalentné -Bodynamic . Táto možnosť sa môže použiť niekoľkokrát.

- Architektúra

--architecture = architektúra

V súčasnej verzii ld je táto možnosť užitočná len pre architektúry rodiny Intel 960. V tejto konfigurácii ld argument architektúry identifikuje konkrétnu architektúru v rodine 960, ktorá umožňuje niektoré bezpečnostné opatrenia a modifikuje cestu vyhľadávania knižnice archívu.

Budúce vydania ld môžu podporovať podobné funkcie pre iné rodiny architektúry.

-b vstupný formát

--format = vstupný formát

ld môže byť nakonfigurovaný tak, aby podporoval viac ako jeden typ súboru objektu. Ak je váš ld takto nakonfigurovaný, môžete použiť voľbu -b na zadanie binárneho formátu súborov vstupných objektov, ktoré sa nachádzajú na tejto príkazovej riadke. Aj keď je ld nakonfigurovaný tak, aby podporoval formáty alternatívnych objektov, zvyčajne to nemusíte špecifikovať, pretože ld by mal byť nakonfigurovaný tak, aby očakával ako predvolený vstupný formát najbežnejší formát na každom počítači. vstupný formát je textový reťazec, názov konkrétneho formátu podporovaného knižnicami BFD. (Môžete zobraziť dostupné binárne formáty pomocou objdump -i .)

Túto možnosť použite, ak prepájate súbory s nezvyčajným binárnym formátom. Môžete tiež použiť -b na explicitné prepínanie formátov (pri prepájaní objektových súborov rôznych formátov) tak, že do každej skupiny objektových súborov v určitom formáte zahrniete formát vstupu -b .

Predvolený formát je prevzatý z premennej prostredia "GNUTARGET".

Môžete tiež definovať vstupný formát zo skriptu pomocou príkazu "TARGET";

-c MRI-commandfile

--mri-script = MRI-commandfile

Pre kompatibilitu s linkermi vytvorenými pomocou MRI, ld prijíma súbory skriptov napísané v alternatívnom, obmedzenom príkazovom jazyku popísanom v sekcii Súbory kompatibilných skriptov MRI v dokumentácii GNU ld. Vložte súbory skriptov MRI s voľbou -c ; použite voľbu -T na spustenie skriptov spojovníkov napísaných vo všeobecnom skriptovacom jazyku ld . Ak MRI-cmdfile neexistuje, ld hľadá v adresároch určených ľubovoľnými možnosťami -L .

-d

dc

-dp

Tieto tri možnosti sú ekvivalentné. viaceré formy sú podporované z dôvodu kompatibility s inými linkermi. Priradia priestor bežným symbolom, aj keď je špecifikovaný premiestniteľný výstupný súbor (s -r ). Príkaz skriptu "FORCE_COMMON_ALLOCATION" má rovnaký účinok.

-e vstup

--entry = vstup

Použite záznam ako explicitný symbol pre začiatočné spustenie vášho programu namiesto predvoleného vstupného bodu. Ak neexistuje žiaden symbol označovaný ako vstup , linker sa pokúsi analyzovať záznam ako číslo a použiť ho ako vstupnú adresu (číslo bude interpretované v základni 10, môžete použiť vedúcu 0x pre základňu 16 alebo vedúcu 0 pre základňu 8).

-E

--export dynamické

Pri vytváraní dynamicky prepojeného spustiteľného súboru pridajte všetky symboly do tabuľky dynamických symbolov. Tabuľka dynamických symbolov je súbor symbolov, ktoré sú viditeľné z dynamických objektov v čase spustenia.

Ak túto možnosť nepoužívate, tabuľka dynamických symbolov bude normálne obsahovať len tie symboly, na ktoré odkazuje nejaký dynamický objekt uvedený v odkazu.

Ak použijete "dlopen" na načítanie dynamického objektu, ktorý sa musí vrátiť späť k symbolom definovaným programom, namiesto nejakého iného dynamického objektu, budete pravdepodobne musieť túto možnosť použiť pri prepojení samotného programu.

Môžete tiež použiť skript verzie, ak chcete, aké symboly by ste mali pridať do tabuľky dynamických symbolov, ak to podporuje výstupný formát. Pozrite si popis --version-script v @ ref {VERSION}.

-EB

Prepojte veľké endiánske objekty. To ovplyvňuje predvolený výstupný formát.

-el

Prepojte malé endiánske objekty. To ovplyvňuje predvolený výstupný formát.

-f

- pomocné meno

Pri vytváraní zdieľaného objektu ELF nastavte interné pole DT_AUXILIARY na zadaný názov. To informuje dynamický linker, že tabuľka symbolov zdieľaného objektu by sa mala použiť ako pomocný filter na tabuľke symbolov názvu zdieľaného objektu.

Ak neskôr spojíte program s týmto objektom filtra, potom pri spustení programu sa dynamický linker zobrazí pole DT_AUXILIARY. Ak dynamický linker vyrieši akékoľvek symboly z filtračného objektu, najskôr skontroluje, či je v názve zdieľaného objektu definícia. Ak existuje, použije sa namiesto definície v objekte filtra. Názov zdieľaného objektu nemusí existovať. Takto môže byť názov zdieľaného objektu použitý na poskytnutie alternatívnej implementácie určitých funkcií, pravdepodobne na ladenie alebo výkon špecifický pre stroj.

Táto možnosť môže byť zadaná viac ako raz. Položky DT_AUXILIARY budú vytvorené v poradí, v akom sa zobrazia na príkazovom riadku.

-F meno

- meno filtra

Pri vytváraní zdieľaného objektu ELF nastavte interné pole DT_FILTER na zadaný názov. To informuje dynamický linker, že tabuľka symbolov vytvoreného zdieľaného objektu by sa mala použiť ako filter na tabuľke symbolov názvu zdieľaného objektu.

Ak neskôr spojíte program s týmto objektom filtra, potom pri spustení programu dynamický linker zobrazí pole DT_FILTER. Dynamický spojovací článok vymaže symboly podľa tabuľky symbolov objektu filtra ako obvykle, ale skutočne odkazuje na definície, ktoré sa nachádzajú v názve zdieľaného objektu. Preto môže byť objekt filtra použitý na výber podmnožiny symbolov poskytnutých názvom objektu.

Niektorí starší linkeri použili voľbu -F v celej kompilácii s nástrojovou reťazou pre špecifikovanie formátu objektového súboru pre vstupné aj výstupné objektové súbory. GNU linker používa na tento účel iné mechanizmy: -b , --format , --formatovanie možností, príkaz "TARGET" v linkerových skriptoch a premenná prostredia GNUTARGET. GNU linker ignoruje voľbu -F, ak nevytvorí zdieľaný objekt ELF.

-fini meno

Pri vytváraní spustiteľného alebo zdieľaného objektu ELF zavolajte NAME, keď sa spustitelný alebo zdieľaný objekt uvoľní, nastavením DT_FINI na adresu funkcie. Predvolene odkazovač používa ako funkciu na volanie funkciu "_fini".

-g

Ignorované. Za predpokladu kompatibility s inými nástrojmi.

-G hodnotu

--gpsize = hodnota

Nastavte maximálnu veľkosť objektov, ktoré sa majú optimalizovať, pomocou veľkosti registra GP. To je zmysluplné len pre formáty objektových súborov, ako napríklad MIPS ECOFF, ktoré podporujú umiestňovanie veľkých a malých objektov do rôznych častí. Toto sa ignoruje pre iné formáty súborov objektov.

-h meno

-soname = meno

Pri vytváraní zdieľaného objektu ELF nastavte interné pole DT_SONAME na zadaný názov. Keď je spustiteľný súbor prepojený so zdieľaným objektom, ktorý má pole DT_SONAME, potom sa po spustení spustiteľného súboru pokúsi dynamický linker načítať zdieľaný objekt zadaný poľom DT_SONAME namiesto použitia názvu súboru daného odkazovači.

-i

Vykonajte prírastkové prepojenie (rovnako ako voľba -r ).

-init meno

Pri vytváraní spustiteľného alebo zdieľaného objektu ELF zavolajte NAME, keď je spustený spustiteľný alebo zdieľaný objekt, nastavením DT_INIT na adresu funkcie. Predvolene odkazovač používa funkciu "_init" ako funkciu na volanie.

-l archív

--library = archív

Pridajte archív archívnych súborov do zoznamu súborov, ktoré chcete prepojiť. Táto možnosť sa môže použiť niekoľkokrát. ld vyhľadá v svojom zozname cien výskyt "libarchive.a" pre každý špecifikovaný archív .

Na systémoch, ktoré podporujú zdieľané knižnice, môže ld vyhľadávať aj knižnice s rozšíreniami inými ako ".a". Konkrétne, na systémoch ELF a SunOS, ld vyhľadá adresár pre knižnicu s príponou ".so" predtým, než vyhľadá jeden s príponou ".a". Podľa konvencie označuje rozšírenie ".so" zdieľanú knižnicu.

Linker vyhľadá archív len raz, na mieste, kde je zadané na príkazovom riadku. Ak archív definuje symbol, ktorý nebol definovaný v niektorom objekte, ktorý sa objavil pred archívom na príkazovom riadku, linker bude obsahovať príslušný súbor (y) z archívu. Avšak nedefinovaný symbol v objekte, ktorý sa objaví neskôr na príkazovom riadku, nespôsobí, že linker znovu vyhľadá archív.

Pozrite si možnosť - ( možnosť spôsobu, ako vynútiť odkazovač na viacnásobné vyhľadávanie archívov.

Rovnaký archív môžete uviesť na príkazovom riadku viackrát.

Tento typ vyhľadávania archívov je štandardný pre unixové linkery. Ak však používate ld onAIX, všimnite si, že sa líši od správania spojovacej jednotky AIX.

-L searchdir

--library-path = searchdir

Pridajte path searchdir do zoznamu ciest, ktoré budú vyhľadávať archívne knižnice a ld riadiace skripty. Túto možnosť môžete používať niekoľkokrát. Adresáre sa vyhľadávajú v poradí, v akom sú zadané na príkazovom riadku. Adresy zadané na príkazovom riadku sa vyhľadávajú pred štandardnými adresármi. Všetky možnosti -L sa vzťahujú na všetky možnosti -l , bez ohľadu na poradie, v ktorom sa zobrazujú možnosti.

Ak vyhľadávací reťazec začína reťazcom "=", potom "=" bude nahradený predponou sysroot , ktorou je cesta určená pri nakonfigurovaní linkera.

Predvolená sada vyhľadávaných ciest (bez zadania s -L ) závisí od toho, ktorý emulačný režim ld používa, a v niektorých prípadoch aj od toho, ako bol nakonfigurovaný.

Cesta môže byť tiež zadaná v prepojovacom skripte s príkazom "SEARCH_DIR". Adresáre zadané týmto spôsobom sa vyhľadávajú v bode, v ktorom sa v príkazovom riadku objaví odkazovací skript.

-m emulácia

Emulácia emulátora . Môžete zobraziť dostupné emulácie pomocou volieb --verbose alebo -V .

Ak sa voľba -m nepoužíva, emulácia sa odoberie z premennej prostredia "LDEMULATION", ak je definovaná.

V opačnom prípade predvolená emulácia závisí od toho, ako bol nakonfigurovaný linker.

-M

--print-máp

Vytlačte mapu odkazov na štandardný výstup. Mapa odkazov poskytuje informácie o prepojení, vrátane nasledujúcich informácií:

*

Kde sú objektové súbory a symboly mapované do pamäte.

*

Ako sú pridelené bežné symboly.

*

Všetci členovia archívu zahrnutí do odkazu, s uvedením symbolu, ktorý spôsobil, že bol archív členom prinesený.

-n

--nmagic

Vypnite zarovnanie stránok a označte výstup ako "NMAGIC", ak je to možné.

-N

--omagic

Nastavte sekcie textu a údajov tak, aby boli čitateľné a zapisovateľné. Tiež nie je zarovnávať dátový segment so stránkami a zakázať prepojenie so zdieľanými knižnicami. Ak výstupný formát podporuje štýl magie Unixu, označte výstup ako "OMAGIC".

--no-omagic

Táto možnosť neguje väčšinu účinkov voľby -N . Nastavuje textovú sekciu iba na čítanie a núti dátový segment na zarovnanie strán. Poznámka - táto možnosť neumožňuje prepojenie so zdieľanými knižnicami. Použite -Bodynamic pre toto.

-o výstup

- výstup = výstup

Použite výstup ako názov pre program vytvorený ld ; ak táto možnosť nie je zadaná, predvolene sa používa názov a.out . Príkaz skriptu "OUTPUT" môže tiež špecifikovať názov výstupného súboru.

-O úroveň

Ak je úroveň číselných hodnôt vyššia ako nula ld, optimalizuje sa výstup. Toto môže trvať podstatne dlhšie, a preto by malo byť pravdepodobne povolené len pre poslednú binárnu.

-q

--emit-relocs

Ponechajte sekcie a obsah premiestnenia v plne prepojených súboroch s exececutables. Nástroj na analýzu odkazov a optimalizačné nástroje môžu tieto informácie potrebovať, aby mohli vykonať správne úpravy spustiteľných súborov. Výsledkom sú väčšie spustiteľné súbory.

Táto možnosť je v súčasnosti podporovaná iba na platformách ELF.

-r

--relocateable

Generovať premiestniteľný výstup --- tj vygenerovať výstupný súbor, ktorý môže zase slúžiť ako vstup pre ld . Toto sa často nazýva čiastočné prepojenie . Ako vedľajší efekt v prostrediach, ktoré podporujú štandardné magické čísla systému Unix, táto možnosť tiež nastavuje magické číslo výstupného súboru na hodnotu "OMAGIC". Ak táto možnosť nie je zadaná, vytvorí sa absolútny súbor. Pri prepájaní programov C ++ táto možnosť nevyrieši odkazy na konštruktory; na to, použite -Ur .

Ak vstupný súbor nemá rovnaký formát ako výstupný súbor, čiastočné prepojenie je podporované iba vtedy, ak tento vstupný súbor neobsahuje žiadne presuny. Rôzne výstupné formáty môžu mať ďalšie obmedzenia; napríklad niektoré formáty založené na "a.out" nepodporujú čiastočné prepojenie so vstupnými súbormi v iných formátoch.

Táto voľba robí to isté ako -i .

-R súboru

- just-symbols = názov súboru

Čítajte názvy symbolov a ich adresy z názvu súboru , ale nepresúvajte ich ani ich nezahrňte do výstupu. To umožňuje, aby váš výstupný súbor symbolicky odkazoval na absolútne miesta pamäte definované v iných programoch. Túto možnosť môžete používať viackrát.

Pre kompatibilitu s inými linkérmi ELF, ak za voľbou -R nasleduje názov adresára, nie názov súboru, považuje sa to za voľbu -rath .

-s

--strip-all

Vynechajte všetky informácie o symboloch z výstupného súboru.

-S

--strip-debug

Vynechajte informácie o symboloch debuggeru (ale nie všetky symboly) z výstupného súboru.

-t

--trace

Vytlačte názvy vstupných súborov ako ich spracováva ld .

-T scriptfile

skript = scriptfile

Použite scriptfile ako linker skript. Tento skript nahradí ld skript predvoleného odkazu (namiesto toho, aby k nemu pridával), takže príkazový súbor musí špecifikovať všetko potrebné na opis výstupného súboru. Ak skriptový súbor neexistuje v aktuálnom adresári, "ld" ho vyhľadá v adresároch určených ľubovoľnými predvoľbami -L . Možnosti viacerých -T sa hromadia.

-u symbol

--undefined = symbol

Symbol sily, ktorý sa má zadávať vo výstupnom súbore ako nedefinovaný symbol. Toto môže napríklad spúšťať prepojenie ďalších modulov zo štandardných knižníc. -u sa môže zopakovať s rôznymi argumentmi, aby sa zadali ďalšie nedefinované symboly. Táto možnosť je ekvivalentná príkazu "EXTERN" linker script.

UR

Pre iné programy ako C ++ je táto voľba ekvivalentná s -r : generuje premiestniteľný výstup - tj výstupný súbor, ktorý môže zasa slúžiť ako vstup pre ld . Pri prepájaní programov C ++ -Ur nerozhoduje odkazy na konštruktory, na rozdiel od -r . Nepoužíva sa používať -Ur na súbory, ktoré boli sami prepojené s -Ur ; akonáhle bola postavená konštrukčná tabuľka, nie je možné ju pridať. Použite -Ur iba pre posledný čiastočný odkaz a -r pre ostatné.

--unique [= SECTION ]

Vytvorí samostatnú výstupnú sekciu pre každú vstupnú sekciu zodpovedajúcu sekcii SECTION alebo ak chýba voliteľný argument SECTION divokej karty, pre každú sekciu vstupu pre sirénty. Sirotská sekcia nie je konkrétne uvedená v spojovacom skripte. Túto možnosť môžete použiť na príkazovom riadku viackrát; Zabraňuje normálnemu zlúčovaniu vstupných častí s rovnakým názvom, priradením priradených výstupných sekcií do skriptov spojovníkov.

-v

--version

-V

Zobrazte číslo verzie pre ld . Voμba -V uvádza aj podporované emulácie.

-X

--discard-all

Odstráňte všetky miestne symboly.

-X

--discard-miestna

Odstráňte všetky dočasné miestne symboly. Pre väčšinu cieľov sú to všetky miestne symboly, ktorých mená začínajú L.

-y symbol

--trace-symbol = symbol

Vytlačte názov každého prepojeného súboru, v ktorom sa objaví symbol . Táto možnosť môže byť poskytnutá niekoľkokrát. Na mnohých systémoch je potrebné predbežne podčiarknuť.

Táto možnosť je užitočná, ak vo svojom prepojení máte neurčený symbol, ale neviete, odkiaľ odkaz pochádza.

-Y cesta

Pridať cestu k predvolenej knižničnej ceste. Táto možnosť existuje pre kompatibilitu Solaris.

-z kľúčové slovo

Rozpoznané kľúčové slová sú "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", " ". Ostatné kľúčové slová sú ignorované pre kompatibilitu Solaris. "initfirst" označuje objekt, ktorý sa má inicializovať najskôr pri behu pred akýmikoľvek inými objektmi. "interpose" označuje objekt, ktorý sa v tabuľke symbolov nachádza pred všetkými symbolmi, ale primárnym spustiteľným súborom, "loadfltr" označuje objekt, ktorý má byť spracovaný ihneď počas spustenia "nodefaultlib" označuje objekt, ktorý ignoruje vyhľadávanie závislostí tohto objektu všetky predvolené cesty vyhľadávania knižnice. "nodelete" označuje, že objekt by nemal byť zaťažený pri behu. "nodlopen" označuje objekt, ktorý nie je k dispozícii pre "dlopen". "nodump" označuje, že objekt nemôže byť zlikvidovaný "dldump". "teraz" označí objekt neviazanou väzbou runtime. "pôvod" znamená, že objekt môže obsahovať $ ORIGIN. "defs" nepovoľuje nedefinované symboly. "muldefs" umožňuje viacero definícií. "combreloc" kombinuje viacero úsekov premiestňovania a triedi ich tak, aby umožnili vyhľadanie dynamického vyhľadávania cache.

"nocombreloc" zakáže kombináciu viacerých častí premiestňovania. "nocopyreloc" zabraňuje výrobe kopírovania.

- ( archívy -)

- archívy skupín štartov - end-group

Archívom by mal byť zoznam archívnych súborov . Môžu to byť buď explicitné názvy súborov, alebo -l možnosti.

Zadané archívy sa vyhľadávajú opakovane, kým sa nevytvoria nové nedefinované referencie. Za normálnych okolností sa archív vyhľadá iba raz v poradí, ktoré je zadané na príkazovom riadku. Ak je v tomto archíve potrebný symbol na vyriešenie nedefinovaného symbolu, na ktorý odkazuje objekt v archíve, ktorý sa objaví neskôr na príkazovom riadku, linker by tento odkaz nemohol vyriešiť. Zoskupením archívov sa všetky vyhľadávajú opakovane, kým sa nevyriešia všetky možné odkazy.

Použitie tejto možnosti má výrazné výkonové náklady. Najlepšie je používať iba vtedy, keď existujú nevyhnutné kruhové odkazy medzi dvomi alebo viacerými archívmi.

--accept-neznámy-input-oblúk

--no-accept-neznámy-input-oblúk

Povie linkeru, aby prijal vstupné súbory, ktorých architektúra sa nedá rozpoznať. Predpokladom je, že používateľ vie, čo robia, a zámerne sa chce spojiť v týchto neznámych vstupných súboroch. Toto bolo predvolené správanie odkazovača pred vydaním 2.14. Predvoleným správaním z vydania 2.14 je odmietnutie takýchto vstupných súborov a preto bola pridaná možnosť --accept-unknown-input-arch, aby sa obnovilo staré správanie.

- kľúčové slovo

Táto možnosť sa ignoruje pre kompatibilitu so systémom SunOS .

-Bdynamic

-D Y

-call_shared

Odkaz na dynamické knižnice. Toto je zmysluplné len na platformách, pre ktoré sú podporované zdieľané knižnice . Táto možnosť je štandardne na týchto platformách. Rôzne varianty tejto možnosti sú pre kompatibilitu s rôznymi systémami. Túto možnosť môžete použiť viacnásobne na príkazovom riadku: ovplyvňuje vyhľadávanie knižníc pre voľby -l, ktoré nasledujú.

-Bgroup

Nastavte príznak "DF_1_GROUP" v položke "DT_FLAGS_1" v dynamickej časti. To spôsobí, že spojovací modul runtime spracováva vyhľadávania v tomto objekte a jeho závislosti sa budú vykonávať iba vo vnútri skupiny. - neurčité je implicitné. Táto možnosť má zmysel len pre platformy ELF, ktoré podporujú zdieľané knižnice .

-Bstatic

-dn

-non_shared

-static

Neväzujte na zdieľané knižnice. Toto je zmysluplné len na platformách, pre ktoré sú podporované zdieľané knižnice. Rôzne varianty tejto možnosti sú pre kompatibilitu s rôznymi systémami. Túto možnosť môžete použiť viacnásobne na príkazovom riadku: ovplyvňuje vyhľadávanie knižníc pre voľby -l, ktoré nasledujú.

-Bsymbolic

Pri vytváraní zdieľanej knižnice viažete odkazy na globálne symboly na definíciu v rámci zdieľanej knižnice, ak existuje. Za normálnych okolností je možné, že program prepojený so zdieľanou knižnicou nahradí definíciu v zdieľanej knižnici. Táto možnosť má zmysel len pre platformy ELFplatformy, ktoré podporujú zdieľané knižnice.

--check rezy

--no-check-profily

Požiada linkera , aby nekontroloval adresy sekcií po priradení, aby zistil, či nejaké prekrývajú. Normálne linker vykoná túto kontrolu a ak zistí akékoľvek prekrývanie, vytvorí vhodné chybové hlásenia. Linker vie o tom a upravuje rozdiely v prekrytí. Predvolené správanie sa môže obnoviť pomocou prepínača príkazového riadka -check-sections .

--cref

Vytvorte krížovú referenčnú tabuľku. Ak sa vytvára súbor mapovania odkazov, krížová referenčná tabuľka sa vytlačí do súboru mapy. V opačnom prípade sa vytlačí na štandardný výstup.

Formát tabuľky je zámerne jednoduchý, takže v prípade potreby môže byť ľahko spracovaný skriptom. Symboly sú vytlačené, zoradené podľa názvu. Pre každý symbol je uvedený zoznam názvov súborov. Ak je definovaný symbol, prvý uvedený súbor je umiestnenie definície. Ostatné súbory obsahujú odkazy na symbol.

-no-definovať-common

Táto možnosť zabraňuje priradeniu adries k bežným symbolom. Príkaz skriptu "INHIBIT_COMMON_ALLOCATION" má rovnaký účinok.

Možnosť --no-define-common umožňuje oddeliť rozhodnutie priradiť adresy k bežným symbolom z výberu typu výstupného súboru; inak typ neprenosného výstupu núti priradiť adresy bežným symbolom. Použitie --no-define-common umožňuje, aby sa bežné symboly, na ktoré odkazuje zo zdieľanej knižnice, priradili adresy iba v hlavnom programe. Tým sa eliminuje nepoužívaný duplicitný priestor v zdieľanej knižnici a tiež sa zabráni akémukoľvek zmätku pri riešení nesprávneho duplikovania, ak existuje veľa dynamických modulov so špecializovanými vyhľadávacími cestami na rozlíšenie symbolov behu.

--defsym symbol = výraz

Vytvorte globálny symbol vo výstupnom súbore, ktorý obsahuje absolútnu adresu danú výrazom . Túto možnosť môžete používať toľkokrát, koľko je potrebné na definovanie viacerých symbolov v príkazovom riadku. Pre výraz je v tejto súvislosti podporovaná obmedzená aritmetika: môžete uviesť hexadecimálnu konštantu alebo názov existujúceho symbolu alebo použiť "+" a "-" na pridanie alebo odčítanie hexadecimálnych konštánt alebo symbolov. Ak potrebujete viac prepracované výrazy, zvážte použitie príkazového jazyka linkera zo skriptu. Poznámka: medzi symbolom , znakom rovnosti (`` = '') a výrazom nesmie byť žiadny biely priestor.

--zobraziť [= štýl ]

--no-demangle

Tieto možnosti určujú, či sa v chybových správach a iných výstupoch majú zameniť názvy symbolov. Keď sa linker má pomyštiť, pokúša sa prezentovať názvy symbolov čitateľným spôsobom: prerušuje vedúce podčiarknutia, ak sú použité vo formáte súboru objektu a konvertuje názvy symbolov C ++ na čitateľné mená. Rôzne kompilátory majú rôzne štýly manglingu. Voliteľný argument štýlu vykresľovania môžete použiť na výber vhodného štýlu prekladania pre kompilátora. Spojovací článok sa štandardne rozdelí, ak nie je nastavená premenná prostredia COLLECT_NO_DEMANGLE . Tieto možnosti sa môžu použiť na prekonanie predvoleného nastavenia.

súbor dynamického prepojenia

Zadajte názov dynamického odkazovača. Toto je zmysluplné len pri generovaní dynamicky spárovaných spustiteľných súborov ELF. Predvolený dynamický linker je spravidla správny; nepoužívajte to, ak neviete, čo robíte.

--embedded-relocs

Táto možnosť je zmysluplná iba pri prepojení MIPS vloženého PIC kódu generovaného možnosťou -membedded-pic na GNU kompilátor a assembler. Spôsobí, že linker vytvorí tabuľku, ktorá sa môže používať pri behu, aby sa premiestnili všetky údaje, ktoré boli staticky inicializované na hodnoty ukazovateľov. Viac podrobností nájdete v kóde testsuite / ld-empic.

--fatal-upozornenia

Všetky výstrahy považujte za chyby .

--force-exe, prípona

Uistite sa, že výstupný súbor má príponu .exe.

Ak úspešne vytvorený plne prepojený výstupný súbor nemá príponu " .exe " alebo " .dll ", táto možnosť núti linker kopírovať výstupný súbor na jeden rovnaký názov s príponou ".exe". Táto možnosť je užitočná pri používaní nemodifikovaných makefile Unixu na hostiteľovi systému Microsoft Windows, pretože niektoré verzie systému Windows nebudú zobrazovať obrázok, pokiaľ sa nekončí príponou ".exe".

--no-GC-profily

--gc rezy

Povoliť zbieranie odpadu nepoužívaných vstupných sekcií. Tento parameter sa ignoruje na ciele, ktoré túto možnosť nepodporujú. Táto možnosť nie je kompatibilná s -r , ani by sa nemala používať s dynamickým prepojením. Predvolené správanie (nevykonanie tejto zbierky odpadkov ) sa dá obnoviť zadaním sekcií --no-gc na príkazovom riadku.

--Pomoc

Vytlačte súhrn možností príkazového riadka na štandardný výstup a výstup.

--target-help

Vytlačte súhrn všetkých možností špecifických pre cieľ na štandardnom výstupe a ukončení.

- mapový súbor mapy

Vytlačte mapu odkazov do súboru mapfile . Pozrite si opis možnosti -M , uvedenú vyššie.

--no-keep-pamäť

ld sa normálne optimalizuje pre rýchlosť použitia pamäte ukladaním do pamäte tabuliek symbolov vstupných súborov. Táto možnosť informuje, že ld sa namiesto toho optimalizuje na využitie pamäte, ak je to potrebné, znova načíta tabuľky symbolov. Toto sa môže vyžadovať, ak vyčerpáte pamäťový priestor pri prepojení veľkého spustiteľného súboru.

-no-nedefinované

-z defs

Normálne pri vytváraní ne-symbolickej zdieľanej knižnice sú povolené nedefinované symboly, ktoré sa nechajú vyriešiť pomocou načítača na základe behu. Tieto možnosti nepovoľujú takéto nedefinované symboly.

--allow-viac definícia

-z muldefs

Normálne, keď je symbol definovaný viackrát, odkazovač oznámi fatálnu chybu. Tieto možnosti umožňujú niekoľko definícií a použije sa prvá definícia.

--allow-shlib-nedefinované

Povoliť nedefinované symboly v zdieľaných objektoch, aj keď je nastavený --no-nedefinovaný. Čistým výsledkom bude, že nedefinované symboly v bežných objektoch ešte spôsobia chybu, ale nedefinované symboly v zdieľaných objektoch budú ignorované. Implementácia no_undefined predpokladá, že runtime linker sa zadusí na nedefinované symboly. Existuje však aspoň jeden systém (BeOS), v ktorom sú nedefinované symboly v zdieľaných knižniciach normálne, pretože ich jadro ich pri nahrávaní nahradí tým, ktoré funkcie sú pre aktuálnu architektúru najvhodnejšie. IE dynamicky vyberie príslušnú funkciu memset. Zdá sa, že je tiež normálne, aby zdieľané knižnice HPPA mali neurčené symboly.

-no-nedefinované-verzia

Normálne, ak má symbol nedefinovanú verziu, odkazovač ju ignoruje. Táto možnosť nepovoľuje symboly s nedefinovanou verziou a namiesto toho sa vynesie fatálna chyba.

--no-warn-nesúlad

Normálne sa zobrazí chyba, ak sa pokúsite spojiť vstupné súbory, ktoré sú z nejakého dôvodu nesprávne, možno preto, že boli zostavené pre rôzne procesory alebo pre rôzne endiannesses. Táto možnosť hovorí, že tlmočne povolí takéto možné chyby. Táto možnosť by sa mala používať iba s opatrnosťou, v prípade, že ste vykonali nejaké špeciálne kroky, ktoré zabezpečia, že chyby spojovníka sú nevhodné.

--no-whole-archív

Vypnite efekt voľby -whole-archive pre ďalšie archívne súbory.

--noinhibit-exec

Zachovajte spustiteľný výstupný súbor vždy, keď je stále použiteľný. Zvyčajne linker nebude produkovať výstupný súbor, ak narazí na chyby počas procesu prepojenia; opustí bez napísania výstupného súboru, keď vydá nejakú chybu.

-nostdlib

Na príkazovom riadku sú explicitne zadané iba adresáre knižnice vyhľadávania. Adresáre knižníc zadané v skriptoch spojovníkov (vrátane skriptov spojovníkov uvedených na príkazovom riadku) sa ignorujú.

--formátový výstupný formát

ld môže byť nakonfigurovaný tak, aby podporoval viac ako jeden typ súboru objektu. Ak je váš ld nakonfigurovaný týmto spôsobom, môžete použiť voľbu --oformat na zadanie binárneho formátu súboru výstupného objektu. Dokonca aj keď je ld nakonfigurovaný na podporu alternatívnych formátov objektov, zvyčajne to nemusíte špecifikovať, pretože ld by mal byť konfigurovaný tak, aby produkoval ako predvolený výstupný formát najbežnejší formát na každom počítači. výstupný formát je textový reťazec, názov konkrétneho formátu podporovaného knižnicami BFD. (Môžete zobraziť dostupné binárne formáty pomocou objdump -i .) Príkaz skriptu "OUTPUT_FORMAT" môže tiež špecifikovať výstupný formát, ale táto voľba ho prepíše.

-qmagic

Táto možnosť sa ignoruje pre kompatibilitu systému Linux.

-Qy

Táto možnosť sa ignoruje pre kompatibilitu SVR4.

--relax

Možnosť s efektmi závislými od stroja. Táto možnosť je podporovaná iba na niekoľkých cieľoch.

Na niektorých platformách vykoná voľba --relax globálne optimalizácie, ktoré sa stanú možnými, keď odkazovač vyrieši adresovanie v programe, ako napríklad uvoľnenie režimov adresy a syntetizovanie nových pokynov v súbore výstupného objektu.

Na niektorých platformách môžu tieto globálne optimalizácie prepojenia času robiť symbolické ladenie výsledného spustiteľného súboru nemožné. Je známe, že to je prípad rodiny procesorov Matsushita MN10200 a MN10300.

Na platformách, kde to nie je podporované, --relax je akceptovaný, ale ignorovaný.

--retain-symbols-file názov súboru

Zachovajte iba symboly uvedené v súbore názov súboru a vyhoďte všetky ostatné. názov súboru je jednoducho plochý súbor s jedným názvom symbolu na riadok. Táto možnosť je obzvlášť užitočná v prostrediach (ako napríklad VxWorks), kde sa postupne nahromadí veľká globálna tabuľka symbolov, aby sa ušetrila pamäť na spustenie.

--retain-symbols-file neodstraňuje nedefinované symboly alebo symboly potrebné na premiestnenie.

Do príkazového riadka môžete iba jeden súbor -retain-symbols-file . Prepisuje -s a -S .

rrrrr

Pridajte adresár do cesty vyhľadávania knižnice runtime. Toto sa používa pri prepojení ELFexecutable so zdieľanými objektmi. Všetky argumenty sú zlučované a odovzdané do runtime linker, ktorý ich používa na vyhľadanie zdieľaných objektov počas behu. Možnosť -rath sa tiež používa pri vyhľadávaní zdieľaných objektov, ktoré sú potrebné v zdieľaných objektoch explicitne zahrnutých do odkazu; pozri popis možnosti -path-link . Ak sa pri prepojení spustiteľného súboru ELF nepoužije cesta , použije sa obsah premennej prostredia "LD_RUN_PATH", ak je definovaná.

Možnosť " -path " môže byť tiež použitá na SunOS. Podľa predvoleného nastavenia v službe SunOS linker vytvorí náplasť na vyhľadávanie po spustení zo všetkých možností -L, ktoré sú uvedené. Ak sa použije voľba -rath , cesta vyhľadávania po spustení sa vytvorí výhradne pomocou možností -path , ignorujúc možnosti -L . To môže byť užitočné pri použití gcc, ktorý pridáva veľa možností -L, ktoré môžu byť pripojené k súborovým systémom NFS.

Pre kompatibilitu s inými linkérmi ELF, ak za voľbou -R nasleduje názov adresára, nie názov súboru, považuje sa to za voľbu -rath .

-rpath-link DIR

Pri používaní ELF alebo SunOS môže jedna zdieľaná knižnica vyžadovať inú. K tomu dochádza, ak odkaz "ld-shared" obsahuje zdieľanú knižnicu ako jeden zo vstupných súborov.

Keď sa odkazovač stretne s takouto závislosťou pri vykonávaní nezdieľaného odkazu, ktorý sa nedá premiestniť, automaticky sa pokúsi nájsť požadovanú zdieľanú knižnicu a zahrnúť ju do odkazu, ak nie je explicitne zahrnutý. V takom prípade volba -path-link špecifikuje prvú sadu adresárov, ktoré sa majú vyhľadať. Možnosť -path-link môže určiť poradie názvov adresárov buď zadaním zoznamu názvov oddelených dvojbodkami alebo opakovaným zobrazením.

Táto voľba by sa mala používať s opatrnosťou, pretože prepisuje vyhľadávaciu cestu, ktorá bola ťažko kompilovaná do zdieľanej knižnice. V takomto prípade je možné neúmyselne použiť inú cestu vyhľadávania, než by robila linker runtime.

Odkazovač používa nasledujúce vyhľadávacie cesty na vyhľadanie požadovaných zdieľaných knižníc.

1.

Všetky adresáre zadané možnosťami -path-link .

2.

Všetky adresáre špecifikované voľbou -rath . Rozdiel medzi -path a -rpath-link je, že adresáre špecifikované voľbou -path sú zahrnuté do spustiteľného súboru a používané pri behu, zatiaľ čo voľba -rpath-link je účinná len v čase spojenia. Je to len pre natívne linker.

3.

Na systéme ELF, ak neboli použité možnosti "rpath" a "rpath-link", vyhľadajte obsah premennej prostredia "LD_RUN_PATH". Je to len pre natívne linker.

4.

V SunOS, ak sa nepoužila voľba -rath , vyhľadajte ľubovoľné adresáre špecifikované pomocou možností -L .

5.

Pre natívny linker obsah premennej prostredia "LD_LIBRARY_PATH".

6.

Pre doménový linker ELF sa vyhľadávajú adresáre v priečinku "DT_RUNPATH" alebo "DT_RPATH" zdieľanej knižnice pre zdieľané knižnice, ktoré táto aplikácia potrebuje. Položky "DT_RPATH" sa ignorujú, ak existujú položky "DT_RUNPATH".

7.

Predvolené adresáre, zvyčajne / lib a / usr / lib .

8.

Pre natívny linker na systéme ELF, ak súbor /etc/ld.so.conf existuje, zoznam adresárov nájdených v danom súbore.

Ak sa požadovaná zdieľaná knižnica nenachádza, odkazovač vydá varovanie a pokračuje v prepojení.

--shared

-Bshareable

Vytvorenie zdieľanej knižnice. Toto je v súčasnosti podporované iba na platformách ELF, XCOFF a SunOS. V systéme SunOS linker automaticky vytvorí zdieľanú knižnicu, ak nie je použitá voľba -e a na linke sú neurčené symboly.

--sort-common

Táto možnosť hovorí, že ld zoradí spoločné symboly podľa veľkosti, keď ich umiestni do príslušných výstupných sekcií. Najprv prídete všetky symboly jedného bajtu, potom všetky dva bajty, potom všetky štyri bajty a potom všetko ostatné. Toto má zabrániť rozdielom medzi symbolmi v dôsledku obmedzení zarovnania.

--split-by-file [ veľkosť ]

Podobne ako v prípade --split-by-reloc, vytvára novú výstupnú sekciu pre každý vstupný súbor pri dosiahnutí veľkosti . veľkosť predvolená veľkosť 1, ak nie je daná.

--split-by-reloc [ počet ]

Snaží sa vytvoriť ďalšie sekcie vo výstupnom súbore tak, aby žiadna samostatná sekcia výstupu v súbore neobsahovala viac ako počet premiestnení. Toto je užitočné pri vytváraní obrovských premiestniteľných súborov na sťahovanie do určitých jadier v reálnom čase pomocou formátu súboru objektov COFF; pretože COFFkedy nemôže predstavovať viac ako 65535 presunov v jednej sekcii. Všimnite si, že to nebude fungovať s formátmi súborov objektov, ktoré nepodporujú ľubovoľné sekcie. Linker nerozdelí jednotlivé vstupné sekcie pre redistribúciu, takže ak jedna vstupná sekcia obsahuje viac ako počet premiestnení, jedna výstupná sekcia bude obsahovať toľko premiestnení. počet predvolených na hodnotu 32768.

--stats

Vypočítajte a zobrazte štatistiky o fungovaní odkazovača, ako napríklad čas vykonania a využitie pamäte.

--traditional-formát

Pri niektorých cieľoch je výstup ld inak odlišný od výstupu niektorého existujúceho odkazovača. Tento prepínač požaduje, aby namiesto toho používal tradičný formát.

Napríklad v systéme SunOS ld spája duplicitné záznamy v tabuľke symbolových reťazcov. To môže znížiť veľkosť výstupného súboru s úplnými informáciami o ladení o viac ako 30 percent. Bohužiaľ, program SunOS "dbx" nemôže čítať výsledný program ("gdb" nemá žiadne problémy). Prepínač tradičného formátu hovorí, že ld nebude kombinovať duplicitné záznamy.

--section-start sectionname = org

Nájdite sekciu vo výstupnom súbore na absolútnej adrese danej org . Túto možnosť môžete používať toľkokrát, koľkokrát potrebujete na nájdenie viacerých častí na príkazovom riadku. org musí byť jedno hexadecimálne celé číslo; pre kompatibilitu s inými linkermi môžete vynechať predné 0x zvyčajne spojené s hexadecimálnymi hodnotami. Poznámka: medzi názvom sekcie , znakom rovnosti (`` = '') a org .

-Tbss org

-Todata org

-Textext org

Použite org ako východiskovú adresu pre --- --- sekcia "bss", "data" alebo "text" výstupného súboru. org musí byť jedno hexadecimálne celé číslo; pre kompatibilitu s inými linkermi môžete vynechať predné 0x zvyčajne spojené s hexadecimálnymi hodnotami.

--dll-veľavravný

--verbose

Zobrazte číslo verzie pre ld a uveďte podporované emulácie linkerov. Zobrazte, ktoré vstupné súbory sa dajú otvoriť. Zobrazí skript spojovníka, ktorý používa linker.

--version-script = verzia-scriptfile

Zadajte názov skriptu verzie odkazovača. Toto sa zvyčajne používa pri vytváraní zdieľaných knižníc na určenie ďalších informácií o heirarchii verzie pre vytvorenú knižnicu. Táto možnosť má zmysel len pre platformy ELF, ktoré podporujú zdieľané knižnice.

--warn-common

Upozornenie, keď je spoločný symbol kombinovaný s iným bežným symbolom alebo s definíciou symbolu. Unixové prepojenia umožňujú túto poněkud nedbalú prax, ale odkazy na niektorých iných operačných systémoch nie. Táto možnosť vám umožňuje nájsť potenciálne problémy pri kombinovaní globálnych symbolov. Bohužiaľ, niektoré knižnice C používajú túto prax, takže môžete získať nejaké varovania o symboloch v knižniciach, ako aj vo vašich programoch.

Existujú tri druhy globálnych symbolov, ilustrované tu v príkladoch C:

int i = 1;

Definícia, ktorá sa nachádza v sekcii inicializovaných údajov výstupného súboru.

external int i;

Nedefinovaná referencia, ktorá nevymedzuje priestor. Musí existovať definícia alebo spoločný symbol pre premennú niekde.

int i;

Bežný symbol. Ak pre premennú existujú iba (jeden alebo viac) bežné symboly, ide o neinicializovanú oblasť údajov výstupného súboru. Spojovací článok spája viaceré bežné symboly pre jednu premennú do jedného symbolu. Ak majú rozdielne veľkosti, vyberajú najväčšiu veľkosť. Linker premenuje spoločný symbol na deklaráciu, ak existuje definícia rovnakej premennej.

Voľba --warn-common môže vytvoriť päť druhov upozornení. Každé upozornenie pozostáva z dvojice riadkov: prvý popisuje symbol, ktorý sa práve stretol a druhý popisuje predchádzajúci symbol, ktorý sa stretol s rovnakým názvom. Jeden alebo obidva symboly budú bežným symbolom.

1.

Otočenie spoločného symbolu do referencie, pretože už existuje definícia symbolu.

(): upozornenie: časté "" prepisované definíciou (
):

2.

Otočenie spoločného symbolu do referencie, pretože sa objaví neskoršia definícia symbolu. Toto je rovnaké ako predchádzajúci prípad, s výnimkou toho, že symboly sa vyskytujú v inom poradí.

(): upozornenie: definícia "" prevažuje spoločný (
):

3.

Zlúčenie spoločného symbolu s predchádzajúcim rovnakým spoločným symbolom.

(
): upozornenie: viacnásobné spoločné pre < (
): varovanie:

4.

Zlúčenie spoločného symbolu s predchádzajúcim väčším spoločným symbolom.

(): upozornenie: časté "" prepisované väčším spoločným (
): varovanie:

5.

Zlúčenie spoločného symbolu s predchádzajúcim menším spoločným symbolom. Toto je rovnaké ako predchádzajúci prípad, s výnimkou toho, že symboly sa vyskytujú v inom poradí.

(): upozornenie: bežné pre < prevažujúce menšie spoločné (
): warning:

--warn-konštruktéri

Upozorňujeme, ak sa používajú globálne konštruktory. Toto je užitočné len pre niekoľko formátov objektových súborov. Pre formáty ako COFF alebo ELF nemôže linker zistiť použitie globálnych konštruktorov.

--warn-viac-gp

Upozornenie, ak sa vo výstupnom súbore vyžadujú viaceré hodnoty globálneho ukazovateľa. To je zmysluplné len pre niektorých procesorov, ako napríklad Alpha. Konkrétne niektoré procesory kladú veľké hodnoty konštanty do špeciálnej sekcie. Špeciálny register (globálny ukazovateľ) ukazuje do stredu tejto časti, takže konštanty môžu byť efektívne načítané cez relatívny adresovací režim základňového registra. Keďže posun v relatívnom režime základného registra je pevný a relatívne malý (napr. 16 bitov), ​​limituje maximálnu veľkosť konštantného fondu. Vo veľkých programoch je preto často potrebné použiť viacnásobné hodnoty globálneho ukazovateľa, aby bolo možné riešiť všetky možné konštanty. Táto možnosť spôsobí, že sa vyskytne varovanie vždy, keď sa vyskytne tento prípad.

--warn-once

Upozorňujeme len raz na každý nedefinovaný symbol, skôr ako na jeden modul, ktorý sa naň odkazuje.

--warn rez zarovnanie

Upozornenie, ak sa zmena adresy výstupnej časti zmenila z dôvodu zarovnania. Zvyčajne sa nastavenie nastaví pomocou vstupnej sekcie. Adresa bude zmenená iba vtedy, ak nie je výslovne špecifikovaná; to znamená, ak príkaz "SECTIONS" neurčí začiatočnú adresu sekcie.

--whole archív

Pre každý archív spomínaný na príkazovom riadku po voľbe -whole-archive zahrňte každý súbor objektu v archíve v prepojení, namiesto vyhľadávania v archíve požadovaných súborov objektov. To sa zvyčajne používa na premenu archívneho súboru na zdieľanú knižnicu, čo núti každý objekt zahrnúť do výslednej zdieľanej knižnice. Táto možnosť sa môže používať viackrát.

Dve poznámky pri použití tejto možnosti z gcc: Najprv gcc o tejto možnosti nevie, takže musíte použiť -Wl, -whole-archive . Po druhé, nezabudnite používať -Wl, -no-celý-archív po zozname archívov, pretože gcc pridá svoj vlastný zoznam archívov do vášho odkazu a možno nebudete chcieť, aby táto vlajka ovplyvnila aj tie.

- symbol obalu

Použite funkciu obalu pre symbol . Akýkoľvek nedefinovaný odkaz na symbol sa vyrieši na "__ wrap_symbol". Akýkoľvek nedefinovaný odkaz na "__real_symbol" bude vyriešený ako symbol .

Toto môže byť použité na poskytnutie obalu pre systémovú funkciu. Funkcia obalu by sa mala nazývať "__wrap_symbol". Ak chce zavolať systémovú funkciu, mala by volať "__ real_symbol".

Tu je triviálny príklad:

void * __wrap_malloc (int c) {printf ("malloc volaný s% ld \ n", c); vrátiť __real_malloc (c); }

Ak prepájate iný kód s týmto súborom pomocou --wrap malloc , všetky volania na "malloc" budú namiesto toho volať "__wrap_malloc". Volanie na "__real_malloc" v "__wrap_malloc" vyvolá skutočnú funkciu "malloc".

Možno budete chcieť poskytnúť aj funkciu "__real_malloc", takže odkazy bez možnosti - Wrap budú úspešné. Ak tak urobíte, nemali by ste definovať "__ real_malloc" v tom istom súbore ako "__wrap_malloc"; ak tak urobíte, môže assembler vyriešiť hovor predtým, ako má linker možnosť zabaliť ho na "malloc".

--enable-new-dtags

--disable-new-dtags

Tento linker môže vytvoriť nové dynamické značky v ELF. Ale staršie systémy ELF ich nechápu. Ak zadáte --enable-new-dtags , dynamické značky sa vytvoria podľa potreby. Ak zadáte --disable-new-dtags , nebudú vytvorené žiadne nové dynamické značky. Štandardne sa nové dynamické značky nevytvárajú. Upozorňujeme, že tieto možnosti sú k dispozícii len pre systémy systému SELF.

Odkazovač i386 PE podporuje voľbu -shared , ktorá spôsobuje, že výstup je dynamicky prepojená knižnica (DLL) namiesto bežného spustiteľného súboru. Mali by ste názov výstupu "*. Dll" pri použití tejto možnosti. Okrem toho linker plne podporuje štandardné súbory "* .def", ktoré môžu byť zadané na príkazovom riadku linkeru ako objektový súbor (v skutočnosti by mal predchádzať archívy, z ktorých exportujú symboly, aby sa zabezpečilo, rovnako ako normálny objektový súbor).

Okrem možností spoločných pre všetky ciele podporuje i386 PE linker ďalšie možnosti príkazového riadku, ktoré sú špecifické pre ciele i386 PE. Možnosti, ktoré berú hodnoty, môžu byť oddelené od ich hodnôt buď znakom medzera alebo rovná sa.

--add-STDCALL-alias

Ak sú uvedené, symboly so stdcall príponou (@ nn ) budú exportované ako-is a tiež s príponou stripped.

- súbor s databázou

Použite súbor ako názov súboru, v ktorom chcete uložiť základné adresy všetkých premiestnení potrebných na generovanie DLL pomocou dlltool .

--dll

Vytvorte DLL namiesto bežného spustiteľného súboru. Môžete tiež použiť -shared alebo zadajte "LIBRARY" v danom ".def" súbore.

--enable-stdcall-fixup

--disable-stdcall-fixup

Ak odkaz nájde symbol, ktorý nedokáže vyriešiť, pokúsi sa urobiť "fuzzy linking" hľadaním ďalšieho definovaného symbolu, ktorý sa líši len vo forme názvu symbolu (cdecl vs stdcall) a vyrieši tento symbol prepojením k zápasu. Napríklad nedefinovaný symbol "_foo" môže byť prepojený s funkciou "_foo @ 12", alebo nedefinovaný symbol "_bar @ 16" môže byť prepojený s funkciou "_bar". Keď linker to robí, vytlačí varovanie, pretože by sa zvyčajne nemalo prepojiť, ale niekedy importovať knižnice generované z dll tretej strany môžu potrebovať túto funkciu, aby boli použiteľné. Ak zadáte --enable-stdcall-fixup , táto funkcia je plne povolená a varovania sa nevytlačia. Ak zadáte --disable-stdcall-fixup , táto funkcia je vypnutá a takéto chyby sa považujú za chyby.

--export-all-symboly

Ak sú zadané, všetky globálne symboly v objektoch použitých na zostavenie DLL budú exportované DLL. Všimnite si, že je to predvolené, ak by inak nebol exportovaný symbol. Keď sú symboly explicitne exportované cez súbory DEF alebo implicitne exportované prostredníctvom atribútov funkcií, predvolená hodnota je, ak sa táto voľba neposkytuje. Upozorňujeme, že symboly "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" a "impure_ptr" nebudú automaticky exportované. Tiež symboly importované z iných DLL sa nebudú reexportovať ani nebudú symboly špecifikovať vnútorné rozloženie DLL, ako sú tie, ktoré začínajú "_head_" alebo končia "_iname". Navyše nebudú exportované žiadne symboly z "libgcc", "libstd ++", "libmingw32" alebo "crtX.o". Symboly, ktorých mená začínajú "__rtti_" alebo "__builtin_", nebudú exportované, aby pomohli s C ++ DLL. Nakoniec existuje rozsiahly zoznam symbolov cygwin-private, ktoré nie sú exportované (samozrejme, to platí aj pri vytváraní DLL pre ciele cygwin).

Tieto cygwin-vylúčenia sú: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "cygwin_premina1", "cygwin_premain2", "cygwin_premain3" "a" environ ".

--exclude-symbols symbol , symbol , ...

Určuje zoznam symbolov, ktoré by sa nemali automaticky exportovať. Názvy symbolov môžu byť vymedzené čiarkami alebo dvojbodkami.

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

Určuje zoznam archívnych knižníc, z ktorých by sa symboly nemali automaticky exportovať. Názvy knižníc môžu byť vymedzené čiarkami alebo dvojbodkami. Zadanie výrazu "-exclude-libs ALL" vylučuje symboly vo všetkých archívnych knižniciach z automatického exportu. Symboly explicitne uvedené v súbore .def sú stále exportované bez ohľadu na túto možnosť.

--file zarovnanie

Zadajte zarovnanie súboru. Sekcie v súbore sa vždy začínajú oddeľovaním súborov, ktoré sú násobkom tohto čísla. Táto hodnota je predvolená na hodnotu 512.

- rezervná rezerva

- rezervná rezerva , zaviazať

Zadajte veľkosť pamäte, ktorú chcete rezervovať (a voliteľne spúšťať), ktorá sa má použiť ako halda pre tento program. Predvolená hodnota je 1Mb rezervovaná, 4k viazaná.

--základová hodnota

Použite hodnotu ako základnú adresu vášho programu alebo dll. Toto je najnižšie umiestnenie pamäte, ktoré sa použije pri načítaní vášho programu alebo dll. Ak chcete znížiť potrebu premiestnenia a zlepšiť výkonnosť vašich dll, mali by mať každý jedinečnú základňovú adresu a neprekrývať žiadne iné dll. Predvolená hodnota je 0x400000 pre spustiteľné súbory a 0x10000000 pre dll.

--kill-at

Ak sú uvedené, stdcall prípony (@ nn ) budú odstránené zo symbolov pred ich vývozom.

--major-image-version hodnota

Nastavuje hlavný počet "` verzie obrázka ''. Výchozí hodnota je 1.

--major-os-verzia hodnota

Nastaví hlavný počet verzie OS. Výchozí hodnota je 4.

--major-subsystém-verzia hodnota

Nastavuje hlavný počet variantov `` subsystému ''. Výchozí hodnota je 4.

--minor-image-version hodnota

Nastaví menšie číslo verzie obrázka. Výchozí hodnota je 0.

--minor-os-verzia hodnota

Nastaví menšie číslo verzie OS. Výchozí hodnota je 0.

--minor-subsystém-verzia hodnota

Nastavuje menšie číslo verzie subsystému. Výchozí hodnota je 0.

súbor výstupného súboru

Linker vytvorí súbor súboru, ktorý bude obsahovať súbor DEF zodpovedajúci DLL, ktorý linker generuje. Tento súbor DEF (ktorý by mal byť nazvaný "* .def") môže byť použitý na vytvorenie importnej knižnice s "dlltool" alebo môže byť použitý ako odkaz na automaticky alebo implicitne exportované symboly.

Súbor - out-implib

Linker vytvorí súbor súboru, ktorý bude obsahovať import lib zodpovedajúci DLL, ktorý linker generuje. Tento import lib (ktorý by mal byť nazvaný "* .dll.a" alebo "* .a") sa môže použiť na prepojenie klientov s vygenerovanou DLL, toto správanie umožňuje preskočiť samostatný krok vytvárania knižnice importu "dlltool".

--enable-auto-image-base

Automaticky vybrať základňu obrázkov pre súbory DLL, ak nie je zadané pomocou argumentu "-image-base". Pomocou hash vygenerovaného z dllname na vytvorenie jedinečných základov obrazu pre každú DLL sa zabráni kolíziám a premiestneniam v pamäti, ktoré môžu oddialiť spustenie programu.

--disable-auto-image-base

Nevytvárajte automaticky jedinečnú základňu obrázkov. Ak neexistuje užívateľsky špecifikovaná základňa obrázkov ("--image-base"), použite predvolenú platformu.

reťazec --dll-search-prefix

Pri dynamickom prepojení na dll bez knižnice importu vyhľadajte " .dll" pred "lib .dll". Toto správanie umožňuje jednoduché rozlíšenie medzi DLL vytvorenými pre rôzne "subplatformy": natívne, cygwin, uwin, pw atď. Napríklad cygwin DLL zvyčajne používajú "--dll-search-prefix = cyg".

--enable-auto-import

Vykonajte sofistikované prepojenie "_symbol" na "__imp__symbol" pre DATA import z DLL a vytvorte potrebné symboly thunking pri vytváraní importných knižníc s týmito DATAexports. Toto spravidla bude "fungovať" - ale niekedy sa môže zobraziť táto správa:

"premenná" "nemôže byť automaticky importovaná. Prečítajte si prosím dokumentáciu pre" --enable-auto-import "pre podrobnosti."

Táto správa sa vyskytuje, keď niektorý (sub) výraz prejde na adresu určenú súčtom dvoch konštánt (importné tabuľky Win32 umožňujú len jednu). Prípady, v ktorých sa to môže vyskytnúť, zahŕňajú prístupy do políčok členov štrukturálnych premenných importovaných z DLL, rovnako ako pomocou konštantného indexu do premennej poľa importovaného z DLL. Akékoľvek viacslovné premenné (polia, štruktúry, dlhé dlhé atď.) Môžu spustiť túto chybovú podmienku. Avšak bez ohľadu na presný typ údajov premenlivej exportovanej premennej, ld ju vždy odhalí, vydá varovanie a skončí.

Existuje niekoľko spôsobov riešenia tohto problému bez ohľadu na typ údajov exportovanej premennej:

Jedným zo spôsobov je použitie prepínača -enable-runtime-pseudo-reloc. Toto ponecháva úlohu nastavenia referencií vo vašom klientskom kóde pre runtime, takže táto metóda funguje iba vtedy, keď táto funkcia podporuje runtime environtment.

Druhým riešením je nútiť jednu z "konštánt", aby bola premenná - to je neznáme a neoptimalizovateľné v čase kompilácie. Pre polia sú dve možnosti: a) vytvoriť indexee (adresu poľa) premennú alebo b) urobiť "konštantný" index premennou. teda:

externý typ extern_array []; external_array [1] -> {volatilný typ * t = extern_array; t [1]}

alebo

externý typ extern_array []; external_array [1] -> {volatilný int t = 1; external_array [t]

Pre štruktúry (a väčšinu ďalších typov viacslovných údajov) je jedinou možnosťou vytvoriť samotnú štruktúru (alebo dlhú dlhú alebo ...) premennú:

externé štruktúry extern_struct; external_struct.field -> {volatile štruktúra s * t = & extern_struct; t-> pole}

alebo

externá dlhá dlhá external_ll; external_ll -> {volatile long long * local_ll = & extern_ll; * local_ll}

Treťou metódou riešenia tohto problému je upustiť od "auto-importu" pre označujúci symbol a označiť ho "__declspec (dllimport)". Avšak v praxi to vyžaduje použitie #defines na kompiláciu času, aby ste uviedli, či budujete DLL, budovať klientský kód, ktorý bude prepojený s DLL, alebo stačí vytvoriť / spojiť so statickou knižnicou. Pri voľbe medzi rôznymi spôsobmi riešenia problému "priamej adresy s konštantným posunom" by ste mali zvážiť typické reálne použitie:

originál:

--foo.h externý int arr []; - foo.c #include "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Riešenie 1:

--foo.h externý int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Toto riešenie je pre win32 a cygwin; nepoužívajte "optimalizovať" * / volatile int * parr = arr; printf ( "% d \ n", Parr [1]); }

Riešenie 2:

--foo.h / * Poznámka: predpokladá sa automatický export (__declspec (dllexport)) / /if (definované (_WIN32) || definované (__CYGWIN__)) && \! (definované (FOO_BUILD_DLL) )) #definovať FOO_IMPORT __declspec (dllimport) #lse #definovať FOO_IMPORT #endif externé FOO_IMPORT int arr []; - foo.c #include "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Štvrtou cestou, ako sa vyhnúť tomuto problému, je prepísať vašu knižnicu skôr ako funkčné rozhranie ako dátové rozhranie pre prípustné premenné (napr. Funkcie set_foo () a get_foo () accessor).

--disable-auto-import

Nepokúšajte sa robiť sofistikované prepojenie "_symbol" na "__imp__symbol" pre DATAimports z DLL.

--enable-runtime-pseudo-RELOCA

Ak váš kód obsahuje výrazy popísané v sekcii --enable-auto-import, to je DATAimports z DLL s nenulovým posunom, tento prepínač vytvorí vektor "runtime pseudo relocations", ktorý môže byť použitý prostredím runtime na úpravu referencií k takýmto údajom vo vašom klientskom kóde.

--disable-runtime-pseudo-RELOCA

Nevytvárajte pseudo relokácie pre nenulový offset DATA import z DLL. Toto je predvolené nastavenie.

--enable-extra-pe-debug

Zobrazte ďalšie informácie o ladení súvisiace s automatickým importom symbolov.

--section zarovnanie

Nastaví zarovnanie úseku. Sekcie v pamäti vždy začínajú na adresách, ktoré sú násobkom tohto čísla. Výchozí hodnota je 0x1000.

- rezervná rezerva

- rezervovať , zaviazať

Zadajte veľkosť pamäte, ktorú chcete rezervovať (a voliteľne spúšťať), ktorá sa má použiť ako zásobník pre tento program. Predvolená hodnota je 2Mb rezervovaná, 4k viazaná.

- subsystém, ktorý

- subsystém, ktorý : hlavný

- subsystém, ktorý : hlavný . moll

Určuje podsystém, pod ktorým bude váš program spúšťať. Právne hodnoty, pre ktoré sú "natívne", "okná", "konzola" a "posix". Môžete voliteľne nastaviť aj verziu subsystému.

Dôležité: Pomocou príkazu man ( % man ) môžete zistiť, ako sa príkaz používa vo vašom konkrétnom počítači.