Linux / Unix naredba: Id

IME

ld - Upotreba LD , GNU poveznika

SINOPSIS

ld [ opcije ] objfile ...

OPIS

ld kombinira brojne datoteke objekata i arhive, premješta njihove podatke i povezuje simboličke reference. Obično zadnji korak u izradi programa je pokrenuti ld .

ld prihvaća Linker Command Language datoteke napisane u supersetu AT & T's Link Editor Command Language sintakse, kako bi se osigurala eksplicitna i potpuna kontrola nad procesom povezivanja.

Ova stranica za čovjeka ne opisuje zapovjedni jezik; pogledajte ld unos u "info" ili priručnik ld: GNU linker, za potpune pojedinosti o zapovjednom jeziku i drugim aspektima GNU linkera.

Ova verzija ld koristi biblioteke BFD opće namjene za rad na objektnim datotekama. To omogućuje ld čitati, kombinirati i pisati objektne datoteke u različitim formatima - primjerice, COFF ili "a.out". Različiti formati mogu se međusobno povezati za izradu bilo koje dostupne vrste objekta.

Osim fleksibilnosti, GNU povezivač je korisniji od drugih poveznika u pružanju dijagnostičkih informacija. Mnogi linkeri napuštaju izvršenje odmah nakon što se susreće s pogreškom; kad god je to moguće, ld nastavlja s izvršavanjem, omogućujući vam da prepoznate druge pogreške (ili, u nekim slučajevima, dobijete izlaznu datoteku usprkos pogrešci).

GNU linker ld treba pokriti širok raspon situacija i biti što kompatibilniji s drugim linkerima. Kao rezultat toga, imate mnogo izbora za upravljanje njegovim ponašanjem.

OPCIJE

Linker podržava mnoštvo opcija naredbenog retka , ali u stvarnoj praksi malo ih se koristi u bilo kojem kontekstu. Na primjer, česta upotreba ld je povezivanje standardnih Unix datoteka objekata na standardni, podržani Unix sustav . Na takvom sustavu, povezati datoteku "hello.o":

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

Ovo govori ld da stvori datoteku koja se zove izlaz kao rezultat povezivanja datoteke "/lib/crt0.o" sa "hello.o" i bibliotekom "libc.a", koja će doći iz standardnih direktorija pretraživanja. (Pogledajte raspravu o opciji -l u nastavku.)

Neke opcije naredbenog retka u ld mogu biti specificirane u bilo kojem trenutku u naredbenom retku. Međutim, opcije koje se odnose na datoteke, kao što su L ili -T , uzrokuju čitanje datoteke u točki u kojoj se opcija pojavljuje u naredbenom retku, u odnosu na objektne datoteke i ostale opcije datoteka. Ponavljanje opcija nefile s drugačijim argumentom neće imati nikakav daljnji učinak niti nadjačati prethodne pojave (one dalje na lijevu stranu naredbenog retka) te opcije. Opcije koje se mogu značajno navesti više puta navedene su u opisu u nastavku.

Non-opcionalni argumenti su objektne datoteke ili arhivi koji se međusobno povezuju. Oni mogu slijediti, prethoditi ili biti pomiješani s opcijama naredbenog retka, osim što argument argumenta o objektnoj datoteci ne smije biti postavljen između opcije i njegovog argumenta.

Obično se linker poziva s barem jednom objektnom datotekom, ali možete odrediti druge oblike binarnih ulaznih datoteka koristeći -l , -R i zapovjedni jezik skripte. Ako uopće nisu navedene binarne ulazne datoteke, povezivač ne proizvodi nikakav izlaz i izdaje poruku Nema ulaznih datoteka .

Ako povezivač ne može prepoznati format datoteke objekta, pretpostavit će da je skripta za povezivanje. Ovako određena skripta povećava glavnu skriptu poveznika koja se koristi za vezu (bilo zadanu skriptu poveznika ili onu koja se navodi pomoću -T ). Ova značajka dopušta linkeru povezivanje s datotekom koja izgleda kao predmet ili arhiva, ali zapravo samo definira neke vrijednosti simbola ili koristi "INPUT" ili "GROUP" za učitavanje drugih objekata. Napominjemo da određivanje skripte na taj način samo povećava glavnu skriptu poveznika; upotrijebite opciju -T kako biste potpuno zamijenili zadanu skriptu poveznika.

Za opcije čija imena su jedno slovo, argumenti opcija moraju slijediti slovo opcija bez da se interveniraju u razmaku ili se dodaju kao zasebni argumenti odmah nakon opcije koja ih zahtijeva.

Za opcije čiji su nazivi višestruki slova, jedna ili dvije crtice mogu prethoditi naziv opcije; na primjer, simbol " traka" i " znak trakta" su ekvivalentni. Napomena - postoji jedna iznimka od ovog pravila. Opcije višestrukih slova koje počinju s malim slovom "o" mogu se prethoditi samo dvije crtice. To je smanjenje konfuzije s opcijom -o . Tako npr. -omagic postavlja naziv izlazne datoteke u magiju dok --omagic postavlja NMAGIC zastavicu na izlaz.

Argumente za opcije višestrukih slova moraju biti odvojene od naziva opcije jednakim znakom ili će se dati kao zasebni argumenti odmah nakon opcije koja ih zahtijeva. Na primjer, oznaka trake foo i - trak simbol = foo su ekvivalentni. Prihvaćene su jedinstvene kratice naziva višestruke opcije slova.

Napomena - ako se linker poziva neizravno, putem upravljačkog programa prevodioca (npr. Gcc ), sve opcije naredbene linije poveznika trebale bi biti prefiksane -Wl (ili što god je prikladno za određeni upravljački program prevodioca) ovako:

gcc -Wl, - startgroup foo.o bar.o -Wl, - krajnja grupa

To je važno jer inače program za vraćanje prevoditelja može tiho ispustiti opcije poveznika, što će rezultirati lošom vezom.

Evo tablice generičkih prečaca naredbenog retka koje je prihvatio GNU veznik:

-a ključna riječ

Ta je opcija podržana za HP / UX kompatibilnost. Argument ključne riječi mora biti jedna od arhive , dijeljenih ili zadanih arhiva . - arhivski je funkcionalno ekvivalentan -Bstatic , a druge dvije ključne riječi funkcionalno su ekvivalentne -Bdynamic . Ova se opcija može upotrebljavati bezbroj puta.

- Arhitektura

- arhitektura = arhitektura

U trenutnom izdanju ld , ova opcija je korisna samo za arhitekturu Intel 960 obitelji. U toj ld konfiguraciji, argument arhitekture identificira posebnu arhitekturu u obitelji 960, omogućujući neke zaštitne i mijenjanje putanja pretraživanja arhivske knjižnice.

Buduća izdanja ld-a mogu podržati sličnu funkcionalnost za ostale arhitektonske obitelji.

-b ulazni format

- format = ulazni format

ld može biti konfiguriran za podršku više od jedne vrste objekta datoteke. Ako je Vaš ld konfiguriran na ovaj način, pomoću opcije -b možete odrediti binarnu formulu za datoteke ulaznih objekata koje slijede ovu opciju na naredbenom retku. Čak i kada je ld konfiguriran za podržavanje alternativnih formata objekata, obično ne morate to odrediti, jer je ld potrebno konfigurirati da očekuje kao zadani format unosa najčešći format na svakom računalu. input-format je tekstni niz, naziv određenog formata koji podržava biblioteke BFD-a. (Možete birati dostupne binarne formate s objdump -i .)

Ovu opciju možete koristiti ako povezujete datoteke s neobičnim binarnim formatom. Također možete koristiti -b za prebacivanje formata eksplicitno (kada povezujete objektne datoteke različitih formata), uključujući -b ulazni format prije svake skupine objektnih datoteka u određenom formatu.

Zadani format preuzima se iz varijable okoline "GNUTARGET".

Također možete definirati format unosa iz skripte pomoću naredbe "TARGET";

-c MRI-naredbeni zapis

--mri-script = MRI-naredbeni zapis

Za kompatibilnost s linkerima koje proizvodi MRI, ld prihvaća skriptne datoteke napisane na alternativnom, ograničenom zapovjednom jeziku, opisanom u odjeljku GNU ld dokumenta MRI kompatibilnih skripata. Uvesti MRI skriptne datoteke s opcijom -c ; upotrijebite opciju -T za pokretanje skripti poveznica napisanih u općenitom ld skriptnom jeziku. Ako MRI-cmdfile ne postoji, ld ga potražuje u direktorijima određenim bilo kojom opcijom -L .

-D

-dc

-DP

Ove tri opcije su ekvivalentne; višestruki oblici podržani su za kompatibilnost s drugim linkerima. Oni dodjeljuju prostor zajedničkim simbolima čak i ako je specificirana izlazna datoteka (s -r ). Naredba skripte "FORCE_COMMON_ALLOCATION" ima isti učinak.

-i unos

- entry = ulaz

Upotrijebite unos kao eksplicitni simbol za početak izvršavanja vašeg programa, a ne kao zadana ulazna točka. Ako nema naziva pod nazivom, poveznik će pokušati analizirati unos kao broj i upotrijebiti ga kao adresu unosa (broj će se tumačiti u bazi 10, možete koristiti vodeći 0x za bazu 16 ili vodeću 0 za bazu 8).

-E

--export-dinamički

Prilikom izrade dinamički povezane izvršne datoteke dodajte sve simbole u dinamički tablicu simbola. Dinamična tablica simbola je skup simbola koji su vidljivi iz dinamičkih objekata u vrijeme izvođenja.

Ako ne upotrebljavate tu opciju, tablica dinamičkih simbola obično sadrži samo one simbole na koje upućuje neki dinamički objekt naveden u vezi.

Ako koristite "dlopen" za učitavanje dinamičkog objekta koji se treba uputiti na simbole definirane programom, a ne na nekom drugom dinamičkom objektu, vjerojatno ćete morati koristiti ovu mogućnost prilikom povezivanja samog programa.

Skeniranu verziju možete koristiti i za kontrolu simbola koje treba dodati u tablicu dinamičkog simbola ako ga podržava izlazni format. Pogledajte opis --version-script u @ ref {VERSION}.

-EB

Povezivanje velikih endian objekata. To utječe na zadani format izlaza.

-EL

Povežite male objekte. To utječe na zadani format izlaza.

f

- dodatni naziv

Prilikom izrade dijeljenog objekta ELF, postavite unutarnji DT_AUXILIARY polje navedenom nazivu. To govori dinamičnom linkeru da tablica simbola zajedničkog objekta treba koristiti kao pomoćni filtar na tablici simbola naziva dijeljenog objekta.

Ako kasnije povezujete program s ovim filtarskim objektom, tada kada pokrenete program, dinamički će poveznik vidjeti polje DT_AUXILIARY. Ako dinamički poveznik otkloni bilo koji znak iz objekta filtra, prvo će provjeriti postoji li definicija u nazivu dijeljenog objekta. Ako postoji, upotrebljavat će se umjesto definicije u objektu filtra. Naziv zajedničkog objekta ne mora postojati. Tako se zajednički naziv objekta može koristiti za pružanje alternativne implementacije određenih funkcija, možda za ispravljanje pogrešaka ili za performanse stroja.

Ova se opcija može navesti više puta. DT_AUXILIARY unosi će se stvoriti u redoslijedu u kojem se pojavljuju na naredbenom retku.

-F ime

--filter ime

Prilikom izrade dijeljenog objekta ELF, postavite unutarnji DT_FILTER polje na navedeno ime. To govori dinamičkom linkeru da se tablica simbola dijeljenog objekta koji se kreira treba koristiti kao filtar na tablici simbola naziva dijeljenog objekta.

Ako kasnije povezujete program s ovim filtarskim objektom, tada kada pokrenete program, dinamički će poveznik vidjeti polje DT_FILTER. Dinamički povezivač riješit će simbole prema tablici simbola filtarskog objekta kao i obično, no zapravo će se povezati s definicijama koje se nalaze u nazivu dijeljenog objekta. Tako se objekt filtra može koristiti za odabir podskupa simbola koje daje naziv objekta.

Neki stariji linkeri koristili su opciju -F tijekom alata za kompiliranje za određivanje formata objekta-datoteke za datoteke ulaznih i izlaznih objekata. GNU povezivač koristi druge mehanizme za tu svrhu: formate -b , --format , --oformat , naredbu "TARGET" u skriptama poveznika i varijablu okruženja "GNUTARGET". GNU povezivač ignorira opciju -F ako ne stvara ELF zajednički objekt.

-fini ime

Prilikom izrade izvršnog ili dijeljenog objekta ELF, nazovite NAME kada je izvršni ili zajednički objekt učitan postavljanjem DT_FINI na adresu funkcije. Prema zadanim postavkama, povezivač koristi funkciju "_fini" kao funkciju za poziv.

-g

Zanemarena. Pod uvjetom da je kompatibilnost s drugim alatima.

-G vrijednost

--gpsize = vrijednost

Postavite maksimalnu veličinu objekata za optimizaciju pomoću GP registra na veličinu . Ovo je samo smisleno za formate datoteka objekata kao što je MIPS ECOFF koji podržava stavljanje velikih i malih predmeta u različite odjeljke. To se zanemaruje za druge formate datoteka objekata.

-h ime

- ime = ime

Prilikom izrade dijeljenog objekta ELF postavite unutarnji DT_SONAME polje na navedeno ime. Kada je izvršna datoteka povezana s dijeljenim objektom koji ima polje DT_SONAME, a kada se izvršna datoteka pokrene, dinamični povezivač pokušat će učitati zajednički objekt naveden u polju DT_SONAME, a ne upotrebom naziva datoteke kojemu je dodijeljen linker.

-i

Izvođenje inkrementalne veze (isto kao i opcija -r ).

-in ime

Prilikom izrade izvršnog ili dijeljenog objekta ELF-a, nazovite NAME kada se učitava izvršni ili zajednički objekt postavljanjem DT_INIT na adresu funkcije. Prema zadanim postavkama, veza koristi "_init" kao funkciju za poziv.

-l arhiva

- knjižnica = arhiva

Dodajte arhivu arhive datoteke na popis datoteka koje želite povezati. Ova se opcija može upotrebljavati bezbroj puta. ld će pretražiti svoj putni popis za pojave "libarchive.a" za svaku navedenu arhivu .

Na sustavima koji podržavaju zajedničke knjižnice, ld također može tražiti knjižnice s ekstenzijama koje nisu ".a". Naime, na ELF i SunOS sustavima, ld će pretražiti katalog za knjižnicu s produžetkom ".so" prije traženja jednog s proširenjem ".a". Prema dogovoru, proširenje ".so" označava zajedničku knjižnicu.

Linker će pretražiti arhivu samo jednom, na mjestu gdje je navedeno u naredbenom retku. Ako arhiva definira simbol koji nije bio definiran u nekom objektu koji se pojavio pred arhivom na naredbenoj liniji, povezivač će sadržavati odgovarajuće datoteke iz arhive. Međutim, neodređeni simbol u objektu koji se kasnije pojavljuje u naredbenom retku neće uzrokovati da povezivač ponovno pretražuje arhivu.

Pogledajte - ( opcija za način prisiljavanja poveznika da arhivira više puta.

Možete navesti istu arhivu više puta u naredbenom retku.

Ova vrsta pretraživanja arhive standardna je za poveznike Unixa. Međutim, ako koristite ld onAIX, imajte na umu da se razlikuje od ponašanja AIX poveznika.

-L tražiš

- knjižnica-put = searchdir

Dodajte searchdir putu na popis puteva koje će ld tražiti za arhivske knjižnice i ld kontrolne skripte. Ovu opciju možete koristiti bilo koji broj puta. Imenici se pretražuju u redoslijedu u kojem su navedeni u naredbenom retku. Imenice specificirane u naredbenom retku se pretražuju prije zadanih direktorija. Sve- L opcije primjenjuju se na sve -l opcije, bez obzira na redoslijed kojim se opcije pojavljuju.

Ako searchdir započne s "=", tada će "=" biti zamijenjen prefiksom sysroot , putom koji je specificiran kada je poveznik konfiguriran.

Zadani skup traženih putova (bez navođenja s -L ) ovisi o tome koji način emulacije ld upotrebljava, a u nekim slučajevima i kako je konfiguriran.

Putevi se također mogu navesti u skriptu veze s naredbom "SEARCH_DIR". Navedene direktorije pretražuju se u točki u kojoj se skripta poveznika pojavljuje u naredbenom retku.

-m emulacija

Emulirajte povezivač emulacije . Možete nabrojati dostupne emulacije s --verbose ili -V opcijama.

Ako se opcija -m ne koristi, emulacija se uzima iz varijable okoline "LDEMULATION", ako je definirana.

Inače, zadana emulacija ovisi o tome kako je veza konfigurirana.

-M

--print-karta

Ispišite kartu veze do standardnog izlaza. Karta veza pruža informacije o vezi, uključujući sljedeće:

*

Gdje se objektne datoteke i simboli mapiraju u memoriju.

*

Kako se dodjeljuju zajednički simboli.

*

Svi članovi arhive uključeni su u vezu, uz spomen simbol koji je doveo arhivu člana.

-n

--nmagic

Isključite poravnavanje stranice odjeljaka i označite izlaz kao "NMAGIC" ako je moguće.

N

--omagic

Postavite dijelove teksta i podataka da budu čitljivi i pisani. Također, nemojte poravnati segment podataka i onemogućiti povezivanje s dijeljenim bibliotekama. Ako izlazni format podržava čarobne brojeve stila Unix, označite izlaz kao "OMAGIC".

--no-omagic

Ova opcija negira većinu učinaka opcije -N . Određuje da je tekstualni dio samo za čitanje i prisiljava segment podataka da bude poravnat stranica. Napomena - ova opcija ne omogućava povezivanje s dijeljenim bibliotekama. Koristite -Bdynamic za to.

-o izlaz

- output = izlaz

Koristite izlaz kao naziv za program koji proizvodi ld ; ako ta opcija nije navedena, naziv a.out koristi se prema zadanim postavkama. Naredba skripta "OUTPUT" također može odrediti naziv izlazne datoteke.

-O razini

Ako je razina numeričke vrijednosti veće od nule ld optimizira izlaz. To bi moglo potrajati znatno duže i stoga bi vjerojatno trebalo biti omogućeno samo za konačni binarnu.

Q

--emit-relocs

Ostavite odjeljke i sadržaj preseljenja u potpuno povezane exececutables. Analiza post analize i alati za optimizaciju možda će trebati ove informacije kako bi se izvršile ispravne izmjene izvršnih. To rezultira većim izvršnim datotekama.

Ova je opcija trenutačno podržana samo na ELF platformama.

-r

--relocateable

Generirajte relocatable output - tj. Generirati izlaznu datoteku koja može zauzvrat poslužiti kao ulaz u ld . To se često naziva djelomično povezivanje . Kao nuspojava, u okruženjima koja podržavaju standardne Unixove čarobne brojeve, ova opcija također postavlja čarobni broj izlazne datoteke u "OMAGIC". Ako ova opcija nije navedena, proizvodi se apsolutna datoteka. Kada povezujete C + + programe, ova opcija neće riješiti reference na konstruktore; Da biste to učinili, upotrijebite -Ur .

Ako ulazna datoteka nema isti format kao i izlazna datoteka, djelomično povezivanje je podržano samo ako ta ulazna datoteka ne sadrži preseljenja. Različiti formati izlaza mogu imati daljnja ograničenja; na primjer, neki formatovi na bazi "a.out" ne podržavaju djelomično povezivanje s ulaznim datotekama u drugim oblicima.

Ova opcija radi isto kao i -i .

-R naziv datoteke

--just-symbols = naziv datoteke

Pročitajte imena simbola i njihove adrese iz naziva datoteke , ali nemojte ih premjestiti niti ih uključiti u izlaz. To vam omogućuje da se izlazna datoteka simbolično upućuje na apsolutne lokacije memorije definirane u drugim programima. Ovu opciju možete koristiti više od jednom.

Za kompatibilnost s drugim ELF povezivačima, ako se opcija -R slijedi nazivom direktorija, a ne nazivom datoteke, to se tretira kao opcija -rpath .

-s

--strip-sve

Oduzmite sve podatke o simbolu iz izlazne datoteke.

-S

--strip-ispravljanje

Okovite informacije o simulatoru pogrešaka (ali ne i sve simbole) iz izlazne datoteke.

-t

--trag

Ispišite nazive ulaznih datoteka kao što ih obrađuje.

-T skripta

--script = skriptni

Upotrijebite datoteku skripte kao skriptu poveznika. Ova skripta zamjenjuje zadanu skriptu poveznika ld (a ne dodavanje na nju), pa zapovjedna datoteka mora navesti sve što je potrebno za opisivanje izlazne datoteke. Ako skriptni datoteka ne postoji u trenutnom direktoriju, "ld" ga traži u direktorijima određenim bilo kojom prethodnom opcijom -L . Prikupljaju se više opcija T.

-u simbol

--undefined = simbol

Upišite simbol za unos u izlaznu datoteku kao nedefinirani simbol. To može, na primjer, potaknuti povezivanje dodatnih modula sa standardnim knjižnicama. -u može se ponoviti s različitim argumentima opcija za unos dodatnih nedefiniranih simbola. Ova je opcija ekvivalentna naredbi "EXTERN" skriptu poveznika.

-Ur

Za bilo što drugo osim C + + programa, ova opcija je ekvivalentna -r : stvara relocatable output - tj. Izlaznu datoteku koja može zauzvrat poslužiti kao ulaz u ld . Prilikom povezivanja C + + programa, -Ur rješava reference na konstruktore, za razliku od -r . Ne radi na korištenju -Ur na datotekama koje su same bile povezane s -Ur ; kada se gradi konstruktor, ne može se dodati. Upotrijebite -Ur samo za posljednju djelomičnu vezu i -r za ostale.

--unique [= ODJELJAK ]

Izrađuje odvojeni odjeljak za svaki odjeljak koji odgovara odjeljku SECTION , ili ako nedostaje dodatni zamjenski znak SECTION , za svaki odjeljak za siroče unos. Siroče dio je onaj koji nije posebno naveden u skriptu poveznika. Ova opcija možete koristiti više puta u naredbenom retku; Sprječava normalno spajanje ulaznih odjeljaka istim imenom, premošćujući zadatke izlazne sekcije u skriptu poveznika.

-v

--verzija

-V

Prikažite broj verzije za ld . Opcija -V također navodi podržane emulacije.

-x

--discard-sve

Izbrišite sve lokalne simbole.

-X

--discard-mještani

Izbrišite sve privremene lokalne simbole. Za većinu ciljeva, to su svi lokalni simboli čija imena počinju s L.

simbol

- trak simbol = simbol

Ispišite naziv svake povezane datoteke u kojoj se simbol pojavljuje. Ova se opcija može dati bezbroj puta. Na mnogim sustavima potrebno je predvidjeti podnožje.

Ova je opcija korisna ako imate vezu nedefiniranog simbola, ali ne znate odakle dolazi referenca.

-I put

Dodajte put do zadanog puta traženja biblioteke. Ova opcija postoji za kompatibilnost s Solarisom.

-z ključne riječi

Priznate ključne riječi su "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "sada", "podrijetlo", "combreloc", "nocombreloc" i "nocopyreloc ”. Druge ključne riječi zanemaruju se za kompatibilnost s Solarisom. "initfirst" označava objekt koji će biti inicijaliziran prvo u runtime prije bilo kojeg drugog objekta. "interpose" označava objekt koji se njezina tablica simbolizira prije svih simbola, ali primarni izvršni. "loadfltr" označava objekt da se njegovi filtees odmah obrađuju u runtime. "nodefaultlib" označava objekt koji će traženje zavisnosti ovog objekta zanemariti bilo koji zadani putovi pretraživanja knjižnice. "nodelete" označava da objekt ne smije biti prazan tijekom izvođenja. "nodlopen" označava objekt koji nije dostupan za "dlopen". "čvor" označava objekt ne može biti izbačen iz "dldump". "sad" označava objekt s ne-lijenim vezivanjem. "podrijetlo" označava da objekt može sadržavati $ ORIGIN. "defs" onemogućuje nedefinirane simbole. "muldefs" omogućuje više definicija. "combreloc" kombinira višestruke odlomke odjeljaka i razvrstava ih kako bi omogućio predmemoriranje dinamičkog pretraživanja simbola.

"nocombreloc" onemogućuje kombiniranje višestrukih presjedanja. "nocopyreloc" onemogućuje proizvodnju kopija relocsa.

- ( arhivi -)

--start-group arhiva --end-group

Arhiv bi trebao biti popis arhivskih datoteka . Oni mogu biti ili eksplicitni nazivi datoteka ili -l opcije.

Navedeni arhivi se pretražuju uzastopno sve dok se ne izrađuju nove nedefinirane reference. Uobičajeno, arhiva se pretražuje samo jednom redoslijedom koji je naveden u naredbenom retku. Ako je potreban simbol u toj arhivi za rješavanje neodređenog simbola koji se odnosi na objekt u arhivi koja se pojavljuje kasnije na naredbenom retku, povezivač ne bi mogao riješiti tu referencu. Grupiranjem arhiva sve ih se traži sve dok se ne riješe sve moguće reference.

Korištenje ove opcije ima značajan trošak izvedbe. Najbolje je da je upotrebljavate samo kada postoje neizbježne kružne reference između dva ili više arhiva.

--accept-nepoznati-ulaz-luk

--no prihvati-nepoznati-input-luk

Odgovara linkeru da prihvati ulazne datoteke čija se arhitektura ne može prepoznati. Pretpostavka je da korisnik zna što rade i namjerno želi povezati ove nepoznate ulazne datoteke. Ovo je zadano ponašanje poveznika, prije objavljivanja 2.14. Zadano ponašanje od izdanja 2.14 nadalje je odbacivanje takvih ulaznih datoteka, pa je dodana mogućnost --accept-unknown-input-arch opcija za vraćanje starog ponašanja.

- potvrdite ključnu riječ

Ova se opcija zanemaruje za SunOS kompatibilnost .

-Bdynamic

-dy

-call_shared

Povezati se s dinamičnim bibliotekama. Ovo je samo smisleno na platformama za koje se podržavaju zajedničke knjižnice . Ta je opcija obično zadana na takvim platformama. Različite varijante ove opcije su za kompatibilnost s različitim sustavima. Tu opciju možete koristiti više puta u naredbenom retku: to utječe na traženje biblioteke za -l opcije koje ga slijede.

-Bgroup

Postavite oznaku "DF_1_GROUP" u unos "DT_FLAGS_1" u dinamičnom odjeljku. To uzrokuje da poveznik runtime rješava traženja u ovom objektu i njegove ovisnosti da se izvode samo unutar grupe. --no-undefined je impliciran. Ova opcija ima smisla samo na ELF platformama koje podržavaju zajedničke knjižnice .

-Bstatic

-dn

-non_shared

-statički

Ne povezujte se s dijeljenim bibliotekama. Ovo je samo smisleno na platformama za koje se podržavaju zajedničke knjižnice. Različite varijante ove opcije su za kompatibilnost s različitim sustavima. Tu opciju možete koristiti više puta u naredbenom retku: to utječe na traženje biblioteke za -l opcije koje ga slijede.

-Bsymbolic

Prilikom izrade dijeljene biblioteke vezati reference na globalne simbole na definiciju unutar zajedničke knjižnice, ako ih ima. Obično je moguće da program koji je povezan s dijeljenom bibliotekom poništio definiciju unutar zajedničke knjižnice. Ova opcija ima smisla samo na ELF platformama koje podržavaju zajedničke knjižnice.

--check presjeci

--no provjerite presjeka

Zatraži povezivač da ne provjerava adrese odjeljka nakon što su im dodijeljeni da vide postoji li preklapanja. Obično će veznik izvršiti ovu provjeru, a ako pronađe preklapanja, dobit će odgovarajuće poruke o pogreškama. Poveznica zna o, i čini dopuštenja za odjeljke u slojevima. Zadano ponašanje može se vratiti pomoću prekidača za naredbe - provjerite odjeljke .

--cref

Izlazite unakrsnu referentnu tablicu. Ako se generira datoteka mape poveznika, križna referentna tablica tiska se na datoteku karte. Inače se ispisuje na standardnom izlazu.

Format tablice je namjerno jednostavan, tako da se može lako obraditi skripta, ako je potrebno. Simboli se ispisuju, poredani po imenu. Za svaki je simbol naveden popis naziva datoteka. Ako je simbol definiran, prva datoteka navedena je mjesto definicije. Preostale datoteke sadrže reference na simbol.

--no definirati-zajednička

Ova opcija onemogućuje dodjeljivanje adresa zajedničkim simbolima. Naredba skripte "INHIBIT_COMMON_ALLOCATION" ima isti učinak.

Opcija -non-definirati-zajednički omogućuje razdvajanje odluke o dodjeljivanju adresa zajedničkim simbolima od odabira vrste izlazne datoteke; u suprotnom sile koje nisu relocatable izlazne jedinice dodjeljuju adrese uobičajenim simbolima. Korištenje --no-define-common dopušta zajedničke simbole koji se spominju iz dijeljene biblioteke da se dodjeljuju adrese samo u glavnom programu. Time se eliminira neiskorišteni dupli prostor u zajedničkoj biblioteci, a također sprječava eventualnu konfuziju oko rješavanja pogrešnog duplikata kada postoje mnogi dinamični moduli s specijaliziranim stazama pretraživanja za rezoluciju simbola runtime.

--defsym simbol = izraz

Napravite globalni simbol u izlaznoj datoteci, koji sadrži apsolutnu adresu koju daje izraz . Ovu opciju možete koristiti onoliko puta koliko je potrebno za definiranje višestrukih simbola u naredbenom retku. Ograničeni oblik aritmetičke podrške za izraz u ovom kontekstu podržan je: možete dati heksadekvim konstantu ili naziv postojećeg simbola ili upotrijebiti "+" i "-" za dodavanje ili oduzimanje heksadecimalnih konstanti ili simbola. Ako trebate više razrađenih izraza, razmislite o korištenju zapovjednog jezika poveznika iz skripte. Napomena: ne smije biti bjelina između simbola , znaka jednakosti (`` = '') i izraza .

--demangle [= stil ]

--no-demangle

Ove opcije određuju hoće li označiti nazive simbola u porukama o pogreškama i ostalim izlazima. Kada se poveznik spominje za demoliranje, pokušava predstaviti simbole na čitljiv način: uklanja vodeće podvlake ako se koriste u formatu datoteka objekta i pretvara C + + ugrađene simbole u korisnička imena. Različiti sastavljači imaju različite stilove razvrstavanja. Dodatni parametar demangling stila može se koristiti za odabir odgovarajućeg stila demanglinga za vaš prevodilac. Povezivač će prema zadanim postavkama demolirati, osim ako nije postavljena varijabla okruženja COLLECT_NO_DEMANGLE . Ove opcije mogu se koristiti za nadjačavanje zadanog.

- dinamička poveznica

Postavite naziv dinamičkog poveznika. Ovo ima smisla samo kada generira dinamički povezane ELF izvršne datoteke. Zadani dinamički poveznik normalno je točan; Nemojte to koristiti ako ne znate što radite.

--embedded-relocs

Ova opcija ima smisla samo kada povezuje ugrađeni PIC kôd MIPS, generiran opcijom -membedded-pic GNU prevodioca i sastavljača. To uzrokuje povezivač stvoriti tablicu koja se može koristiti pri izvođenju vremena za preseljenje svih podataka koji su statički inicijalizirani na vrijednosti pokazivača. Pogledajte kod u testsuite / ld-empic za detalje.

--fatal-upozorenja

Obratite sva upozorenja kao pogreške .

--force-exe-nastavak

Provjerite da izlazna datoteka ima sufiks .exe.

Ako uspješno izgrađena potpuno povezana izlazna datoteka nema sufiks " .exe " ili " .dll ", ova opcija prisiljava povezivač da kopira izlaznu datoteku na jedno od istog naziva s sufiksom ".exe". Ova je opcija korisna kada koristite nepromijenjene make-folde Unixa na hostu sustava Microsoft Windows jer neke verzije sustava Windows neće pokrenuti sliku osim ako završi sa sufiksom ".exe".

--no-GC-sekcije

--gc presjeci

Omogući skupljanje smeća neiskorištenih ulaznih odjeljaka. Zanemaruje se na ciljevima koji ne podržavaju tu opciju. Ova opcija nije kompatibilna s -r , niti se treba koristiti s dinamičkim povezivanjem. Zadano ponašanje (da ne izvršava ovu smeće ) može se vratiti određivanjem --no-gc-sekcija na naredbenom retku.

--Pomozite

Ispišite sažetak opcija naredbenog retka na standardnom izlazu i izlazu.

--target-pomoć

Ispišite sažetak svih ciljnih specifičnih opcija na standardni izlaz i izlaz.

-Karta mape

Ispišite kartu veze do mape datoteke. Pogledajte opis opcije -M gore.

--no-Kula-memorije

ld normalno optimizira brzinu korištenja memorije tako da u memoriju pohranjuje tablice simbola ulaznih datoteka. Ova opcija kaže ld da umjesto toga optimizira korištenje memorije, ponavljanjem tablica simbola po potrebi. To može biti potrebno ako ld ponestane prostora s memorijom dok povezuje veliku izvršnu datoteku.

--no-nedefiniran

-z defs

Uobičajeno prilikom izrade ne simboličke zajedničke knjižnice dopušteni su nedefinirani simboli koje je runtime učitavao. Te opcije onemogućavaju takve nedefinirane simbole.

omogući-višestrukog definicija

-z muldefs

Obično, kada je simbol definiran više puta, povezivač će prijaviti smrtonosnu pogrešku. Ove opcije omogućuju više definicija i upotrebljavat će se prva definicija.

omogući-shlib-nedefiniran

Dopustite nedefinirane simbole u dijeljenim objektima čak i kada je postavljeno - no-undefined. Neto će rezultirati da će nedefinirani simboli u redovitim objektima i dalje izazvati pogrešku, ali će nedefinirani simboli u dijeljenim objektima biti zanemareni. Provođenje no_undefined pretpostavlja da će poveznik runtime zagušiti nedefinirane simbole. Međutim, postoji barem jedan sustav (BeOS) u kojem je nedefinirani simboli u zajedničkim bibliotekama normalni jer ih kernel zakrpa pri učitavanju kako bi odabrao funkciju koja je najprikladnija za trenutnu arhitekturu. IE dinamički odabrati odgovarajuću funkciju memseta. Očigledno je također normalno da HPPA zajedničke biblioteke imaju nedefinirane simbole.

--no-undefined-verzija

Obično kada simbol ima nedefiniranu verziju, povezivač će je ignorirati. Ova opcija onemogućava simbole s nedefiniranom verzijom i umjesto toga će biti izdana kobna pogreška.

--no-upozoravaju-mismatch

Normalno ld će dati pogrešku ako pokušate spojiti ulazne datoteke koje su iz nekog razloga neusklađene, možda zato što su sastavljene za različite procesore ili za različite endiannesses. Ova opcija kaže ld da treba tiho dopustiti takve moguće pogreške. Ova se opcija treba koristiti samo s pažnjom, u slučajevima kada ste poduzeli neku posebnu radnju koja osigurava pogrešku poveznika.

--no-cijeli-arhiva

Isključite učinak opcije "cijele arhive" za naknadne datoteke arhive.

--noinhibit-exec

Zadržite izvršnu izlaznu datoteku kad god je još uvijek korisna. Obično linker neće proizvesti izlazne datoteke ako se susreće s pogreškama tijekom procesa povezivanja; ona izlazi bez pisanja izlazne datoteke kada se izdaju bilo kakve greške uopće.

-nostdlib

Samo pretražite knjižnične direktorije izričito navedene u naredbenom retku. Knjižnični direktori navedeni u skriptama skripte (uključujući skripte poveznika navedene u naredbenom retku) zanemaruju se.

- format formata

ld može biti konfiguriran za podršku više od jedne vrste objekta datoteke. Ako je Vaš ld konfiguriran na ovaj način, možete koristiti --oformat opciju za određivanje binarnog formata za datoteku izlaznog objekta. Čak i kada je ld konfiguriran za podržavanje alternativnih formata objekata, obično ne morate to odrediti, jer je ld trebao biti konfiguriran da proizvodi kao zadani izlazni format najčešći format na svakom stroju. izlazni format je tekstualni niz, naziv određenog formata koji podržava biblioteke BFD-a. (Možete birati dostupne binarne formate s objdump -i .) Naredba skripte "OUTPUT_FORMAT" također može odrediti izlazni format, ali ova opcija nadjačava.

-qmagic

Ova se opcija zanemaruje za kompatibilnost s Linuxom.

-Qy

Ova se opcija zanemaruje za SVR4 kompatibilnost.

--opustiti

Opcija s efekta ovisnih o stroju. Ta je opcija podržana samo za nekoliko ciljeva.

Na nekim platformama, opcija --relax vrši globalne optimizacije koje postaju moguće kada linker rješava adresiranje u programu, kao što je opuštajući način adresiranja i sintetiziranje novih uputa iz datoteke izlaznih objekata.

Na nekim platformama ova globalna optimizacija vremena veze može učiniti simbolično uklanjanje pogrešaka rezultirajuće izvršne datoteke nemoguće. To je poznato da je slučaj za procesore Matsushita MN10200 i MN10300.

Na platformama na kojima to nije podržano, - relax je prihvaćen, ali zanemaren.

--Organizacijski naziv datoteke -simbola

Zadržite samo simbole navedene u datoteci datoteke , odbacujući sve ostale. naziv datoteke je jednostavno datoteka s jednim simbolom po retku. Ova je opcija posebno korisna u okruženjima (kao što je VxWorks) gdje se velika globalna tablica simbola postepeno akumulira, čime se štedi vrijeme otvaranja memorije.

--beta-simboli-datoteka ne odbacuje nedefinirane simbole ili simbole potrebne za preseljenje.

Možete samo navesti --retain-symbols-datoteku jednom u naredbenom retku. Ona nadjačava -s i -S .

-rpath dir

Dodajte imenik u stazu pretraživanja runtime biblioteke. Ovo se koristi kada povezujete ELFexecutable s dijeljenim objektima. Svi -rpath argumenti se spajaju i prenose do poveznika za praćenje runtime, koji ih koristi za pronalaženje dijeljenih objekata pri runtime. Opcija -rpath također se koristi prilikom pronalaženja dijeljenih objekata koji su potrebni dijeljenim objektima izričito uključenim u vezu; pogledajte opis opcije -rpath-link . Ako se -rpath ne koristi pri povezivanju ELF izvršne datoteke, sadržaj varijable okoline "LD_RUN_PATH" će se koristiti ako je definiran.

Opcija -rpath također se može koristiti na SunOS-u. Prema zadanim postavkama, na SunOS-u, povezivač će formirati krpa za pretraživanje runtime od svih opcija -L koje je dana. Ako se koristi opcija -rpath , put pretraživanja runtime će se formirati isključivo pomoću opcija -rpath , ignoriranje -L opcija. To može biti korisno kada koristite gcc, što dodaje mnoge opcije -L koje mogu biti ugrađene na onemogućene datotečne sustave.

Za kompatibilnost s drugim ELF povezivačima, ako se opcija -R slijedi nazivom direktorija, a ne nazivom datoteke, to se tretira kao opcija -rpath .

-rpath-link DIR

Kada koristite ELF ili SunOS, jedna zajednička knjižnica može zahtijevati još jedan. To se događa kada veza "ld-sharing" uključuje zajedničku knjižnicu kao jednu od ulaznih datoteka.

Kada povezivač susreće takvu ovisnost pri povezivanju ne dijeljene, neprenosive veze, automatski će pokušati locirati potrebnu zajedničku biblioteku i uključiti je u vezu ako nije izričito uključena. U takvom slučaju, opcija -rpath-link određuje prvi skup direktorija za pretraživanje. Opcija -rpath-link može odrediti redoslijed naziva direktorija bilo navođenjem popisa imena razdvojenih dvotočkama ili pojavljivanjem više puta.

Ovu opciju valja koristiti s oprezom jer nadjačava put pretraživanja koji je možda teško sastavljen u dijeljenu biblioteku. U takvom slučaju moguće je nenamjerno upotrijebiti drugačiji put za pretraživanje od onoga koji će izvršiti vezu.

Veza povezuje sljedeće putove pretraživanja kako bi pronašao potrebne dijeljene biblioteke.

1.

Svaki direktorij određen -rpath-link opcijama.

2.

Bilo koje direktorije navedene opcijama -rpath . Razlika između -rpath i -rpath-link je da su direktori specificirani u -rpath opcijama uključeni u izvršnu datoteku i koriste se pri izvođenju vremena, dok je opcija -rpath-link djelotvorna samo u vrijeme veze. To je samo za izvorni linker.

3.

Na ELF sustavu, ako se ne koriste opcije -rpath i "rpath-link", pretražite sadržaj varijable okoline "LD_RUN_PATH". To je samo za izvorni linker.

4.

Na SunOS-u, ako se opcija -rpath nije koristila, pretražite sve direktorije specificirane pomoću opcija -L .

5.

Za izvorni linker, sadržaj varijable okoline "LD_LIBRARY_PATH".

6.

Za izvorni ELF povezivač, direktorije u "DT_RUNPATH" ili "DT_RPATH" zajedničke biblioteke pretražuju zajedničke biblioteke koje su mu potrebne. Stavke "DT_RPATH" zanemaruju se ako postoje unosi "DT_RUNAT".

7.

Zadani direktori, normalno / lib i / usr / lib .

8.

Za izvorni linker na ELF sustavu, ako postoji datoteka /etc/ld.so.conf , popis direktorija pronađenih u toj datoteci.

Ako potrebna biblioteka za dijeljenje nije pronađena, povezivač će izdati upozorenje i nastaviti s vezom.

-shared

-Bshareable

Izradite zajedničku knjižnicu. To je trenutno podržano samo na platformama ELF, XCOFF i SunOS. Na SunOS-u, povezivač će automatski stvoriti zajedničku knjižnicu ako se ne koristi e- opcija i nedefinirane simbole u vezi.

--sort-zajednička

Ova opcija kaže ld da razvrstava zajedničke simbole po veličini kada ih stavi u odgovarajuće odjeljke izlaza. Najprije dolaze svi simboli bajtova, zatim sva dva bajta, a zatim sva četiri bajta, a zatim sve ostalo. To je da se spriječe praznine između simbola zbog ograničenja poravnanja.

--split-by-file [ veličina ]

Slično kao i --split-by-reloc, ali stvara novi izlazni odjeljak za svaku ulaznu datoteku kada se postigne veličina . veličina je zadana na veličinu od 1 ako nije navedena.

--split-by-reloc [ count ]

Nastoji stvoriti dodatne odjeljke u izlaznoj datoteci tako da niti jedan izlazni odjeljak u datoteci ne sadrži više od preseljenja. To je korisno kada se generiraju ogromne datoteke koje se mogu premjestiti za preuzimanje u određene zrna u stvarnom vremenu s formatu COFF objektnih datoteka; jer COFFcannot predstavlja više od 65535 preseljenja u jednom odjeljku. Imajte na umu da to neće uspjeti s oblicima datoteka objekta koji ne podržavaju proizvoljne odjeljke. Poveznica neće razdijeliti pojedinačne odjeljke unosa za redistribuciju, pa ako jedan ulazni odjeljak sadrži više od broja premještanja, jedan izlazni odjeljak sadržavat će mnoga preseljenja. broj zadane vrijednosti iznosi 32768.

--stats

Izračunajte i prikazujte statističke podatke o radu poveznika, kao što su vrijeme izvršenja i potrošnja memorije.

--traditional formata

Za neke ciljeve, izlaz ld je na neki način različit od izlaza nekog postojećeg poveznika. Ovaj prekidač zahtjeva ld da koristi umjesto tradicionalnog formata.

Na primjer, na SunOS-u, ld kombinira duple unose u tablici s nizom simbola. To može smanjiti veličinu izlazne datoteke s punim informacijama o uklanjanju pogrešaka za više od 30 posto. Nažalost, SunOS "dbx" program ne može pročitati rezultirajući program ("gdb" nema problema). Prekidač - tradicionalni format govori ld da ne kombinira duple unose.

--section-start sectionname = org

Pronađite odjeljak u izlaznoj datoteci na apsolutnoj adresi koju daje org . Ovu opciju možete koristiti onoliko puta koliko je potrebno da biste locirali više odjeljaka u naredbenom retku. org mora biti jedan heksadecimalni cijeli broj; za kompatibilnost s drugim povezivačima, možete izostaviti vodeći 0x obično povezan s heksadecimalnim vrijednostima. Napomena: ne bi trebao biti prazan prostor između naziva sekcije , znaka jednakosti (`` = '') i org .

-Tbss org

-Tdata org

-Text org

Koristite org kao početnu adresu za --- odnosno --- "bss", "podatak" ili "tekst" segment izlazne datoteke. org mora biti jedan heksadecimalni cijeli broj; za kompatibilnost s drugim povezivačima, možete izostaviti vodeći 0x obično povezan s heksadecimalnim vrijednostima.

--dll-opširno

verbose

Prikažite broj verzije za ld i navedite podržane emulatore veza. Prikazati koje se ulazne datoteke mogu i ne mogu otvoriti. Prikažite povezivačku skriptu koju koristi povezivač.

--version-script = verzija skripte

Navedite naziv skripte za verziju vezniku. To se obično upotrebljava prilikom izrade dijeljenih biblioteka za određivanje dodatnih informacija o verziji bibliografije za stvaranje biblioteke. Ova opcija ima smisla samo na ELF platformama koje podržavaju zajedničke knjižnice.

--warn-zajednička

Upozorite kada se zajednički simbol kombinira s drugim zajedničkim simbolom ili s definicijom simbola. Unix linkeri dopuštaju ovu pomalo prljavu praksu, ali linkeri na nekim drugim operativnim sustavima to ne čine. Ova vam opcija omogućuje da pronađete potencijalne probleme od kombiniranja globalnih simbola. Nažalost, neke C knjižnice koriste ovu praksu, pa vam svibanj biti upozorenja o simbolima u knjižnicama, kao i u svojim programima.

Postoje tri vrste globalnih simbola, ovdje ilustriranih primjerima C:

int i = 1;

Definicija, koja ide u inicijalizirani odjeljak podataka izlazne datoteke.

extern int i;

Neodređena referenca koja ne dodjeljuje prostor. Mora postojati definicija ili zajednički simbol za varijablu negdje.

int i;

Zajednički simbol. Ako postoji samo jedan (jedan ili više) zajedničkih simbola za varijablu, ona ide u neinizializirani podatkovni prostor izlazne datoteke. Linker spaja više zajedničkih simbola za istu varijablu u jedan simbol. Ako su različitih veličina, odabire najveću veličinu. Linker pretvara zajednički simbol u deklaraciju, ako postoji definicija iste varijable.

Opcija --warn-common može proizvesti pet vrsta upozorenja. Svako upozorenje sastoji se od par redaka: prvi opisuje simbol koji se upravo pojavio, a drugi opisuje prethodni simbol koji se susreće s istim imenom. Jedan ili oba dva simbola bit će zajednički simbol.

1.

Pretvaranje zajedničkog simbola u referencu, jer već postoji definicija za simbol.

(
): upozorenje: common of ` 'overridden po definiciji (
): upozorenje: definirano ovdje

2.

Uključivanje zajedničkog simbola u referencu, jer se susreće kasnija definicija za simbol. To je isto kao i prethodni slučaj, osim što se simboli susreću različitim redoslijedom.

(
): upozorenje: definicija ` 'prevladavajući zajednički (
): upozorenje: common je ovdje

3.

Spajanjem zajedničkog simbola s prethodnim zajedničkim simbolom jednake veličine.

(
): upozorenje: više zajedničkih '' (
): upozorenje:

4.

Spajanje zajedničkog simbola s prethodnim većim zajedničkim simbolom.

(
): upozorenje: zajedničko ` 'nadjačano većim zajedničkim (
): upozorenje:

5.

Spajanjem zajedničkog simbola s prethodnim manjim zajedničkim simbolom. To je isto kao i prethodni slučaj, osim što se simboli susreću različitim redoslijedom.

(
): upozorenje: common of ` 'nadjačava manje zajedničke (
): upozorenje: manje zajedničko je ovdje

--warn-konstruktori

Upozorite ako se koriste svi globalni konstruktori. Ovo je korisno samo za nekoliko formata datoteka objekata. Za formate poput COFF ili ELF, povezivač ne može otkriti upotrebu globalnih konstruktora.

--warn-multiple-gp

Upozorite ako su potrebne više vrijednosti globalnih pokazivača u izlaznoj datoteci . To je samo smisleno za neke procesore, kao što je Alpha. Konkretno, neki procesori stavljaju velike vrijednosti konstante u poseban odjeljak. Poseban registar (globalni pokazivač) ukazuje na sredinu ovog odjeljka, tako da se konstante mogu učitati učinkovito putem osnovnog registra relativnog adresiranja. Budući da je pomak u relativnom modu baznog registra fiksan i relativno mali (npr. 16 bita), to ograničava maksimalnu veličinu konstantnog bazena. Stoga je u velikim programima često potrebno koristiti više vrijednosti globalnih pokazivača kako bi se moglo riješiti svih mogućih konstanti. Ova opcija uzrokuje upozorenje kad god se to dogodi.

--warn-jednom

Samo jednom upozorite za svaki nedefinirani simbol, a ne jednom po modulu koji se odnosi na nju.

--warn presjek-align

Upozorite ako se adresa izlaznog dijela promijeni zbog poravnanja. Uobičajeno, poravnanje će biti postavljeno unosom odjeljka. Adresa će biti promijenjena samo ako nije izričito navedena; to jest, ako naredba "SECTIONS" ne specificira početnu adresu za odjeljak.

--whole-arhiva

Za svaku arhivu spomenutu u naredbenom retku nakon opcije - cijeli arhiv , uključite svaku datoteku objekta u arhivu u vezu umjesto da pretražujete arhivu za tražene datoteke objekata. To se obično koristi za pretvaranje datoteke arhive u dijeljenu biblioteku, prisiljavajući svaki objekt da bude uključen u rezultirajuću zajedničku knjižnicu. Ova se opcija može koristiti više puta.

Dvije napomene prilikom korištenja ove opcije iz gcc: Prvo, gcc ne zna o ovoj opciji, pa morate upotrijebiti -Wl, - cijelu arhivu . Drugo, nemojte zaboraviti upotrijebiti -Wl, - ne-cjelokupni arhiv nakon popisa arhiva jer će gcc dodati vlastiti popis arhiva na vašu vezu i možda ne želite da ta zastava također utječe na one.

--kupični simbol

Koristite funkciju omota za simbol . Svaka nedefinirana referenca na simbol će biti riješena na "__ wrap_symbol". Svaka nedefinirana referenca na "__real_symbol" bit će riješena na simbol .

To se može koristiti za osiguranje omota za funkciju sustava. Funkcija omota treba zvati "__wrap_symbol". Ako želi nazvati funkciju sustava, treba nazvati "__ real_symbol".

Ovdje je trivijalni primjer:

void * __wrap_malloc (int c) {printf ("malloc pozvan sa% ld \ n", c); povrat __real_malloc (c); }

Ako povezujete drugi kôd s ovom datotekom pomoću --wrap malloc , tada svi pozivi na "malloc" nazivat će funkciju "__wrap_malloc". Poziv na "__real_malloc" u "__wrap_malloc" nazvat će pravi "malloc" funkciju.

Možda biste željeli pružiti i funkciju "__real_malloc", tako da će veze bez opcije -wrap uspjeti. Ako to učinite, ne biste trebali staviti definiciju "__ real_malloc" u istu datoteku kao "__wrap_malloc"; Ako to učinite, skupljač može riješiti poziv prije nego što poveznik ima priliku umetati ga u "malloc".

omogućivanje-new-dtags

--disable-nove-dtags

Ovaj povezivač može stvoriti nove dinamičke oznake u ELF-u. No, starije ELF sustave možda ih ne razumiju. Ako specificirate --enable-new-dtags , dinamičke oznake bit će izrađene prema potrebi. Ako navedete --disable-new -tagme , neće se stvoriti nove dinamičke oznake. Prema zadanim postavkama nove dinamičke oznake nisu izrađene. Imajte na umu da su te opcije dostupne samo za sustave ELF.

I386 PE poveznik podržava - zajedničku opciju, što uzrokuje da je izlaz dinamički povezana knjižnica (DLL) umjesto normalne izvršne datoteke. Trebali biste navesti izlaz "* .dll" kada koristite ovu opciju. Osim toga, linker u potpunosti podržava standardne "* .def" datoteke, koje se mogu nalaziti u naredbenom retku linkera kao što je datoteka objekta (u stvari, ona bi trebala prethoditi arhivima na kojima izvozi simbole, kako bi se osiguralo da su povezani, baš kao i normalna datoteka objekta).

Osim opcija zajedničkih svim ciljevima, i386 PE povezivač podržava dodatne opcije naredbenog retka koje su specifične za cilj i386 PE. Opcije koje uzimaju vrijednosti mogu se odvojiti od svojih vrijednosti prostorom ili znakom jednakosti.

--add-stdcall-alias

Ako se daju, simboli sa stdcall sufiksom (@ nn ) izvodit će se kao-i, a također i sa sufiksom koji je uklonjen.

- datoteka baze datoteke

Koristite datoteku kao naziv datoteke u koju želite spremiti osnovne adrese svih premještanja potrebnih za generiranje DLL-ova s dlltoolom .

--dll

Stvorite DLL umjesto redovne izvršne datoteke. Također možete koristiti - podijeliti ili odrediti "LIBRARY" u određenoj ".def" datoteci.

omogućivanje stdcall-fixup

--disable-stdcall-fixup

Ako veza pronađe simbol koji se ne može riješiti, pokušat će učiniti `` neizrazito povezivanje '' traženjem drugog definiranog simbola koji se razlikuje samo u obliku simbola (cdecl vs stdcall) te će taj simbol riješiti povezivanjem na utakmicu. Na primjer, nedefinirani znak "_foo" može biti povezan s funkcijom "_foo @ 12" ili nedefinirani znak "_bar @ 16" može biti povezan s funkcijom "_bar". Kada poveznik to napravi, ispisuje upozorenje jer obično nije trebalo povezati, ali ponekad uvoz biblioteka generiranih iz dll-ova treće strane možda je potrebna da ta značajka bude korisna. Ako odredite --enable-stdcall-fixup , ova značajka je potpuno omogućena i upozorenja se ne ispisuju. Ako navedete - disable-stdcall-fixup , ta je značajka onemogućena i takve se neusklađenosti smatraju pogreškama.

--export-sve-simbola

Ako se navedete, svi će globalni simboli u objektima koji se koriste za izradu DLL-a izvesti DLL. Imajte na umu da je to zadana ako u suprotnom ne bi bilo nikakvih izvezenih simbola. Kada se simboli eksplicitno izvoze putem DEF datoteka ili se implicitno izvoze preko funkcionalnih atributa, zadano je da ne izvozite ništa osim ako se ta opcija ne dade. Napominjemo da se simboli "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" i "impure_ptr" neće automatski izvesti. Također, simboli uvezeni iz drugih DLL-ova neće se ponovno izvesti, niti simboli koji navode interni izgled DLL-a, poput onih koji počinju s "_head_" ili završavaju s "_iname". Osim toga, neće se izvesti nikakvi simboli iz "libgcc", "libstd ++", "libmingw32" ili "crtX.o". Simboli čija imena počinju s "__rtti_" ili "__builtin_" neće se izvesti, kako bi se pomoglo s C + + DLL-ovima. Konačno, postoji opsežan popis cygwin-privatnih simbola koji se ne izvoze (očito se to odnosi na izgradnju DLL-ova za cygwinove ciljeve).

Ovi cygwin-isključuju su: "_cygwin_dll_entry @ 12", "_cygwin_crt0_common @ 8", "_ cygwin_noncygwin_dll_entry @ 12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3 "i" okoliš ".

- izbaci simbole simbol , simbol , ...

Određuje popis simbola koji se ne bi trebali automatski izvesti. Nazivi simbola mogu biti razgraničeni zarezima ili dvotočkom.

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

Određuje popis arhivskih knjižnica iz kojih se simboli ne bi trebali automatski izvesti. Imena biblioteke mogu biti razgraničena zarezima ili dvotočkama. Određivanje "--exclude-libs ALL" isključuje simbole iz svih arhivskih knjižnica iz automatskog izvoza. Simboli izrijekom navedeni u .def datoteci i dalje se izvoze, bez obzira na tu opciju.

--file-poravnanje

Navedite poravnanje datoteka. Sekcije u datoteci uvijek će početi u offsetima datoteka koje su višekratnici tog broja. To je zadano 512.

- rezervirajte

- rezervirajte , pošaljite

Odredite količinu memorije za pohranu (i po želji obvezati) da se upotrijebi kao hrpa za ovaj program. Zadana je 1Mb rezervirano, 4K počinjeno.

- vrijednost slike-baze

Koristite vrijednost kao osnovnu adresu svog programa ili dll. Ovo je najniža memorijska lokacija koja će se koristiti kada se učita vaš program ili DLL. Da biste smanjili potrebu za preseljavanjem i poboljšanjem performansi vaših dll-a, svaki bi trebao imati jedinstvenu osnovnu adresu i ne preklapati druge dllove. Zadana je 0x400000 za izvršne datoteke i 0x10000000 za dllove.

--kill-u

Ako se dade, sufiks stdcall (@ nn ) će biti uklonjen iz simbola prije nego što se izvoze.

- vrijednost verzije maksimum slike

Postavlja najveći broj `` image verzije ''. Zadana postavka na 1.

--major-os-verzija vrijednosti

Postavlja najveći broj `` os verzije ''. Zadana postavka na 4.

--major-podsustav-verzija verzije

Postavlja najveći broj `` podsustav verzije ''. Zadana postavka na 4.

- minimalna vrijednost slike

Postavlja manji broj `` image verzije ''. Zadana postavka na 0.

- vrijednost vrhunske verzije

Postavlja manji broj `` os verzije ''. Zadana postavka na 0.

- minimalna vrijednost verzije verzije sustava podsustava

Postavlja manji broj `` inačice podsustava ''. Zadana postavka na 0.

- datoteku za izlazne datoteke

Linker će stvoriti datoteku koja će sadržavati DEF datoteku koja odgovara DLL-u koji linker generira. Ova DEF datoteka (koja bi trebala biti nazvana "* .def") može se koristiti za stvaranje biblioteke za uvoz s "dlltool" ili se može koristiti kao referenca na automatski ili implicitno izvezene simbole.

- bez implicitne datoteke

Linker će stvoriti datoteku koja će sadržavati import lib koji odgovara DLL-u koji linker generira. Ovaj uvoz lib (koji bi trebao biti naziv "* .dll.a" ili "* .a" može se koristiti za povezivanje klijenata s generiranim DLL-om; ovo ponašanje omogućuje preskakanje zasebnog koraka stvaranja "dlltool" knjižnice za uvoz.

omogućivanje automatskog slika-baza

Automatski odaberite bazu slika za DLL, osim ako je navedeno pomoću "--image-base" argumenta. Korištenjem hash generiran iz dllname stvoriti jedinstvene baze slika za svaki DLL, izbjegavati sudarima u memorije i preseljenja koje mogu odgoditi izvršenje programa.

--disable-auto-slika-baza

Nemojte automatski generirati jedinstvenu bazu slika. Ako ne postoji korisnička baza podataka ("--image-base"), upotrijebite zadanu platformu.

- string dll-search-prefix

Kada se dinamički povezujete s dll-om bez knjižnice za uvoz, potražite " .dll" preferirajući "lib .dll". Ovo ponašanje omogućuje jednostavnu razliku između DLL-ova izgrađenih za različite `subplatforme ': izvorne, cygwin, uwin, pw, itd. Na primjer, cygwin DLL obično koristi" --dll-search-prefix = cyg ".

omogućivanje automatskog uvoza

Koristite sofisticirano povezivanje "_symbol" na "__imp__symbol" za uvoz DATA iz DLL-ova i stvorite potrebne simbole za izradu pri izgradnji biblioteke za uvoz s tim DATAexportsom. To će općenito "samo raditi", ali ponekad možete vidjeti ovu poruku:

"varijabla" "ne može se automatski uvesti. Pročitajte dokumentaciju za ld" --enable-auto-import "za detalje."

Ova se poruka pojavljuje kada neki (sub) izraz pristupi adresi koja se u konačnici daje zbrojem dviju konstanti (Win32 uvozne tablice dopuštaju samo jedan). U slučajevima gdje se to može dogoditi uključuje pristup datotekama članova strukturnih varijabli uvezenih iz DLL-a, kao i upotrebom konstantnog indeksa u varijablu polja koja se uvozi iz DLL-a. Svaka varijabla višestrukih riječi (polja, strukture, dugo trajanje, itd.) Može pokrenuti ovo stanje pogreške. Međutim, bez obzira na točnu vrstu podataka izvezene varijable koja je prekršila, ld će je uvijek otkriti, izdati upozorenje i izaći.

Postoji nekoliko načina rješavanja ove poteškoće, bez obzira na vrstu podataka izvezene varijable:

Jedan od načina je korištenje "switch-enable-runtime-pseudo-reloc". To ostavlja zadatak prilagodbe reference u vašem kodu klijenta za okruženje runtime, tako da ova metoda funkcionira samo kada okolina runtime podržava tu značajku.

Drugo rješenje je prisiliti da jedna od 'konstanti' bude varijabla - to jest, nepoznata i ne-optimizirana pri sastavljanju vremena. Za polja postoje dvije mogućnosti: a) napraviti indexee (adresu polja) varijablu ili b) napraviti indeks "konstantan" varijablu. Tako:

extern tip extern_array []; extern_array [1] -> {hlapljiv tip * t = extern_array; t [1]}

ili

extern tip extern_array []; extern_array [1] -> {hlapljivi int t = 1; extern_array [t]}

Za izraze (i većinu ostalih tipova podataka s više riječi) jedina je mogućnost napraviti sam strukturu (ili dugu, ili ...) varijablu:

extern struct s extern_struct; extern_struct.field -> {volatile struct s * t = & extern_struct; t-> polje}

ili

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

Treća metoda rješavanja ove poteškoće je napuštanje "automatskog uvoza" za uvredljivi simbol i označiti ga s "__declspec (dllimport)". Međutim, u praksi je potrebna upotreba kompilacijskog vremena #defines da bi se naznačilo da li gradite DLL, izgradite kod klijenta koji će se povezati s DLL-om ili jednostavno graditi / povezati s statičkom bibliotekom. Prilikom izbora između različitih metoda rješavanja 'izravne adrese s konstantnim offsetom', trebali biste razmotriti tipičnu upotrebu u stvarnom svijetu:

Izvornik:

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

Otopina 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void glavni (int argc, char ** argv) {/ * Ovo je zaobilazno rješenje za win32 i cygwin; nemoj "optimizirati" * / promjenjive int * parr = arr; printf ( "% d \ n", Parr [1]); }

2. rješenje:

--foo.h / * Napomena: pretpostavlja se automatsko izvoz (nema __declspec (dllexport)) * / #if (definirano (_WIN32) || definirano (__ CYGWIN__)) && \! (definirano (FOO_BUILD_DLL) || definirano (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c #include "foo.h" void glavni (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Četvrti način da izbjegnete ovaj problem jest ponovno kôd knjižnice da biste upotrebljavali funkcionalno sučelje, a ne podatkovno sučelje za vrijeđajuće varijable (npr. Set_foo () i get_foo () ).

--disable-auto-uvoz

Nemojte pokušavati napraviti sofisticirano povezivanje "_symbol" na "__imp__symbol" za DATAimports iz DLL-ova.

omogućivanje-runtime-pseudo-reloc

Ako vaš kôd sadrži izraze opisane u odjeljku "omogućivo automatsko uvoz", to jest, DATAimports iz DLL-a s nulte offsetom, ova će sklopka stvoriti vektor "pseudo preseljenja izvođenja" koji se može koristiti za runtime okruženje za podešavanje reference na takve podatke u vašem kodu klijenta.

--disable-izvođenja-pseudo-reloc

Nemojte stvarati pseudo preseljenja za neporavnati DATA import od DLL-a. Ovo je zadana postavka.

omogućivanje-extra-pe-ispravljanje

Prikaži dodatne informacije o uklanjanju pogrešaka koje se odnose na simbol automatskog uvoza simbola.

--section-poravnanje

Postavlja poravnanje odjeljka. Sekcije u memoriji uvijek počinju na adresama koje su višestruke tog broja. Zadana vrijednost je 0x1000.

- rezervni dio

- stražnja rezerva , počinite

Odredite količinu memorije koju želite rezervirati (i po želji obvezati) da se koristi kao stog za ovaj program. Zadana postavka je 2Mb rezervirano, 4K počinjeno.

- sustav koji

- sustav koji : glavni

- sustav koji : glavni . manji

Određuje podsustav prema kojem će se vaš program izvršavati. Pravne vrijednosti za koje su "native", "windows", "console" i "posix". Također možete po želji postaviti i verziju podsustava.

Važno: Upotrijebite naredbu čovjek ( % man ) kako biste vidjeli kako se naredba koristi na vašem računalu.