Skip to main content

Vše o příkazu Linux / Unix: ld

Fallout 76: Probably getting annoyed whilst attempting to farm scrip (Livestream Playback) (Červen 2026)

Fallout 76: Probably getting annoyed whilst attempting to farm scrip (Livestream Playback) (Červen 2026)
Anonim

NÁZEV

ld - pomocí LD, GNU linker

SYNOPSE

ld možnosti objfile …

POPIS

ld kombinuje řadu objektových a archivních souborů, přemístí jejich data a odkazy symbolů. Obvykle je poslední krok při sestavování programu spuštěnld.

ld akceptuje jazykové soubory příkazového řádku Linker napsané v nadpisu syntaxe příkazového jazyka příkazového editoru AT & T, které poskytuje explicitní a úplnou kontrolu nad procesem propojení.

Tato stránka mana nepopisuje příkazový jazyk; vizld v "info" nebo v příručce ld: linker GNU, kde najdete úplné informace o příkazovém jazyce a dalších aspektech linkeru GNU.

Tato verzeld používá univerzální knihovny BFD pro práci s objekty. To dovolujeld číst, kombinovat a psát objektové soubory v mnoha různých formátech - například COFF nebo "a.out". Různé formáty mohou být propojeny dohromady pro vytvoření jakéhokoli dostupného souboru objektů.

Kromě flexibilnosti je GNU linker užitečnější než jiné linkery při poskytování diagnostických informací. Mnoho linkerů opustí popravu okamžitě poté, co došlo k chybě; kdykoli je to možné,ld pokračuje v provádění, což umožňuje identifikovat další chyby (nebo v některých případech získat výstupní soubor navzdory chybě).

GNU linkerld je určen k pokrytí širokého spektra situací a co nejvíce kompatibilní s ostatními linkery. V důsledku toho máte mnoho možností, jak ovládat své chování.

MOŽNOSTI

Linker podporuje celou řadu možností příkazového řádku, ale ve skutečnosti se málo z nich používá v jakémkoli konkrétním kontextu. Například časté použitíld je propojit standardní soubory objektů Unix s standardním podporovaným Unix systémem. Na takovém systému propojit soubor "hello.o":

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

To říkáld vytvořit soubor nazvaný výstup jako výsledek propojení souboru "/lib/crt0.o" s "hello.o" a knihovny "libc.a", která bude pocházet ze standardních vyhledávacích adresářů. (Viz diskuse o-l níže.)

Některé možnosti příkazového řádkuld může být zadán v libovolném místě příkazového řádku. Možnosti, které odkazují na soubory, například-l nebo-T, způsobit, že soubor bude čten v okamžiku, kdy se tato možnost zobrazí v příkazovém řádku vzhledem k souborům objektů a dalším možnostem souborů. Opakování volby, které nejsou součástí souboru, s jiným argumentem, nebudou mít žádný další účinek, ani nepřepisují předchozí výskyty (ty, které jsou dále vlevo na příkazovém řádku) této možnosti. Možnosti, které mohou být významně specifikovány více než jednou, jsou uvedeny v popisu níže.

Argumenty bez možnosti jsou soubory objektů nebo archivy, které mají být propojeny. Mohou následovat, předcházet nebo být smíchány s volbami příkazového řádku, kromě toho, že mezi volbou a jeho argumentem nesmí být umístěn argument objektu.

Obvykle je spojovací prvek vyvolán s alespoň jedním objektem, ale můžete zadat jiné formy souborů binárních vstupů-l, -R, a příkazový jazyk skriptu. Li Ne jsou zadány binární vstupní soubory, linker nevytváří žádný výstup a zprávu vydáŽádné vstupní soubory.

Pokud linker nerozpozná formát souboru objektu, předpokládá, že jde o linkerový skript. Takto zadaný skript rozšiřuje hlavní linkerový skript používaný pro odkaz (buď výchozí skript propojovacího propojovacího propojovacího skriptu nebo ten, který je specifikován pomocí-T). Tato funkce dovoluje spojovacímu prvku propojit soubor, který se jeví jako objekt nebo archiv, ale ve skutečnosti pouze definuje některé hodnoty symbolů nebo používá "INPUT" nebo "GROUP" pro načtení dalších objektů. Všimněte si, že zadání skriptu tímto způsobem pouze doplňuje hlavní skript linkeru; použijte-T možnost nahradit výchozí skript linkeru.

U voleb, jejichž jména jsou jediné písmeno, musí být argumenty možností buď následovány písmenem volby bez mezery, nebo mohou být uvedeny jako samostatné argumenty bezprostředně po volbě, která je vyžaduje.

U voleb, jejichž jména jsou více písmen, může předcházet název možnosti buď jedna pomlčka nebo dvě; například,-trace-symbol a- symbol trakce jsou rovnocenné. Poznámka - existuje jedna výjimka z tohoto pravidla. Možnosti více písmen, které začínají písmenem "o", lze předcházet pouze dvěma pomlčkami. To má snížit zmatenost s volba. Například-omagický nastaví název výstupního souboru namagie zatímco--omagický nastaví příznak NMAGIC na výstup.

Argumenty pro vícepísmenové volby musí být buď odděleny od názvu možnosti znakem rovnosti, nebo mohou být uvedeny jako samostatné argumenty bezprostředně po volbě, která je vyžaduje. Například,--trace-symbol pro foo a--trace-symbol = foo jsou rovnocenné. Používají se jedinečné zkratky názvů několika písmen.

Poznámka - pokud je linker vyvolán nepřímo, pomocí ovladače kompilátoru (napřgcc), pak by měly být předpony všechny volby příkazového řádku linkeru-Wl, (nebo co je vhodné pro konkrétní ovladač kompilátoru) takto:

gcc -Wl, - startgroup foo.o bar.o -Wl, - endgroup

To je důležité, protože v opačném případě program řidiče kompilátoru může klidně spustit volbu linkeru, což má za následek špatný odkaz.

Zde je tabulka generických přepínačů příkazového řádku přijatých linkerem GNU:

-A klíčové slovo

Tato možnost je podporována pro kompatibilitu s HP / UX. The klíčové slovo argument musí být jedním z řetězcůarchiv, sdílené, nebovýchozí. -archivu je funkčně ekvivalentní-Bstatica dvě další klíčová slova jsou funkčně ekvivalentní-Bdynamický. Tato volba může být použita několikrát.

-A architektura

--architecture = architektura

V aktuálním vydáníld, tato volba je užitečná pouze pro architekturu rodiny Intel 960. V tomtold konfigurace, architektura argument identifikuje konkrétní architekturu v rodině 960, umožňující některé bezpečnostní prvky a modifikovat vyhledávací cestu knihovny archivu.

Budoucí vydáníld mohou podporovat podobné funkce pro jiné rodiny architektury.

-b vstupní formát

--format = vstupní formát

ld může být nakonfigurován tak, aby podporoval více než jeden typ souboru objektu. Pokud je vašeld je konfigurován tímto způsobem, můžete použít-b možnost zadat binární formát souborů vstupních objektů, které se při této volbě zobrazují na příkazovém řádku. I kdyžld je nakonfigurován tak, aby podporoval formáty alternativních objektů, obvykle to není nutné specifikovat jakold by měl být nakonfigurován tak, aby očekával jako výchozí vstupní formát nejběžnější formát na každém stroji. vstupní formát je textový řetězec, název určitého formátu podporovaného knihovnami BFD. (Můžete uvést dostupné binární formáty pomocíobjdump -i.)

Tuto možnost můžete použít, pokud propojíte soubory s neobvyklým binárním formátem. Můžete také použít-b přepínat formáty explicitně (při propojení objektových souborů různých formátů), včetně-b vstupní formát před každou skupinou objektových souborů v určitém formátu.

Výchozí formát je převzat z proměnné prostředí "GNUTARGET".

Můžete také definovat vstupní formát ze skriptu pomocí příkazu "TARGET";

-C MRI-commandfile

--mri-script = MRI-commandfile

Pro kompatibilitu s linkery produkujícími MRI,ld přijímá soubory skriptu napsané v alternativním, omezeném příkazovém jazyce, popsaném v části Dokumenty GNU ld MRI Compatible Script Files. Představte soubory skriptu MRI s touto volbou-C; použijte-T možnost spouštět linker skripty psané ve všeobecném účeluld skriptovací jazyk. Li MRI-cmdfile neexistuje,ldhledá to v adresářích určených libovolným-L možnosti.

-d

-DC

-dp

Tyto tři možnosti jsou ekvivalentní; pro kompatibilitu s ostatními linkery jsou podporovány více formulářů. Přiřazují prostor běžným symbolům, i když je určen přesunovatelný výstupní soubor (s-r). Příkaz skriptu "FORCE_COMMON_ALLOCATION" má stejný účinek.

-E vstup

--entry = vstup

Použití vstup jako explicitní symbol pro počáteční spuštění vašeho programu, spíše než výchozí vstupní bod. Není-li pojmenován žádný symbol vstup , linker se pokusí analyzovat vstup jako číslo a použijte jako vstupní adresu (číslo bude interpretováno v základně 10, můžete použít vedoucí0x pro základnu 16 nebo přední0 pro základnu 8).

-E

--exportně dynamická

Při vytváření dynamicky propojeného spustitelného souboru přidejte všechny symboly do tabulky dynamických symbolů. Tabulka dynamických symbolů je množina symbolů, které jsou viditelné z dynamických objektů při běhu.

Pokud tuto možnost nepoužíváte, tabulka dynamických symbolů bude normálně obsahovat pouze ty symboly, na které odkazuje nějaký dynamický objekt uvedený v odkazu.

Pokud použijete "dlopen" k načtení dynamického objektu, který potřebuje odkazovat zpět na symboly definované programem, spíše než nějaký jiný dynamický objekt, pravděpodobně budete muset použít tuto možnost při propojení samotného programu.

Pomocí skriptu verze můžete také ovládat, jaké symboly by měly být přidány do tabulky dynamických symbolů, pokud to podporuje výstupní formát. Viz popis--version-script v @ ref {VERSION}.

-EB

Spojte velké objekty. To ovlivňuje výchozí formát výstupu.

-EL

Spojte malé endiánské objekty. To ovlivňuje výchozí formát výstupu.

-F

--pomocný název

Při vytváření sdíleného objektu ELF nastavte interní pole DT_AUXILIARY na zadaný název. To informuje dynamický linker, že tabulka symbolů sdíleného objektu by měla být použita jako pomocný filtr na tabulce symbolů sdíleného objektu název .

Pokud později propojíte program s tímto objektem filtru, při spuštění programu se dynamickým linkerem zobrazí pole DT_AUXILIARY. Pokud dynamický linker vyřeší nějaké symboly z objektu filtru, nejprve zkontroluje, zda je ve sdíleném objektu definice název . Pokud existuje, použije se namísto definice ve filtrovacím objektu. Sdílený objekt název nemusí existovat. Tak sdílený objekt název může být použita k zajištění alternativní implementace určitých funkcí, snad pro ladění nebo pro strojově specifický výkon.

Tuto možnost lze zadat více než jednou. Položky DT_AUXILIARY budou vytvořeny v pořadí, ve kterém se objeví na příkazovém řádku.

-F název

--filtr název

Při vytváření sdíleného objektu ELF nastavte interní pole DT_FILTER na zadaný název. Toto informuje dynamický linker, že tabulka symbolů sdíleného objektu, který je vytvořen, by měla být použita jako filtr na tabulce symbolů sdíleného objektu název .

Pokud později propojíte program s tímto objektem filtru, při spuštění programu se dynamickým linkerem zobrazí pole DT_FILTER. Dynamický linker vyřeší symboly podle tabulky symbolů objektu filtru jako obvykle, ale ve skutečnosti bude odkazovat na definice nalezené ve sdíleném objektu název . Objekt filtru lze tedy použít k výběru podmnožiny symbolů poskytovaných objektem název .

Někteří starší odkazující používali-F v rámci kompilace nástrojové řady pro zadání formátu objektového souboru pro vstupní i výstupní objektové soubory. GNU linker používá pro tento účel další mechanismy:-b, --formát, --formát volby, příkaz "TARGET" v skriptech propojky a proměnná prostředí "GNUTARGET". GNU linker bude ignorovat-F pokud nevytvoříte sdílený objekt ELF.

-fini název

Při vytváření spustitelného nebo sdíleného objektu ELF volejte NAME, když je spustitelný nebo sdílený objekt uvolněn, nastavením DT_FINI na adresu funkce. Ve výchozím nastavení odkazovač používá funkci "_fini" jako funkci volání.

-G

Ignorováno. Za předpokladu kompatibility s jinými nástroji.

-G hodnota

--gpsize = hodnota

Nastavte maximální velikost objektů, které mají být optimalizovány pomocí registru GP velikost . To je smysluplné pouze pro formáty objektových souborů, jako je MIPS ECOFF, který podporuje umístění velkých a malých objektů do různých sekcí. Toto je ignorováno pro jiné formáty souborů objektů.

-h název

-soname = název

Při vytváření sdíleného objektu ELF nastavte interní pole DT_SONAME na zadaný název. Když je spustitelný soubor spojen se sdíleným objektem, který má pole DT_SONAME, pak se po spuštění spustitelného souboru dynamický linker pokusí načíst sdílený objekt zadaný pomocí pole DT_SONAME namísto použití názvu souboru daného linkeru.

-i

Proveďte přírůstkové propojení (stejně jako možnost-r).

-init název

Při vytváření spustitelného nebo sdíleného objektu ELF zavolejte NAME, když je zaveden spustitelný nebo sdílený objekt, nastavením DT_INIT na adresu funkce. Ve výchozím nastavení odkazovač používá jako volání funkci "_init".

-l archiv

--library = archiv

Přidat archivní soubor archiv do seznamu souborů, které chcete propojit. Tato volba může být použita několikrát.ld bude vyhledávat v seznamu cest pro výskyty "libarchive.a" pro každý archiv specifikováno.

Na systémech, které podporují sdílené knihovny,ld může také hledat knihovny s rozšířeními jinými než ".a". Konkrétně, na systémech ELF a SunOS,ld bude vyhledávat v adresáři knihovny s příponou ".so" před vyhledáním adresáře s příponou ".a". Podle konvence označuje rozšíření ".so" sdílenou knihovnu.

Linker vyhledá archiv pouze jednou, na místě, kde je zadán na příkazovém řádku. Pokud archív definuje symbol, který nebyl definován v nějakém objektu, který se objevil před archivem na příkazovém řádku, linker bude obsahovat příslušné soubory z archivu. Avšak nedefinovaný symbol v objektu, který se objeví později na příkazovém řádku, nezpůsobí, že linker znovu vyhledá archiv.

Viz-( možnost způsobu, jak vynutit linker několikrát vyhledávat archivy.

Stejný archiv můžete listovat vícekrát na příkazovém řádku.

Tento typ vyhledávání archivů je pro unixové linkery standardní. Pokud však používáteld onAIX, uvědomte si, že se liší od chování linkeru AIX.

-L searchdir

--library-cesta = searchdir

Přidat cestu searchdir do seznamu cestld bude vyhledávat archivní knihovny ald řídicí skripty. Tuto možnost můžete použít několikrát. Adresáře jsou prohledávány v pořadí, ve kterém jsou zadány na příkazovém řádku. Adresáře zadané na příkazovém řádku jsou prohledávány před výchozími adresáři. Všechno-L možnosti platí pro všechny-l možnosti, bez ohledu na pořadí, ve kterém se objeví možnosti.

Li searchdir začíná písmenem "=", pak "=" bude nahrazeno znakem předpona sysroot , cesta určená při konfiguraci linkeru.

Výchozí sada hledaných cest (bez specifikace s-L) závisí na tom, který režim emulaceld používá v některých případech i způsob, jakým byl konfigurován.

Cesta může být také zadána ve skriptu odkazu s příkazem "SEARCH_DIR". Adresáře zadané tímto způsobem jsou vyhledávány v místě, kde se v příkazovém řádku objeví skript propojení.

-m emulace

Emulovat emulace linker. Dostupné emulace můžete uvést pomocí příkazu--verbose nebo-PROTImožnosti.

Pokud-m volba není použita, emulace je převzata z proměnné prostředí "LDEMULATION", pokud je definována.

V opačném případě výchozí emulace závisí na tom, jak byl nakonfigurován linker.

-M

--print-map

Vytiskněte mapu odkazů na standardní výstup. Mapa odkazů obsahuje informace o tomto odkazu, včetně následujících:

*

Kde jsou soubory souborů a symboly mapovány do paměti.

*

Jak jsou přiděleny běžné symboly.

*

Do tohoto odkazu byli zařazeni všichni členové archivu se zmínkou o symbolu, který způsobil, že byl archivář vložen.

-n

--nmagický

Vypněte zarovnání stránek a označte výstup jako "NMAGIC" pokud je to možné.

-N

--omagický

Nastavte textové a datové sekce, aby byly čitelné a zapisovatelné. Nezapomeňte také na segment datových segmentů a zakázat propojení se sdílenými knihovnami. Pokud výstupní formát podporuje unixové magické čísla, označte výstup jako "OMAGIC".

- neomagický

Tato možnost vylučuje většinu účinků-N volba. Nastaví textový oddíl tak, aby byl pouze pro čtení, a nutí datový segment, aby byl zarovnán na stránku. Poznámka - tato možnost neumožňuje propojení se sdílenými knihovnami. Použití-Bdynamický pro tohle.

výstup

--output = výstup

Použití výstup jako název programu vytvořenéhold; pokud tato možnost není zadána, název a.out se používá ve výchozím nastavení. Příkaz skriptu "OUTPUT" může také zadat název výstupního souboru.

úroveň

Li úroveň je číselné hodnoty větší než nulald optimalizuje výstup. To může trvat podstatně déle, a proto by pravděpodobně mělo být povoleno pouze pro poslední binární.

-q

--emit-relocs

Ponechat oddíly a obsah přemístění v plně propojených exececutables. Analýza odkazů a nástroje pro optimalizaci odkazu mohou tyto informace potřebovat, aby provedly správné úpravy spustitelných souborů. Výsledkem jsou větší spustitelné soubory.

Tato možnost je v současné době podporována pouze na platformách ELF.

-r

- lze vyměnit

Vygenerujte přemístitelný výstup --- tedy generujte výstupní soubor, který může sloužit jako vstupld. To se často nazývá částečné propojení . Jako vedlejší efekt v prostředích podporujících standardní magické čísla Unixu tato možnost také nastavuje magické číslo výstupního souboru na hodnotu "OMAGIC". Není-li tato možnost zadána, vytvoří se absolutní soubor. Při propojení programů C ++ tuto možnost nebude vyřešit odkazy na konstruktéry; k tomu, použijte-Ur.

Pokud vstupní soubor nemá stejný formát jako výstupní soubor, částečné propojení je podporováno pouze v případě, že tento vstupní soubor neobsahuje žádné přemístění. Různé výstupní formáty mohou mít další omezení; například některé formáty založené na "a.out" nepodporují částečné propojení se vstupními soubory v jiných formátech vůbec.

Tato volba dělá totéž jako-i.

-R název souboru

- just-symbols = název souboru

Přečtěte si názvy symbolů a jejich adresy název souboru , ale nepřevádějte jej ani jej nezahrnujte do výstupu. To umožňuje, aby váš výstupní soubor symbolicky odkazoval na absolutní umístění paměti definované v jiných programech. Tuto možnost můžete použít více než jednou.

Pro kompatibilitu s jinými linkery ELF, pokud-R za názvem adresáře následuje název adresáře, nikoli název souboru, je považován za název adresáře-rpath volba.

-s

-strip-vše

Vynechat všechny informace o symbolu z výstupního souboru.

-S

-strip-ladění

Vynechat informace o symbolovém ladění (ale ne všechny symboly) z výstupního souboru.

-t

--stopa

Vytiskněte jména vstupních souborů jakold zpracovává je.

-T scriptfile

--script = scriptfile

Použití scriptfile jako spojovací skript. Tento skript nahrazujeldje výchozí linker skript (spíše než přidání do něj), tak příkazový řádek musí specifikovat vše potřebné k popisu výstupního souboru. Li scriptfile v aktuálním adresáři neexistuje, "ld" jej vyhledá v adresářích zadaných některým z předcházejících-L možnosti. Násobek-T volby se hromadí.

-u symbol

--undefined = symbol

Platnost symbol které chcete zadat do výstupního souboru jako nedefinovaný symbol. K tomu může například spouštět propojení dalších modulů ze standardních knihoven.-u lze opakovat s různými argumenty možností pro zadání dalších nedefinovaných symbolů. Tato volba je ekvivalentní příkazu "EXTERN" linker script.

-Ur

Pro cokoli jiného než programy C ++ je tato volba ekvivalentní-r: generuje přemístitelný výstup --- tj. výstupní soubor, který může zase sloužit jako vstupld. Při propojení programů C ++,-Ur dělá vyřešit odkazy na konstruktory, na rozdíl od nich-r. Nepoužívá se-Ur na soubory, které byly sami propojeny-Ur; jakmile byla konstruktorová tabulka postavena, nelze ji přidat. Použití-Ur pouze pro poslední částečný odkaz a-r pro ostatní.

--unique = SEKCE

Vytvoří samostatnou výstupní sekci pro každou odpovídající sekci vstupů SEKCE , nebo pokud je volitelný zástupný znak SEKCE nedostatek argumentu pro každou sekci vstupu pro sirénty. Osiřelý úsek není jednoznačně uveden v skriptu linkeru. Tuto možnost můžete použít několikrát na příkazovém řádku. Zabraňuje normální slučování vstupních úseků se stejným názvem, které mají přepsané přiřazení úseků výstupu v skriptu propojky.

-proti

--verze

-PROTI

Zobrazte číslo verze prold. The-PROTI také obsahuje seznam podporovaných emulací.

-X

-diskard-vše

Smazat všechny místní symboly.

-X

- místní obyvatelé

Smazat všechny dočasné místní symboly. Pro většinu cílů jsou to všechny místní symboly, jejichž jména začínajíL.

-y symbol

--trace-symbol = symbol

Vytiskněte název každého propojeného souboru, ve kterém se nachází symbol objeví se. Tato možnost může být zadána libovolným počtem. Na mnoha systémech je nutné předcházet podtržítko.

Tato volba je užitečná, pokud máte ve svém odkazu neurčený symbol, ale nevíte, odkud odkaz pochází.

-Y cesta

Přidat cesta do výchozí cesty hledání knihovny. Tato možnost existuje pro kompatibilitu Solaris.

-z klíčové slovo

Uznávané klíčová slova jsou "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", " ". Ostatní ostatní klíčová slova jsou ignorována pro kompatibilitu Solaris. "initfirst" označuje objekt, který má být inicializován nejprve za běhu před jinými objekty."interpose" označuje objekt, který se v tabulce symbolů vkládá před všechny symboly, ale primární spustitelný soubor. "loadfltr" označuje objekt, který má být zpracováván okamžitě během běhu. "nodefaultlib" označuje objekt, který bude ignorovat hledání závislostí tohoto objektu všechny výchozí cesty hledání knihovny. "nodelete" označuje, že objekt by neměl být za běhu vykládán. "nodlopen" označuje objekt, který není k dispozici pro "dlopen". "nodump" označuje, že objekt nemůže být vyhozen do "dldump". "nyní" označí objekt s ne-lazy runtime vazba. "původ" označuje objekt může obsahovat $ ORIGIN. "defs" nepovoluje nedefinované symboly. "muldefs" umožňuje několik definic. "combreloc" kombinuje více úseků přesunu a třídí je tak, aby bylo možné provést ukládání dynamických symbolů do mezipaměti.

"nocombreloc" zabraňuje kombinování více částí přemístění. "nocopyreloc" zabraňuje výrobě kopírování.

-( archiv -)

- počáteční skupina archiv - end-group

The archiv by měl být seznam archivních souborů. Mohou to být buď explicitní názvy souborů, nebo-lmožnosti.

Zadané archivy jsou opakovaně prohledávány, dokud nebudou vytvořeny žádné nové nedefinované odkazy. Obvykle je archiv vyhledáván pouze jednou v pořadí, které je zadáno na příkazovém řádku. Pokud je v tomto archivu potřebný symbol pro vyřešení nedefinovaného symbolu, na který odkazuje objekt v archivu, který se objeví později na příkazovém řádku, linker by tento odkaz neuměl vyřešit. Seskupením archivů se všichni opakovaně prohledávají, dokud nebudou vyřešeny všechny možné odkazy.

Použití této možnosti má významné výkonnostní náklady. Nejlépe je použít pouze tehdy, když existují nevyhnutelné kruhové odkazy mezi dvěma nebo více archivy.

--accept-unknown-input-arch

--no-přijmout-neznámý-vstup-arch

Řekne linkeru, aby přijímal vstupní soubory, jejichž architektura nemůže být rozpoznána. Předpokladem je, že uživatel ví, co dělají, a záměrně chce propojit tyto neznámé vstupní soubory. Toto bylo výchozí chování linkeru před vydáním verze 2.14. Výchozím chováním od verze 2.14 je odmítnutí takových vstupních souborů, a tak--accept-unknown-input-arch byla přidána možnost obnovení starého chování.

- potvrďte klíčové slovo

Tato možnost je ignorována pro kompatibilitu SunOS.

-Bdynamický

-dy

-call_shared

Spojení s dynamickými knihovnami. To má smysl pouze na platformách, pro které jsou podporovány sdílené knihovny. Tato možnost je zpravidla standardní pro takové platformy. Různé varianty této možnosti jsou kompatibilní s různými systémy. Tuto možnost můžete použít vícekrát na příkazovém řádku: ovlivňuje vyhledávání knihovny-l možnosti, která následují.

-Bgroup

Nastavte příznak "DF_1_GROUP" v položce "DT_FLAGS_1" v dynamické části. To způsobí, že spojovací modul runtime zpracovává vyhledávání v tomto objektu a jeho závislosti je třeba provést pouze uvnitř skupiny.--no-nedefinováno je implicitní. Tato volba má smysl pouze na platformách ELF, které podporují sdílené knihovny.

-Bstatic

-dn

-non_shared

-statický

Nepřipojujte se ke sdíleným knihovnám. To má smysl pouze na platformách, pro které jsou podporovány sdílené knihovny. Různé varianty této možnosti jsou kompatibilní s různými systémy. Tuto možnost můžete použít vícekrát na příkazovém řádku: ovlivňuje vyhledávání knihovny-l možnosti, která následují.

-Bsymbolický

Při vytváření sdílené knihovny vázat odkazy na globální symboly definici v rámci sdílené knihovny, pokud existuje. Obvykle je možné, že program propojený se sdílenou knihovnou přepsá definici v rámci sdílené knihovny. Tato možnost má smysl pouze na platformách ELFplatform, které podporují sdílené knihovny.

- kontrolní sekce

- nekontrolovat sekce

Zeptá se na linker ne pro kontrolu adres sekcí po jejich přiřazení, aby zjistili, zda nedošlo k překrývání. Normálně linker provede tuto kontrolu a pokud zjistí nějaké překrytí, vytvoří vhodné chybové zprávy. Linker o tom ví a upravuje sekce v překryvných vrstvách. Výchozí chování lze obnovit pomocí přepínače příkazového řádku- kontrolní sekce.

--cref

Vyjměte tabulku křížových odkazů. Je-li generován soubor mapovacího odkazovače, křížová tabulka se vytiskne do souboru mapy. Jinak se tiskne na standardní výstup.

Formát tabulky je úmyslně jednoduchý, takže může být v případě potřeby snadno zpracován skriptem. Symboly jsou vytištěny, seřazeny podle názvu. U každého symbolu je uveden seznam názvů souborů. Pokud je definován symbol, první uvedený soubor je umístění definice. Zbývající soubory obsahují odkazy na symbol.

--no-define-common

Tato volba zabraňuje přiřazení adres k běžným symbolům. Příkaz skriptu "INHIBIT_COMMON_ALLOCATION" má stejný účinek.

The--no-define-common volba umožňuje oddělit rozhodnutí přiřazení adres k běžným symbolům z výběru typu výstupního souboru; jinak nepřevoditelný typ výstupu přenáší adresy na běžné symboly. Použitím--no-define-common umožňuje společným symbolům odkazovaným ze sdílené knihovny přidělit adresy pouze v hlavním programu. To eliminuje nepoužívaný duplicitní prostor ve sdílené knihovně a také zabraňuje jakémukoli možnému zmatku nad vyřešením nesprávného dupliku, pokud existuje mnoho dynamických modulů se specializovanými vyhledávacími cestami pro rozlišení symbolu běhu.

--defsym symbol = výraz

Vytvořte globální symbol ve výstupním souboru, který obsahuje absolutní adresu zadanou výraz . Tuto možnost můžete použít tolikrát, kolikrát je potřeba pro definování více symbolů v příkazovém řádku. Omezená forma aritmetiky je podporována pro výraz v tomto kontextu: můžete zadat hexadecimální konstantu nebo název existujícího symbolu nebo použít "+" a "-" pro přidání nebo odečítání hexadecimálních konstant nebo symbolů. Pokud potřebujete mnohem propracovanější výrazy, zvažte použití příkazového jazyka linkeru ze skriptu. Poznámka: mezi nimi by nemělo být žádné prázdné místo symbol , rovná se znaménko (``=''), a výraz .

- vyměnit = styl

--no-odizolování

Tyto možnosti určují, zda chcete v chybových zprávách a jiných výstupech odstranit názvy symbolů. Když je spojovací prvek přeměněn, snaží se prezentovat názvy symbolů čitelným způsobem: prolistuje vedoucí podtržítka, pokud jsou používány ve formátu souboru objektu, a převede názvy symbolů C ++ do uživatelsky čitelných názvů. Různí kompilátoři mají různé styly. Volitelný argument stylu vyměnitelnosti lze použít pro výběr vhodného stylu vyměnitelnosti pro kompilátor. Spojovací prvek bude ve výchozím nastavení vyměňován, pokud není proměnná prostředíCOLLECT_NO_DEMANGLE je nastaveno. Tyto možnosti lze použít k přepsání výchozího nastavení.

- dynamický linker soubor

Nastavte název dynamického linkeru. To má smysl pouze při generování dynamicky spřažených spustitelných souborů ELF. Výchozí dynamický linker je normálně správný; nepoužívejte to, pokud nevíte, co děláte.

- vložené-přemístit

Tato volba je smysluplná pouze tehdy, když propojíte MIPS vložený PIC kód generovaný volbou -membedded-pic na kompilátor a assembler GNU. Způsobí, že linker vytvoří tabulku, která může být použita při běhu k přemístění všech dat, které byly staticky inicializovány na hodnoty ukazatele. Podrobné informace naleznete v kódu testsuite / ld-empic.

- varování před smrtí

Všechny varování považujte za chyby.

- force-exe-suffix

Ujistěte se, že výstupní soubor má příponu .exe.

Pokud úspěšně sestavený plně propojený výstupní soubor nemá příponu ".exe" nebo ".dll", tato volba přinutí linkeru kopírovat výstupní soubor na stejný název s příponou ".exe". Tato volba je užitečná při použití nemodifikovaných makefile Unix na hostiteli systému Microsoft Windows, protože některé verze systému Windows nebudou zobrazovat obraz, dokud se nezobrazí přípona ".exe".

--no-gc-sekce

--gc-sekce

Povolit sběr nepotřebných vstupních úseků. Je ignorována na cílech, které tuto možnost nepodporují. Tato volba není kompatibilní s-r, ani by neměl být používán s dynamickým propojením. Výchozí chování (nevykonání této sbírky odpadků) lze obnovit zadáním--no-gc-sekce na příkazovém řádku.

--Pomoc

Vytiskněte souhrn možností příkazového řádku na standardní výstup a výstup.

--Target-help

Vytiskněte shrnutí všech možností pro konkrétní cíl na standardním výstupu a výstupu.

-Mapa mapfile

Vytiskněte mapu odkazu na soubor mapfile . Viz popis-M výše.

--no-uchovat-paměť

ld normálně optimalizuje rychlost při využití paměti tím, že ukládá tabulky symbolů vstupních souborů do paměti. Tato volba vám říkáld místo toho optimalizovat pro využití paměti, podle potřeby přehodnotit tabulky symbolů. To může být požadováno, pokudld během propojení velkého spustitelného souboru dojde k vyčerpání paměti.

--no-nedefinováno

-z defs

Normálně při vytváření ne-symbolické sdílené knihovny jsou povoleny nedefinované symboly, které lze vyřešit načítacím modulem runtime. Tyto volby nepovolují takové nedefinované symboly.

--allow-multiple-definition

-z muldefs

Normálně, když je symbol definován vícekrát, odkazovač hlásí fatální chybu. Tyto možnosti umožňují několik definic a použije se první definice.

--allow-shlib-nedefinováno

Povolit nedefinované symboly ve sdílených objektech, i když je nastaveno --no-undefined. Výsledkem bude, že nedefinované symboly v běžných objektech budou ještě vyvolávat chybu, ale nedefinované symboly ve sdílených objektech budou ignorovány. Implementace no_undefined předpokládá, že runtime linker se zmáčkne na nedefinované symboly. Existuje přinejmenším jeden systém (BeOS), kde jsou nedefinované symboly v sdílených knihovnách normální, jelikož je jádro opraví při načítání, aby se zvolila, která funkce je nejvhodnější pro aktuální architekturu. TJ. dynamicky vyberte příslušnou funkci memset. Zřejmě je také normální, že sdílené knihovny HPPA mají neurčené symboly.

--no-nedefinovaná verze

Normálně, pokud má symbol nedefinovanou verzi, odkazovač ji bude ignorovat. Tato volba nepovoluje symboly s nedefinovanou verzí a namísto toho bude vydána fatální chyba.

--no-varování-Neshoda

Normálněld zobrazí se chyba, pokud se pokusíte propojit vstupní soubory, které jsou z nějakého důvodu nesprávné, možná proto, že byly kompilovány pro různé procesory nebo pro různé endiannesses. Tato volba vám říkáld že by měl ticho umožňovat takové možné chyby. Tato možnost by měla být používána pouze opatrně, v případech, kdy jste podnikli nějaké zvláštní kroky, které zajistí, že chyby spojovacího řetězce jsou nevhodné.

--no-celý-archiv

Vypněte efekt- celý archiv možnost následných archivních souborů.

--noinhibit-exec

Zachovat spustitelný výstupní soubor vždy, když je stále použitelný.Obvykle linker nebude produkovat výstupní soubor, pokud narazí na chyby během procesu propojení; opustí, aniž by psal výstupní soubor, když vydává jakoukoli chybu.

-nostdlib

Na příkazovém řádku explicitně zadávejte pouze adresáře knihovny vyhledávání. Adresáře knihovny zadané v skriptech linkeru (včetně linkerových skriptů zadaných na příkazovém řádku) jsou ignorovány.

--formát výstupní formát

ld může být nakonfigurován tak, aby podporoval více než jeden typ souboru objektu. Pokud je vašeld je konfigurován tímto způsobem, můžete použít--formát možnost zadat binární formát souboru výstupního objektu. I kdyžld je nakonfigurován tak, aby podporoval formáty alternativních objektů, obvykle to není nutné specifikovat jakold by měl být konfigurován tak, aby produkoval jako výchozí výstupní formát nejběžnější formát na každém stroji. výstupní formát je textový řetězec, název určitého formátu podporovaného knihovnami BFD. (Můžete uvést dostupné binární formáty pomocíobjdump -i.) Příkaz skriptu "OUTPUT_FORMAT" může také specifikovat výstupní formát, ale tato volba ho přepíše.

-qmagic

Tato možnost je ignorována pro kompatibilitu s operačním systémem Linux.

-Qy

Tato možnost je ignorována pro kompatibilitu SVR4.

--relaxovat

Možnost s efekty závislou na stroji. Tato možnost je podporována pouze u několika cílů.

Na některých platforech se--relaxovat volba provádí globální optimalizace, která se stanou možnými, když linker řeší adresování v programu, například uvolnění režimů adres a syntetizování nových instrukcí v souboru výstupních objektů.

Na některých platformách mohou tyto globální optimalizace vazeb času způsobit, že symbolické ladění výsledného spustitelného souboru je nemožné. To je známo, že se jedná o řadu procesorů Matsushita MN10200 a MN10300.

Na platformách, kde to není podporováno,--relaxovat je přijata, ale ignorována.

--retain-symbols-file název souboru

Udržet pouze symboly uvedené v souboru název souboru , vyhazovat všechny ostatní. název souboru je jednoduše plochý soubor s jedním symbolem na každé řádce. Tato volba je užitečná zejména v prostředích (např. VxWorks), kde se postupně sbírá velká globální tabulka symbolů, aby se ušetřila paměť běhu.

--retain-symbols-file dělá ne zrušte nedefinované symboly nebo symboly potřebné pro přemístění.

Můžete zadat pouze--retain-symbols-file jednou v příkazovém řádku. To má přednost-s a-S.

-rpath dir

Přidejte adresář do cesty hledání knihovny. Toto se používá při propojení ELFexecutable se sdílenými objekty. Všechno-rpath argumenty jsou zřetězeny a předány linkeru runtime, který je používá k nalezení sdílených objektů za běhu. The-rpath možnost se také používá při lokalizaci sdílených objektů, které jsou potřebné pro sdílené objekty explicitně zahrnuté do odkazu; viz popis-rpath-link volba. Li-rpath se nepoužívá při propojení spustitelného souboru ELF, použije se obsah proměnné prostředí "LD_RUN_PATH", pokud je definován.

The-rpath může být také použito na SunOS. Ve výchozím nastavení na serveru SunOS vytvoří linker ze všech patch vyhledávací nápovědu-L možnosti, které jsou uvedeny. Pokud-rpath je použita cesta hledání runtime výlučně pomocí-rpath možnosti ignorovat-Lmožnosti. To může být užitečné při použití gcc, což přidává mnoho-L možnosti, které mohou být na souborových systémech připojených k systému NFS.

Pro kompatibilitu s jinými linkery ELF, pokud-R za názvem adresáře následuje název adresáře, nikoli název souboru, je považován za název adresáře-rpath volba.

-rpath-link DIR

Pokud používáte ELF nebo SunOS, může jedna sdílená knihovna vyžadovat další. K tomu dochází, když odkaz "ld-shared" obsahuje sdílenou knihovnu jako jeden ze vstupních souborů.

Když se linker setká s takovou závislostí při provádění nesdíleného odkazu, který není přemístitelný, automaticky se pokusí nalézt požadovanou sdílenou knihovnu a zahrnout ji do odkazu, pokud není explicitně zahrnut. V takovém případě-rpath-link volba určuje první sadu adresářů pro vyhledávání. The-rpath-link může určit sekvenci názvů adresářů buď zadáním seznamu názvů oddělených dvojtečkami nebo opakovaným zobrazením.

Tato možnost by měla být používána s opatrností, protože přepíše vyhledávací cestu, která byla pravděpodobně zkompilována do sdílené knihovny. V takovém případě je možné neúmyslně použít jinou vyhledávací cestu než linker runtime.

Linker používá následující vyhledávací cesty k nalezení požadovaných sdílených knihoven.

1.

Libovolné adresáře specifikované uživatelem-rpath-link možnosti.

2.

Libovolné adresáře specifikované uživatelem-rpath možnosti. Rozdíl mezi-rpath a-rpath-link je to adresáře specifikované-rpath možnosti jsou zahrnuty v spustitelném souboru a používány při běhu, zatímco-rpath-link volba je účinná pouze v době spojení. Je to pouze nativní linker.

3.

Na systému ELF, jestliže-rpath a "rpath-link" nebyly použity, prohledávání obsahu proměnné prostředí "LD_RUN_PATH". Je to pouze nativní linker.

4.

Na SunOS, pokud-rpath volba nebyla použita, vyhledejte libovolné adresáře zadané pomocí-L možnosti.

5.

Pro nativního linkeru obsah proměnné prostředí "LD_LIBRARY_PATH".

6.

Pro přirozený odkaz ELF jsou adresáře v adresáři "DT_RUNPATH" nebo "DT_RPATH" sdílené knihovny vyhledávány pro sdílené knihovny, které potřebuje.Položky "DT_RPATH" jsou ignorovány, pokud existují položky "DT_RUNPATH".

7.

Výchozí adresáře obvykle / lib a / usr / lib .

8.

Pro nativní linker na systému ELF, pokud je soubor /etc/ld.so.conf existuje seznam adresářů nalezených v tomto souboru.

Není-li nalezena požadovaná sdílená knihovna, odkazovač vydá varování a pokračuje v propojení.

-shared

-Barebný

Vytvořte sdílenou knihovnu. To je v současné době podporováno pouze na platformách ELF, XCOFF a SunOS. V systému SunOS linker automaticky vytvoří sdílenou knihovnu-E možnost není použita a v tomto odkazu jsou neurčené symboly.

--sort-common

Tato volba vám říkáld uspořádat běžné symboly podle velikosti, když je umístí do příslušných výstupních sekcí. Nejprve přijdou všechny symboly jednoho bajtu, pak všechny dva byty, potom všechny čtyři bajty a pak všechno ostatní. To má zabránit mezery mezi symboly kvůli omezením zarovnání.

--split-by-file velikost

Podobný--plus-by-reloc ale vytvoří novou výstupní sekci pro každý vstupní soubor, když velikost je dosaženo. velikost výchozí velikost 1, pokud není zadána.

--split-by-reloc spočítat

Snaží se vytvořit další oddíly ve výstupním souboru tak, aby žádná samostatná část výstupu v souboru neobsahovala více než spočítat přemístění. To je užitečné při vytváření obrovských přemístitelných souborů pro stahování do určitých jader v reálném čase pomocí formátu souboru objektů COFF; protože COFF nemůže představovat více než 65535 přesunů v jedné sekci. Všimněte si, že to nebude fungovat s formáty souborů objektů, které nepodporují libovolné oddíly. Linker nebude rozdělovat jednotlivé vstupní části pro redistribuci, takže pokud jedna vstupní část obsahuje více než spočítat přemístění jedné výstupní části bude obsahovat mnoho přemístění. spočítat výchozí hodnotu 32768.

--staty

Vypočítat a zobrazit statistiky o provozu linkeru, jako je doba provádění a využití paměti.

- tradiční formát

Pro některé cíle je výstup zld se v některých ohledech liší od výstupu některých existujících linkerů. Tento přepínač požadujeld místo toho použijte tradiční formát.

Například na SunOS,ld kombinuje duplicitní položky v tabulce symbolů. To může snížit velikost výstupního souboru s úplnými informacemi o ladění o více než 30 procent. Bohužel, program SunOS "dbx" nemůže číst výsledný program ("gdb" nemá žádné potíže). The- tradiční formát přepínač říkáld nekombinovat duplicitní záznamy.

- odstartování sekce název oddílu = org

Vyhledejte část ve výstupním souboru na absolutní adrese zadané příkazem org . Tuto volbu můžete použít tolikrát, kolikrát je potřeba k nalezení více sekcí v příkazovém řádku. org musí být jedno hexadecimální celé číslo; pro kompatibilitu s ostatními linkery, můžete vynechat vedoucí0x obvykle spojené s hexadecimálními hodnotami. Poznámka: mezi nimi by nemělo být žádné prázdné místo název oddílu , rovná se znaménko (``=''), a org .

-Tbss org

-Todata org

-Text org

Použití org jako výchozí adresu pro --- "bss", "data" nebo "textový" segment výstupního souboru. org musí být jedno hexadecimální celé číslo; pro kompatibilitu s ostatními linkery, můžete vynechat vedoucí0x obvykle spojené s hexadecimálními hodnotami.

-dll-verbose

--verbose

Zobrazte číslo verze prold a seznam podporovaných emulací linkeru. Zobrazte, které vstupní soubory lze a nelze otevřít. Zobrazí skript propojovacího propojení, který používá linker.

--version-script = verze-scriptfile

Zadejte název skriptu verze odkazu. Toto je obvykle používáno při vytváření sdílených knihoven, které určují další informace o hierarchii verze pro vytvořenou knihovnu. Tato volba má smysl pouze na platformách ELF, které podporují sdílené knihovny.

--warn-common

Varujte, když je společný symbol kombinován s jiným běžným symbolem nebo s definicí symbolu. Unixové linkery dovolují tuto poněkud nedbalou praxi, ale linkery na některých jiných operačních systémech ne. Tato možnost vám umožní najít potenciální problémy při kombinaci globálních symbolů. Některé knihovny C bohužel tuto praxi používají, takže si můžete v knihovnách, stejně jako ve vašich programech, upozornit na symboly.

Existují tři druhy globálních symbolů, které zde ilustrují příklady C:

int i = 1;

Definice, která se nachází v části inicializovaných dat výstupního souboru.

external int i;

Neurčený odkaz, který nevymezuje prostor. Musí existovat definice nebo společný symbol pro proměnnou někde.

int i;

Společný symbol. Pokud pro proměnnou existuje pouze jeden (nebo více) společných symbolů, jde o neinicializovanou datovou oblast výstupního souboru. Spojovací prvek spojuje více společných symbolů pro stejnou proměnnou do jediného symbolu. Jsou-li různé velikosti, vybírá největší velikost. Linker promění společný symbol do deklarace, pokud existuje definice stejné proměnné.

The--warn-common volba může vytvořit pět dr