Linux / Unix naredba: Id

NAME

ld - Koristeći LD , GNU linker

SYNOPSIS

ld [ opcije ] objfile ...

OPIS

ld kombinuje više objekata i arhivskih datoteka , premešta svoje podatke i povezuje reference simbola. Obično poslednji korak u sastavljanju programa je pokretanje ld .

ld prihvata jezičke datoteke Linker Command napisane u supersetu AT & T's Link Editor Command Language sintakse, kako bi pružila eksplicitnu i potpunu kontrolu nad procesom povezivanja.

Ova man stranica ne opisuje komandni jezik; pogledajte ld unos u "info" ili priručnik ld: GNU linker, za sve detalje o komandnom jeziku i drugim aspektima linkera GNU.

Ova verzija ld koristi BFD biblioteke opšte namjene za rad na objektnim datotekama. To dozvoljava ld čitanje, kombinovanje i pisanje objekata u različitim formatima --- npr. COFF ili "a.out". Različiti formati mogu biti povezani zajedno da bi proizveli bilo koju dostupnu vrstu datoteke objekta.

Pored svoje fleksibilnosti, GNU linker je korisniji od drugih linkera u pružanju dijagnostičkih informacija. Mnogi linkeri napuštaju izvršenje odmah nakon suočavanja sa greškom; kad god je to moguće, ld nastavlja da se izvršava, omogućavajući vam da identifikujete druge greške (ili, u nekim slučajevima, da biste dobili izlaznu datoteku uprkos greškosti).

GNU linker ld treba da pokrije širok spektar situacija i da bude što je moguće kompatibilniji sa drugim linkerima. Kao rezultat toga, imate puno mogućnosti da kontrolišete svoje ponašanje.

OPCIJE

Linker podržava mnoštvo opcija komandne linije , ali u praksi se malo koristi u bilo kom konkretnom kontekstu. Na primer, česta upotreba ld-a je povezivanje standardnih Unix datoteka datoteka na standardni, podržani Unix sistem . U takvom sistemu, da biste povezali datoteku "hello.o":

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

Ovo govori ld da proizvede datoteku nazvanu output kao rezultat povezivanja datoteke "/lib/crt0.o" sa "hello.o" i bibliotekom "libc.a", koja će doći iz standardnih direktorija za pretraživanje. (Pogledajte diskusiju o opciji -l ispod.)

Neke opcije komandne linije za ld mogu biti specificirane u bilo kojoj tački u komandnoj liniji. Međutim, opcije koje se odnose na datoteke, kao što su -l ili -T , dovode do čitanja datoteke u tački na kojoj se opcija pojavljuje u komandnoj liniji, u odnosu na datoteke objekata i druge opcije datoteke. Ponavljanje ne-datoteka opcija sa drugačijim argumentom neće ili imati nikakvog dodatnog efekta ili prekloniti prethodne pojave (one dalje od leve strane u komandnoj liniji) te opcije. Opcije koje se mogu značajno odrediti više od jednom zabeležene su u opisima ispod.

Argumenti koji nisu opcija su objektne datoteke ili arhivi koji treba povezati zajedno. Oni mogu slediti, prethoditi ili biti umešani u opcije komandne linije, osim što argument o objektnoj datoteci ne sme biti postavljen između opcije i njegovog argumenta.

Obično se linker poziva sa najmanje jednom objektnom datotekom, ali možete odrediti druge forme binarnih ulaznih datoteka koristeći -l , -R i skriptni jezik. Ako nijedna binarna ulazna datoteka nije specificirana, linker ne proizvodi nikakav izlaz i izdaje poruku Nema ulaznih datoteka .

Ako linker ne može prepoznati format datoteke objekta, pretpostavlja da je linker skripta. Skriptom koji je naveden na ovaj način povećava se glavni skript linkera koji se koristi za vezu (ili podrazumevana skripta linkera ili ona koja je navedena uz pomoć -T ). Ova funkcija dozvoljava linkeru da se poveže sa datotekom koja se čini predmetom ili arhivom, ali zapravo samo određuje neke vrijednosti simbola ili koristi "INPUT" ili "GROUP" za učitavanje drugih objekata. Imajte na umu da specifikovanje skripte na ovaj način samo povećava glavnu skriptu linkera; koristite opciju -T da biste u potpunosti zamenili podrazumevani skriptni linker.

Za opcije čija su imena jedno slovo, argumenti opcije moraju ili pratiti opciono slovo bez intervenisanja razmaka, ili se dati kao zasebni argumenti odmah nakon opcije koja ih zahtijeva.

Za opcije čija su imena višestruka slova, ili jedna crtica ili dva mogu prethoditi nazivu opcije; Na primer, simbol trake i simbol trake su ekvivalentni. Napomena - postoji izuzetak od ovog pravila. Opcije sa više slova koje počinju sa malim slovom "o" mogu se prethoditi samo dvema dirkama. Ovo smanjuje konfuziju sa opcijom -o . Tako na primjer -omagicno postavlja naziv izlaznog fajla u magiju dok --omagic postavlja NMAGIC zastavicu na izlaz.

Argumenti opcija sa više slova moraju biti odvojeni od imena opcije sa znakom jednakosti ili se daju kao zasebni argumenti odmah nakon opcije koja ih zahtijeva. Na primer, - trag-simbol foo i - trace-simbol = foo su ekvivalentni. Prihvaćene su jedinstvene skraćenice imena opcija sa više slova.

Napomena - ako je linker indirektno pozvan preko upravljačkog programa za prevođenje (npr. Gcc ), onda sve opcije komandne linije linkera trebaju biti prefiksirane od -Wl, (ili bilo šta što odgovara određenom upravljaču prevođača ) ovako:

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

Ovo je važno, jer u suprotnom drajverski program kompajlera može tiho da izbaci linker opcije, što rezultira lošim vezom.

Ovde je tabela generičkih komandnih linija koje je prihvatio GNU linker:

- ključna reč

Ova opcija je podržana za HP / UX kompatibilnost. Argument ključne riječi mora biti jedna od arhiva struna , dijeljena ili podrazumevana . -arhiva je funkcionalno ekvivalentna -Bstatici , a ostale dve ključne reči su funkcionalno ekvivalentne -Bodynamic . Ova opcija se može koristiti bilo koji broj puta.

- Arhitektura

--architecture = arhitektura

U trenutnom izdanju ld , ova opcija je korisna samo za familiju arhitekture Intel 960. U toj ld konfiguraciji, argument arhitekture identifikuje određenu arhitekturu u porodici 960, omogućavajući neke zaštitne mjere i modifikaciju trake za pretraživanje arhive-biblioteke.

Buduća izdanja ld-a mogu podržati slične funkcionalnosti za druge porodice arhitekture.

-b ulazni format

--format = ulazni format

ld može biti konfigurisan da podržava više od jedne vrste datoteke objekta. Ako je vaš ld podešen na ovaj način, možete koristiti opciju -b da odredite binarni format za datoteke ulaznih objekata koji prate ovu opciju u komandnoj liniji. Čak i kada je ld konfigurisan da podržava formate alternativnih objekata, obično to ne treba da odredite, jer bi ld trebao biti konfigurisan da očekuje kao podrazumevani format unosa najdinobičniji oblik na svakoj mašini. ulazni format je tekstovni niz, naziv određenog formata koji podržavaju BFD biblioteke. (Možete navesti dostupne binarne formate sa objdump -i .)

Možda ćete želeti da koristite ovu opciju ako povezujete datoteke sa neobičnim binarnim formatom. Takođe možete koristiti -b da biste eksplicitno prebacivali formate (prilikom povezivanja objektnih datoteka različitih formata), tako što ćete uključiti -b ulazni format prije svake grupe datoteka objekata u određenom formatu.

Podrazumevani format se uzima iz varijable okoline "GNUTARGET".

Takođe možete definirati ulazni format iz skripte, koristeći komandu "TARGET";

-c MRI-commandfile

--mri-script = MRI-commandfile

Za kompatibilnost sa linkerima proizvedenim od strane MRI-a, ld prihvata datoteke skripta napisane na alternativnom, ograničenom komandnom jeziku, opisanom u odeljku MRI Compatible Script Files u GNU ld dokumentaciji. Uvesti datoteke skripti MRI-a sa opcijom -c ; koristite opciju -T da biste pokrenuli linker skripte napisane na jezičkom jezičkom jeziku za opštu svrhu. Ako MRI-cmdfile ne postoji, ld ga traži u direktorijima specificiranim bilo kojim -L opcijama.

-d

-dc

-dp

Ove tri opcije su ekvivalentne; podržani su različiti oblici za kompatibilnost sa drugim linkerima. Oni dodjeljuju prostor zajedničkim simbolima čak i ako je specificirana izlazna datoteka koja se može premjestiti (sa -r ). Komanda skripta "FORCE_COMMON_ALLOCATION" ima isti efekat.

- ulaz

- Entry = ulaz

Koristite unos kao eksplicitni simbol za početak izvršavanja vašeg programa, a ne podrazumevana ulazna tačka. Ako nema simbola nazvanog unosa , linker će pokušati parse ulazak kao broj i koristiti ga kao adresu ulaza (broj će se tumačiti u bazi 10, možete koristiti vodeći 0x za bazu 16 ili vodeći 0 za bazu 8).

-E

--export-dynamic

Kada kreirate dinamički povezanu izvršnu datoteku, dodajte sve simbole dinamičnoj tablici simbola. Dinamička tabela simbola je skup simbola koji su vidljivi od dinamičkih objekata u toku rada.

Ako ne koristite ovu opciju, dinamička tabela simbola će obično sadržavati samo one simbole na koje se odnosi neki dinamički objekt koji je naveden u vezi.

Ako koristite "dlopen" da biste učitali dinamički objekat koji se mora vratiti na simbole koje je definisao program, a ne neki drugi dinamički objekt, verovatno ćete morati koristiti ovu opciju kada povezujete sam program.

Takođe možete koristiti scenario verzije da kontrolišete koji simboli treba dodati u dinamičku tabelu simbola ako je izlazni format podržava. Pogledajte opis --version-skripta u @ ref {VERSION}.

-EB

Povežite velike endijanske objekte. Ovo utiče na podrazumevani format izlaza.

-EL

Povežite male-endijske objekte. Ovo utiče na podrazumevani format izlaza.

-f

--oksilarno ime

Kada kreirate ELF zajednički objekat, podesite interno polje DT_AUXILIARY na određeno ime. Ovo govori dinamičkom povezivaču da se tablica simbola zajedničkog objekta koristi kao pomoćni filter na tablici simbola naziva zajedničkog objekta.

Ako kasnije povežete program protiv ovog objekta filtra, onda, kada pokrenete program, dinamički linker će videti polje DT_AUXILIARY. Ako dinamički linker rešava bilo koji simbol iz objekta filtera, prvo će proveriti da li postoji definicija u imenu zajedničkog objekta. Ako postoji, koristiće se umesto definicije u objektu filtera. Ime zajedničkog objekta ne mora da postoji. Zbog toga se zajedničko ime objekta može koristiti za pružanje alternativne implementacije određenih funkcija, možda za debagovanje ili za pojedinačne performanse mašine.

Ova opcija se može navesti više puta. DT_AUXILIARY unosi će se kreirati po redosledu na koji se pojavljuju na komandnoj liniji.

-F ime

- naziv filma

Kada kreirate ELF zajednički objekat, podesite interno DT_FILTER polje na naznačeno ime. Ovo govori dinamičkom linkeru da se tabela simbola deljenog objekta koji se kreira koristi kao filter na tablici simbola naziva zajedničkog objekta.

Ako kasnije povežete program protiv ovog objekta filtra, onda, kada pokrenete program, dinamički linker će videti polje DT_FILTER. Dinamički linker će rešiti simbole prema tablici simbola objekta filtera kao i obično, ali će se ustvari povezati sa definicijama koje se nalaze u imenu zajedničkog objekta. Stoga se objekt filter može koristiti za odabir podskupa simbola datog od strane imena objekta.

Neki stariji linkeri su koristili opciju -F u čitavom alatu za kompilaciju za specifikaciju format datoteke objekta i za datoteke ulaznih i izlaznih objekata. GNU linker koristi druge mehanizme za ovu svrhu: opcije -b , -format , -oformat , komandu "TARGET" u linker skriptama i varijablu okruženja "GNUTARGET". GNU linker će ignorisati opciju -F kada ne kreira ELF zajednički objekat.

-fini ime

Kada kreirate ELF izvršni ili deljeni objekat, pozovite NAME kada je izvršni ili dijeljeni objekat istovaran, postavljanjem DT_FINI na adresu funkcije. Podrazumevano, linker koristi "_fini" kao funkciju za pozivanje.

-g

Ignorisano. Obezbeđena kompatibilnost sa drugim alatima.

-G vrijednost

--gpsize = vrednost

Postavite maksimalnu veličinu objekata za optimizaciju pomoću GP registra do veličine . Ovo je značajno samo za formate fajlova objekata kao što je MIPS ECOFF koji podržava stavljanje velikih i malih objekata u različite sekcije. Ovo se ignoriše za druge formate datoteka objekta.

-H ime

-same = ime

Kada kreirate ELF zajednički objekat, podesite interno DT_SONAME polje na određeno ime. Kada je izvršna datoteka povezana sa zajedničkim objektom koji ima polje DT_SONAME, onda kada se izvršava izvršni program, dinamički linker će pokušati da učita deljeni objekat koji je naveden u polju DT_SONAME umjesto da koristi ime datoteke datu linker-u.

-i

Izvršite inkrementalnu vezu (isto kao i opcija -r ).

-imeno ime

Kada kreirate ELF izvršni ili deljeni objekat, pozovite NAME kada se izvrši učitavanje izvršenog ili deljenog objekta, postavljanjem DT_INIT na adresu funkcije. Podrazumevano, linker koristi "_init" kao funkciju za pozivanje.

-l arhiva

--library = arhiva

Dodajte arhivu arhive arhiva na listu fajlova za povezivanje. Ova opcija se može koristiti bilo koji broj puta. ld će pretražiti svoju putanju za pojave "libarchive.a" za svaku datu arhivu .

Na sistemima koji podržavaju dijeljene biblioteke, ld takođe može pretraživati ​​biblioteke sa dodatcima različitim od ".a". Konkretno, na ELF i SunOS sistemima, ld će pretražiti direktorijum za biblioteku sa produžetkom ".so" pre nego što potražite jednu sa nastavkom ".a". Po dogovoru, ekstenzija ".so" označava zajedničku biblioteku.

Linker će pretražiti arhivu samo jednom, na lokaciji na kojoj je navedena na komandnoj liniji. Ako arhiva definira simbol koji je nedefinisan u nekom objektu koji se pojavio prije arhive u komandnoj liniji, linker će uključiti odgovarajuću datoteku iz arhive. Međutim, nedefinisan simbol u objektu koji se kasnije pojavljuje na komandnoj liniji neće uzrokovati linkeru da ponovo pretražuje arhivu.

Pogledajte - ( opcija za način prisiljavanja linkera za pretragu arhiva više puta.

Možete istaći istu arhivu više puta u komandnoj liniji.

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

-L searchdir

--library-path = searchdir

Dodajte putanju searchdir na listu putanja koje će pretraživati ​​biblioteke arhiva i ld kontrolne skripte. Ovu opciju možete koristiti bilo koji broj puta. Direktorijumi se pretražuju po redosledu u kojem su navedeni u komandnoj liniji. Direktorijumi koji su navedeni u komandnoj liniji pretražuju se pre podrazumevanih direktorija. Sve opcije -L se primjenjuju na sve -l opcije, bez obzira na redosljed u kojem se pojavljuju opcije.

Ako searchdir počinje sa "=", onda će "=" biti zamijenjen sysroot prefiksom , putanja koja je određena kada je linker konfigurisan.

Podrazumevani skup pretraživanih putanja (bez navođenja sa -L ) zavisi od toga koji način emulacije ld koristi, au nekim slučajevima i na način na koji je konfigurisan.

Staze se takođe mogu navesti u skripti veze sa "SEARCH_DIR" komandom. Direktorijumi koji su ovako navedeni su pretraživani na tačku na kojoj se skripta linkera pojavljuje u komandnoj liniji.

-m emulacija

Emulirajte linkersku emulaciju . Možete navesti dostupne emulacije pomoću --verbose ili -V opcija.

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

U suprotnom, podrazumevana emulacija zavisi od toga kako je linker konfigurisan.

-M

--print-karta

Štampaj mapu veza na standardni izlaz. Mapa veze sadrži informacije o vezi, uključujući sledeće:

*

Gdje se objektne datoteke i simboli mapiraju u memoriju.

*

Koliki su obični simboli dodijeljeni.

*

Svi članovi arhive uključeni su u vezu, uz pominjanje simbola koji je dovodio član arhiva.

-n

--magic

Isključite poravnanje delova i označite izlaz kao "NMAGIC" ako je moguće.

-N

--momagic

Postavite odeljak za tekst i podatke da bi mogli čitati i pisati. Takođe, ne segmentirajte segment podataka i onemogućite povezivanje sa deljenim bibliotekama. Ako izlazni format podržava brojeve čarobnih Unix stilova, označite izlaz kao "OMAGIC".

--no-omagic

Ova opcija negira većinu efekata opcije -N . On postavlja odjeljak teksta samo za čitanje i prisiljava segment podataka da bude poravnato sa strane. Napomena - ova opcija ne omogućava povezivanje sa deljenim bibliotekama. Koristite -Bodynamic za ovo.

-o izlaz

--output = izlaz

Koristite izlaz kao naziv za program proizveden od strane ld ; ako ova opcija nije specificirana, naziv a.out se koristi podrazumevano. Komanda skripta "OUTPUT" može takođe odrediti naziv izlazne datoteke.

-O nivo

Ako je nivo numeričke vrednosti veće od nule, ld optimizuje izlaz. Ovo bi moglo trajati znatno duže i stoga verovatno treba omogućiti samo za poslednju binarnu.

-q

--emit-relocs

Ostavite dijelove i sadržaj preseljenja u potpuno povezanim izvršnim predmetima. Analizu linkova i alatima za optimizaciju linkova možda će biti potrebne ove informacije kako bi se izvršile ispravne izmjene izvršnih programa. Ovo rezultira većim izvršnim programima.

Ova opcija je trenutno podržana samo na ELF platformama.

-r

- smešno

Generišite relocatable output --- tj. Generišite izlaznu datoteku koja zauzvrat služi kao ulaz za ld . Ovo se često naziva delimično povezivanje . Kao neželjeni efekat, u okruženjima koja podržavaju standardne magične brojeve Unixa, ova opcija takođe postavlja magični broj izlazne datoteke na "OMAGIC". Ako ova opcija nije navedena, napravi se apsolutna datoteka. Kada povezujete C ++ programe, ova opcija neće riješiti reference za konstruktore; da to uradite, koristite -Ur .

Kada ulazna datoteka nema isti format kao izlazna datoteka, delimično povezivanje se podržava samo ako ta ulazna datoteka ne sadrži nikakve preseljenja. Različiti izlazni formati mogu imati dalja ograničenja; na primjer, neki "a.out" bazirani formati ne podržavaju djelimično povezivanje sa ulaznim datotekama u drugim formatima.

Ova opcija čini isto što i -i .

-R filename

--just-symbols = filename

Pročitajte imena simbola i njihove adrese iz imena datoteke , ali nemojte ga premeštati ili uključivati ​​na izlaz. Ovo dozvoljava vašoj izlaznoj datoteci simbolično upućivanje na apsolutne lokacije memorije definisane u drugim programima. Ovu opciju možete koristiti više puta.

Za kompatibilnost sa drugim ELF linkerima, ako opciji -R prati ime direktorijuma, a ne ime datoteke, tretira se kao opcija -rpath .

-s

-strip-sve

Ispustite sve podatke o simbolu iz izlazne datoteke.

-S

--strip-debug

Izostaviti podatke simbola debagera (ali ne i sve simbole) iz izlazne datoteke.

-t

- trace

Odštampajte imena ulaznih datoteka dok ih ld procesira.

-T scriptfile

--script = scriptfile

Koristite scriptfile kao linker skriptu. Ovaj skript zamenjuje ld -ovu default skriptu za linkere (umesto da mu se dodaju), tako da komandna datoteka mora navesti sve što je potrebno za opis izlazne datoteke. Ako scriptfile ne postoji u trenutnom direktoriju, "ld" ga traži u direktorijima navedenim u bilo kojoj prethodnoj opciji -L . Mnoštvo -T opcija se akumulira.

-u simbol

--undefined = simbol

Simbol sile se unosi u izlaznu datoteku kao nedefinisan simbol. To može, na primer, pokrenuti povezivanje dodatnih modula sa standardnim bibliotekama. -u se može ponoviti sa različitim argumentima opcije za unos dodatnih nedefinisanih simbola. Ova opcija je ekvivalentna naredbi "EXTERN" linka skripta.

-Ur

Za sve osim programa C ++, ova opcija je ekvivalentna -r : ona generiše relocatabilni izlaz --- tj. Izlaznu datoteku koja zauzvrat služi kao ulaz za ld . Kada povezujete C ++ programe, -Ur rešava referencu na konstruktore, za razliku od -r . Ne radi za korištenje -Ur na fajlovima koji su sami povezani sa -Ur ; kada je izgrađena stona konstruktora, ne može se dodati. Upotrebite -Ur samo za poslednju delimičnu vezu, i -r za ostale.

--unique [= SECTION ]

Stvara odvojenu izlaznu sekciju za svaki odeljak za unos koji se podudara sa Sekcijom , ili ako nedostaje opcionalni SECTION argument za dijaloge, za svaki odeljak za ulaz u siročad. Odjeljak za siročad je jedan koji se posebno ne pominje u linker skripti. Ovu opciju možete koristiti više puta na komandnoj liniji; On sprečava normalno spajanje ulaznih sekcija sa istim imenom, prevazilazeći zadatke izlaznog odseka u linkerskom skriptu.

-v

- verzija

-V

Prikazati broj verzije za ld . Opcija -V takođe navodi podržane emulacije.

-x

- svejedno

Obrišite sve lokalne simbole.

-X

- lokalno stanovništvo

Obrišite sve privremene lokalne simbole. Za većinu mete, to su svi lokalni simboli čije se imena počinju sa L.

-y simbol

- trace-symbol = simbol

Odštampajte ime svake povezane datoteke u kojoj se pojavljuje simbol . Ova opcija se može davati bilo koji broj puta. Na mnogim sistemima potrebno je napraviti podvlake.

Ova opcija je korisna kada imate nedefinisan simbol u vašoj vezi, ali ne znate odakle dolazi.

- Put

Dodaj put do podrazumevane putanje pretrage biblioteke. Ova opcija postoji za Solaris kompatibilnost.

-z ključna reč

Prepoznate ključne reči su "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" i "nocopyreloc ". Druge ključne reči su ignorisane za Solaris kompatibilnost. "initfirst" označava objekat koji se inicijalizira pre početka vremena pre bilo kog drugog objekta. "interpose" označava objekat na kojem se njegova tabela simbola pojavljuje pre svih simbola, ali primarna izvršna datoteka. "loadfltr" označava objekat da se njegove filte odmah obrađuju tokom izvršavanja. "nodefaultlib" označava objekat koji će pretraživati ​​zavisnosti ovog objekta ignorirati sve podrazumevane putanje za pretragu biblioteke. "nodelete" označava objekat ne treba istovarivati ​​u toku izvršavanja. "nodlopen" označava objekat koji nije dostupan za "dlopen". "nodump" označava da objekat ne može da se odbaci "dldump". "sada" obeležava objekat sa ne-laznim vezivanjem za izvršavanje. "Poreklo" označava objekat koji može sadržati $ ORIGIN. "defs" onemogućava nedefinisane simbole. "muldefs" dozvoljava više definicija. "combreloc" kombinuje višestruke relokacijske dijelove i sortira ih kako bi omogućio dinamički keširanje za pretragu.

"nocombreloc" onemogućava kombinovanje više sekcija. "nocopyreloc" onemogućava proizvodnju kopija reloksa.

- ( arhiva -)

- arhiva grupe -end-group

Arhiva bi trebala biti spisak arhivskih datoteka . Mogu biti eksplicitna imena datoteka ili -l opcija.

Navedene arhive se pretražuju više puta sve dok se ne kreiraju nove nedefinisane reference. Obično se arhiva traži samo jednom u redosledu koji je naveden u komandnoj liniji. Ako je simbol u toj arhivi potreban da bi se riješio nedefinisan simbol na koji se objekat spominje u arhivi koja se kasnije pojavljuje na komandnoj liniji, linker ne bi mogao riješiti tu referencu. Grupisanjem arhiva, svi se pretražuju više puta dok se ne riješe sve moguće reference.

Korišćenje ove opcije ima značajan trošak performansi. Najbolje je koristiti samo kada postoje neizbježne kružne reference između dvije ili više arhiva.

--accept-unknown-input-arch

--no-prihvatiti-nepoznat-ulaz-luk

Objašnjava linkeru da prihvati ulazne datoteke čija arhitektura ne može biti prepoznata. Pretpostavka je da korisnik zna šta rade i namjerno želi da se poveže u ove nepoznate ulazne datoteke. Ovo je podrazumevano ponašanje linkera, pre izdanja 2.14. Podrazumevano ponašanje iz verzije 2.14 nadalje je odbacivanje takvih ulaznih datoteka, pa je opcija -accept-unknown-input-arch dodat za vraćanje starog ponašanja.

-sertna ključna reč

Ova opcija je ignorisana za SunOS kompatibilnost .

-Bodynamic

-Da

-call_shared

Veza protiv dinamičkih biblioteka. Ovo je značajno samo na platformama za koje su podijeljene biblioteke podržane. Ova opcija je obično podrazumevana na takvim platformama. Različite varijante ove opcije su za kompatibilnost sa različitim sistemima. Ovu opciju možete koristiti više puta u komandnoj liniji: ona utiče na pretragu biblioteke za -l opcije koje slede.

-Bgroup

Podesite zastavicu "DF_1_GROUP" u unosu "DT_FLAGS_1" u dinamičkom odeljku. Ovo dovodi do toga da linker za izvršavanje postupa sa potraživanjima u ovom objektu i da se njegove zavisnosti izvršavaju samo unutar grupe. - ne-definisano je implicitno. Ova opcija je značajna samo na ELF platformama koje podržavaju dijeljene biblioteke .

-Bast

-Dn

-non_shared

-stati

Ne povezujte se sa deljenim bibliotekama. Ovo je značajno samo na platformama za koje su podijeljene biblioteke podržane. Različite varijante ove opcije su za kompatibilnost sa različitim sistemima. Ovu opciju možete koristiti više puta u komandnoj liniji: ona utiče na pretragu biblioteke za -l opcije koje slede.

-Bibliografski

Kada kreirate zajedničku biblioteku, vezite se na globalne simbole sa definicijom unutar deljene biblioteke, ako ih ima. Obično je moguće da program povezan sa deljenom bibliotekom prevaziđe definiciju unutar deljene biblioteke. Ova opcija je značajna samo na ELFplatformama koje podržavaju dijeljene biblioteke.

- kontrolne sekcije

- bez provere

Traži linkera da ne provjerava adrese dijelova nakon što su im dodeljeni kako bi vidjeli da li postoje preklapanja. Normalno, linker će izvršiti ovu proveru, a ako pronađe bilo koje preklapanje, proizveće odgovarajuće poruke o grešci. Linker zna i daje dodatke za delove u prekrivačima. Podrazumevano ponašanje se može vratiti koristeći prekidač komandne linije - check sections .

--cref

Izlazi sa unakrsnom referentnom tablicom. Ako se generiše fajl mape linkova, tabela unakrsne reference se odštampa u datoteku mape. U suprotnom, štampa se na standardnom izlazu.

Format tabele je namerno jednostavan, tako da ga može lako obraditi skriptom ako je potrebno. Simboli su odštampani, sortirani po imenu. Za svaki simbol data je lista imena datoteka. Ako je simbol definisan, prva navedena datoteka je lokacija definicije. Preostale datoteke sadrže reference na simbol.

--no-define-common

Ova opcija sprečava dodelu adresa zajedničkim simbolima. Komanda skripta "INHIBIT_COMMON_ALLOCATION" ima isti efekat.

Opcija -no-define-common omogućava razdvajanje odluke o dodeljivanju adresa Common Symbolima iz izbora tipa izlaznog fajla; u suprotnom non-relocatable output output sili dodeljuju adrese Common symbolima. Korišćenjem -no-define-common omogućava zajedničke simbole koji se referišu iz deljene biblioteke da se dodeljuju adrese samo u glavnom programu. Ovo eliminiše neiskorišćeni dupli prostor u deljenoj biblioteci, a takođe sprečava eventualnu konfuziju oko rešavanja na pogrešnom duplikatu kada ima mnogo dinamičkih modula sa specijalizovanim putanjama za pretragu za rezoluciju simbola.

--defsym simbol = izraz

Kreirajte globalni simbol u izlaznoj datoteci, koji sadrži apsolutnu adresu koju daje izraz . Ovu opciju možete koristiti toliko puta koliko je potrebno za definisanje više simbola u komandnoj liniji. Ograničen oblik aritmetike je podržan za izraz u ovom kontekstu: možete dati heksadecimalnu konstantu ili ime postojećeg simbola ili koristiti "+" i "-" da biste dodali ili oduzeli heksadecimalne konstante ili simbole. Ako vam je potreban više elaboriranih izraza, razmislite da koristite linker komandni jezik iz skripte. Napomena: između simbola ne treba biti praznog prostora, znak jednakosti (`` = = '') i izraz .

--demangle [= stil ]

- ne-demangle

Ove opcije kontrolišu da li da demangiraju imena simbola u porukama o grešci i drugom izlazu. Kada se linkeru reče da demangira, pokušava da prezentira imena simbola na čitljiv način: trakuje za vodećim podčrtavajem ako ih koristi format datoteke objekta, i pretvara C ++ pomerena imena simbola u korisnička čitljiva imena. Različiti kompajleri imaju različite stilove manga. Opcionalni argang argument za stenjanje može se koristiti za odabir odgovarajućeg stilskog razmaka za vaš kompajler. Linker će se podrazumevano demangirati, osim ako je postavljena varijabla okruženja COLLECT_NO_DEMANGLE . Ove opcije se mogu koristiti za prevazilaženje podrazumevane vrednosti.

- fajl dinamika-linkera

Postavite ime dinamičkog linkera. Ovo je značajno samo kada se generišu dinamički povezane ELF izvršne datoteke. Podrazumevani dinamički linker je obično tačan; nemojte koristiti to osim ako ne znate šta radite.

--embedded-relocs

Ova opcija je značajna samo kada se povezuje MIPS ugrađeni PIC kôd, generiran od opcije -membedded-pic do GNU kompajlera i asemblera. To dovodi do toga da linker stvara tabelu koja se može koristiti tokom radnog vremena kako bi se preselio bilo koji podatak koji je statički inicijalizovan za vrijednosti pokazivača. Za detalje pogledajte kod u testu / ld-empic.

- fatalna upozorenja

Obradite sva upozorenja kao greške .

- force-exe-suffix

Pobrinite se da izlazna datoteka ima .exe sufiks.

Ako uspešno izgrađena potpuno povezana izlazna datoteka nema " .exe " ili " .dll " sufiksu, ova opcija prisiljuje povezivač da kopira izlaznu datoteku na jedno od istog imena pomoću ".exe" sufiksa. Ova opcija je korisna kada koristite neizmenjene Unix makefile na hostu Microsoft Windows, jer neke verzije Windowsa neće pokrenuti sliku osim ako se ne završi sa ".exe" sufiksom.

--no-gc-sekcije

--gc-sekcije

Omogućite sakupljanje smeća neiskorištenih ulaznih sekcija. Ne zanemaruje se na ciljevima koji ne podržavaju ovu opciju. Ova opcija nije kompatibilna sa -r , niti treba da se koristi sa dinamičkim povezivanjem. Podrazumevano ponašanje (ne izvršavanje ove zbirke smeća ) može se vratiti tako što se u komandnoj liniji navode --no-gc-sekcije .

- pomoć

Štampajte sažetak opcija komandne linije na standardnom izlazu i izlazu.

- pomoć oko pomoći

Štampajte rezime svih ciljnih specifičnih opcija na standardnom izlazu i izlazu.

-Map mapfile

Štampajte mapu veze u datoteku mapfile . Pogledajte opis opcije -M , gore.

- ne-drži-memoriju

Normalno se optimizuje za brzinu korišćenja memorije tako što se keširanje simbolnih tablica ulaznih datoteka u memoriji. Ova opcija govori ld da se umesto toga optimizuje za korištenje memorije, preimenujući tablice simbola po potrebi. Ovo može biti potrebno ako se lduje sa memorijskog prostora dok povezujete veliku izvršnu datoteku.

--no-nedefinisan

-z defs

Obično kada se kreira ne-simbolična dijeljena biblioteka, nedefinisani simboli su dozvoljeni i ostavljeni da ih reši pomoću izvršnog loader-a. Ove opcije onemogućavaju takve nedefinisane simbole.

- niz-definicija

-z muldefs

Obično kada se simbol definiše više puta, linker će prijaviti fatalnu grešku. Ove opcije omogućavaju višestruke definicije i prva definicija će se koristiti.

--allow-shlib-undefined

Dozvoli nedefinisane simbole u deljenim objektima čak i kada je podešeno -no-undefined. Neto rezultat će biti da će nedefinisani simboli u redovnim objektima i dalje pokrenuti grešku, ali nedefinisani simboli u deljenim objektima će biti ignorisani. Implementacija no_undefined podrazumeva pretpostavku da će se linker izvršavanja zadaviti na nedefinisanim simbolima. Međutim, postoji najmanje jedan sistem (BeOS) gdje su nedefinisani simboli u deljenim bibliotekama normalni, pošto ih jezgre obrađuje u vrijeme učitavanja kako bi odabrali koja je funkcija najprikladnija za trenutnu arhitekturu. IE dinamički bira odgovarajuću funkciju mmset-a. Očigledno je i normalno da biblioteke koje dele HPPA imaju nedefinisane simbole.

--no-nedefinisana-verzija

Obično kada simbol ima nedefinisanu verziju, linker će ga ignorisati. Ova opcija onemogućava simbole sa nedefinisanim verzijama i umesto toga će se izdati fatalna greška.

- upozorenje-neusklađenost

Obično ld će dati grešku ako pokušate da povežete ulazne datoteke koje su neusaglašene iz nekog razloga, možda zato što su oni napravljeni za različite procesore ili za različite endianije. Ova opcija govori ld da bi trebalo tiho dozvoliti takve moguće greške. Ova opcija bi trebalo koristiti samo sa pažnjom, u slučajevima kada ste preduzeli neku posebnu akciju koja osigurava neusaglašenost grešaka povezivanja.

- ne-cela-arhiva

Isključite efekat opcije --whole-archive za naredne arhivske datoteke.

--noinhibit-exec

Zadržite izvršnu izlaznu datoteku kad god je i dalje upotrebljiva. Normalno, linker neće proizvesti izlaznu datoteku ako se susreće sa greškama tokom procesa veze; ona izlazi bez pisanja izlazne datoteke kada izdaje bilo kakvu grešku.

-nostdlib

Traži se samo direktorijumi biblioteke koji su eksplicitno navedeni u komandnoj liniji. Bibliotekarski direktorijumi navedeni u linker skriptama (uključujući linker skripte navedene u komandnoj liniji) se ignorišu.

--format izlaznog formata

ld može biti konfigurisan da podržava više od jedne vrste datoteke objekta. Ako je vaš ld konfigurisan na ovaj način, možete koristiti opciju --oformat da biste odredili binarni format za datoteku izlaznog objekta. Čak i kada je ld konfigurisan da podržava alternativne formate objekata, obično vam nije potrebno da to odredite, jer ld treba da bude konfigurisan da proizvodi kao standardni izlazni format najobičniji format na svakoj mašini. output-format je tekstovni niz, naziv određenog formata koji podržavaju BFD biblioteke. (Možete da navedete dostupne binarne formate sa objdump -i .) Komanda skripte "OUTPUT_FORMAT" takođe može odrediti format izlaza, ali ova opcija je prepisuje.

-qmagic

Ova opcija je ignorisana za kompatibilnost sa Linuxom.

-Qy

Ova opcija je ignorisana za SVR4 kompatibilnost.

--relax

Opcija sa efektima zavisnim od mašine. Ova opcija je podržana samo na nekoliko ciljeva.

Na nekim platformama, opcija --relax vrši globalne optimizacije koje postaju moguće kada linker rešava adresiranje u programu, kao što su opušteni režimi adresiranja i sintetizovanje novih instrukcija u fajlu izlaznog objekta.

Na nekim platformama, ove globalne optimizacije vezane za vezu mogu onemogućiti simbolično otklanjanje izvršne izvršne datoteke. Ovo je poznato kao slučaj za familiju procesora Matsushita MN10200 i MN10300.

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

--retain-symbols-file filename

Zadržite samo simbole navedene u datoteci filma , odbacujući sve druge. ime datoteke je jednostavno ravna datoteka, sa jednim imenom simbola po liniji. Ova opcija je naročito korisna u okruženjima (kao što je VxWorks) gde se velika globalna tablica simbola akumulira postepeno, kako bi se sačuvala memorija za vrijeme izvršavanja.

--retain-symbols-datoteka ne odbacuje nedefinisane simbole, niti simbole potrebne za preseljenja.

Možete samo da navedete --retain-symbols-file jednom u komandnoj liniji. On prevazilazi -s i -S .

-rpath dir

Dodajte direktorijum u putanju za pretraživanje biblioteke za izvršavanje. Ovo se koristi kada povezujete ELFexecutable sa deljenim objektima. Svi argumenti -prikazi se koncenirani i prenose na linker za izvršavanje, koji ih koristi za lociranje dijeljenih objekata u toku izvršavanja. Opcija -rpath se takođe koristi kada locirate deljene objekte koji su potrebni za deljene objekte koji su eksplicitno uključeni u vezu; pogledajte opis opcije -rpath-link . Ako se -rpath ne koristi prilikom povezivanja izvršnog ELF-a, sadržaj promjenljivog okruženja "LD_RUN_PATH" će se koristiti ako je definiran.

Opcija -rpath se takođe može koristiti na SunOS-u. Podrazumevano, na SunOS-u, linker će iz svih opcija -L koji je dat. Ako se koristi opcija -rpath, trasa za pretragu za runtime će se formirati isključivo pomoću opcija -rpath , ignorišući opcije -L . Ovo može biti korisno kada koristite gcc, koji dodaje mnoge opcije -L koje mogu biti na NFS montiranim datotečnim sistemima.

Za kompatibilnost sa drugim ELF linkerima, ako opciji -R prati ime direktorijuma, a ne ime datoteke, tretira se kao opcija -rpath .

-rpath-link DIR

Kada koristite ELF ili SunOS, za jednu dijeljenu biblioteku može biti potrebno još jedno. Ovo se događa kada link "ld -shared" uključuje dijeljenu biblioteku kao jednu od ulaznih datoteka.

Kada se linker susreće sa takvom zavisnošću kada rade neadekatljivu, nepredstavljivu vezu, automatski će pokušati da locira potrebnu dijeljenu biblioteku i uključi je u link ako nije eksplicitno uključen. U tom slučaju, opcija -rpath-link određuje prvi set direktorija za pretragu. Opcija -rpath-link može odrediti niz imenova direktorijuma tako što će navesti listu imena koja su odvojena kolonima ili se pojavljuju više puta.

Ova opcija treba koristiti sa oprezom, jer ona preklapa putanja za pretragu koja je možda bila kompilirana u deljenu biblioteku. U tom slučaju moguće je nenamjerno koristiti neku drugu potu za pretragu nego što bi linker za izvršavanje mogao učiniti.

Linker koristi sledeće putanje za pretraživanje kako bi locirao potrebne dijeljene biblioteke.

1.

Svi direktorijumi navedeni od opcija -rpath-link .

2.

Bilo koji direktorijum naveden u opcijama -rpath . Razlika između -rpath i -rpath-link je da su direktorijumi specificirani opcijama -rpath uključeni u izvršnu datoteku i korišteni u vrijeme izvršavanja, dok opcija -rpath-link deluje jedino u vremenu povezivanja. To je samo za izvorne linkere.

3.

U sistemu ELF-a, ukoliko nisu korišćene opcije -rpath i "rpath-link", pretražite sadržaj promenljive okruženja "LD_RUN_PATH". To je samo za izvorne linkere.

4.

Na SunOS-u, ukoliko opcija -rpath nije korišćena, potražite bilo koji direktorijum naveden pomoću opcija -L .

5.

Za izvorni linker, sadržaj promenljive okruženja "LD_LIBRARY_PATH".

6.

Za izvorni ELF linker, direktorije u "DT_RUNPATH" ili "DT_RPATH" deljene biblioteke pretražuju deljene biblioteke potrebne za to. Stavke "DT_RPATH" se ignorišu ako postoje unosi "DT_RUNPATH".

7.

Podrazumevani direktorijumi, obično / lib i / usr / lib .

8.

Za izvorni linker na sistemu ELF, ako postoji datoteka /etc/ld.so.conf , lista direktorija pronađenih u toj datoteki.

Ako tražena dijeljena biblioteka nije pronađena, linker će izdati upozorenje i nastaviti sa vezom.

-elek

-Božljivo

Kreirajte deljenu biblioteku. Ovo je trenutno podržano samo na ELF, XCOFF i SunOS platformama. Na SunOS-u, linker će automatski kreirati zajedničku biblioteku ako se ne koristi -e opcija i postoje nedefinisani simboli u linku.

-sort-common

Ova opcija govori ld da sortira obične simbole po veličini kada ih stavlja u odgovarajuće dijelove izlaza. Prvo dodajte sve one bajt simbole, zatim sve dva bajta, zatim sve četiri bajta, a zatim sve ostalo. To je da se spriječe praznine između simbola zbog ograničenja poravnanja.

--split-po-fajl [ veličina ]

Slično kao --split-by-reloc, ali kreira novi izlazni deo za svaku ulaznu datoteku kada se dostigne veličina . veličina podrazumeva veličinu od 1 ako nije data.

--split-by-reloc [ broj ]

Tries kreira dodatne sekcije u izlaznoj datoteci tako da nijedan odlomak izlaza u datoteci ne sadrži više od premeštanja broja. Ovo je korisno kada se generišu ogromne pokretne datoteke za preuzimanje u određene jezgre u stvarnom vremenu sa formatom datoteke objekta COFF-a; jer COFFcannot predstavlja više od 65535 preseljenja u jednom odeljku. Imajte na umu da ovo neće uspjeti sa formatima datoteka objekata koji ne podržavaju proizvoljne dijelove. Linker neće podeliti pojedinačne unose za redistribuciju, tako da ako jedan odsek za unos sadrži više od premeštanja broja, jedan izlazni odeljak će sadržati toliko premeštanja. brojanje podrazumevanih vrijednosti 32768.

--stats

Izračunajte i prikazati statistiku o radu linkera, kao što su vreme izvršenja i korišćenje memorije.

- tradicionalni format

Za neke mete, izlaz ld je na neki način različit od izlaza nekog postojećeg linkera. Ovaj preklopnik zahtijeva ld da umjesto toga koristi tradicionalni format.

Na primjer, na SunOS-u, ld kombinuje duplirane unose u tabeli simbola. Ovo može smanjiti veličinu izlazne datoteke sa potpunim informacijama o otklanjanju grešaka za više od 30 procenata. Nažalost, program SunOS "dbx" ne može pročitati rezultujući program ("gdb" nema problema). Prekidač -tradicionalnog formata govori ld da ne kombinira duplicirane unose.

--sekcija-start sectionname = org

Pronađite sekciju u izlaznoj datoteci na apsolutnoj adresi datoj od org . Ovu opciju možete koristiti toliko puta koliko je potrebno za lociranje više sekcija u komandnoj liniji. org mora biti jedan heksadecimalni broj; za kompatibilnost sa drugim linkerima, možete izgubiti vodeći 0x obično povezani sa heksadecimalnim vrijednostima. Napomena: ne treba biti praznog prostora između imena profila , znaka sa jednakim brojem znakova (`` = '') i org .

-Tbss org

-Tdata org

-Txt org

Koristite org kao početnu adresu za --- odnosno --- "bss", "data" ili "text" segment izlazne datoteke. org mora biti jedan heksadecimalni broj; za kompatibilnost sa drugim linkerima, možete izgubiti vodeći 0x obično povezani sa heksadecimalnim vrijednostima.

-dll-verbose

- verovatno

Prikažite broj verzije za ld i navedite podržane emulacije linkera. Prikazati koje ulazne datoteke mogu i koje se ne mogu otvoriti. Prikazati linker skriptu koji koristi linker.

- version-script = version-scriptfile

Navedite ime verzije skripte linkera. Ovo se obično koristi prilikom kreiranja dijeljenih biblioteka kako bi se odredile dodatne informacije o heirarhiji verzije za kreiranu biblioteku. Ova opcija je značajna samo na ELF platformama koje podržavaju dijeljene biblioteke.

--warn-common

Upozoriti kada se zajednički simbol kombinuje sa drugim zajedničkim simbolom ili sa definicijom simbola. Unix linkeri omogućavaju ovu donekle neujednačenu praksu, ali linkeri na nekim drugim operativnim sistemima ne. Ova opcija vam omogućava da pronađete potencijalne probleme od kombinovanja globalnih simbola. Nažalost, neke biblioteke C koriste ovu praksu, tako da možete dobiti upozorenja o simbolima u bibliotekama kao iu vašim programima.

Postoje tri vrste globalnih simbola, ilustrovanih ovde primjerima C:

int i = 1;

Definicija koja se nalazi u inicijalizovanom dijelu izlazne datoteke.

extern int i;

Nedefinisana referenca, koja ne izdvaja prostor. Mora da postoji neka definicija ili zajednički simbol za varijablu negde.

int i;

Zajednički simbol. Ako postoji samo (jedan ili više) zajedničkih simbola za varijablu, ona ide u neinicijalizovanu oblast podataka izlazne datoteke. Linker spaja više običnih simbola za istu varijablu u jedan simbol. Ako su različite veličine, on odaberu 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 linija: prvi opisuje upravo simbol koji se sreće, a drugi opisuje prethodni simbol sa istim imenom. Jedan ili oba ova dva simbola biće zajednički simbol.

1.

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

(
): upozorenje: uobičajeno od preklapanje po definiciji (
): upozorenje: ovde definisano

2.

Okretanje zajedničkog simbola u referencu, jer se kasnije definiše simbol. Ovo je isto kao i prethodni slučaj, osim što se simboli susreću u drugačijem redosledu.

(
): upozorenje: definicija ` 'prevladavajuća zajednička (
): upozorenje: ovdje je zajedničko

3.

Spajanje zajedničkog simbola sa prethodnim zajedničkim simbolom iste veličine.

(
): upozorenje: višestruko često od "" (): upozorenje:

4.

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

(
): upozorenje: uobičajeno od ` 'nadređeno većim zajedničkim (
): upozorenje:

5.

Spajanje zajedničkog simbola sa prethodnim manjim zajedničkim simbolom. Ovo je isto kao i prethodni slučaj, osim što se simboli susreću u drugačijem redosledu.

(
): upozorenje: uobičajeno od koji premašuje manju zajedničku (): upozorenje: ovde je manje zajedničko

--warn-konstruktori

Upozoriti ako se koriste bilo koji globalni konstruktori. Ovo je korisno samo za nekoliko formata datoteka datoteka. Za formate poput COFF ili ELF, linker ne može otkriti upotrebu globalnih konstruktora.

--warn-multiple-gp

Upozoriti ako je u izlaznoj datoteki potrebno više globalnih vrijednosti pokazivača. Ovo je značajno samo za određene procesore, kao što je Alpha. Konkretno, neki procesori stavljaju velike vrijednosti u poseban odjeljak. Poseban registar (globalni pokazivač) ukazuje na sredinu ovog odeljka, tako da se konstanti mogu efikasno učitati putem režima relativnog adresiranja baznog registra. Pošto je ofset u relativnom modu baznog registra fiksiran i relativno mali (npr. 16 bitova), ovo ograničava maksimalnu veličinu konstantnog bazena. Stoga, u velikim programima, često je neophodno koristiti više globalnih vrijednosti pokazivača kako bi mogle riješiti sve moguće konstante. Ova opcija dovodi do upozorenja kad god se desi ovaj slučaj.

- upozorenje-jednom

Samo jednom upozorite na svaki nedefinisan simbol, a ne jednom u modulu koji se odnosi na njega.

--warn-section-align

Upozoriti ako je adresa izlaznog dela promijenjena zbog poravnanja. Tipično, poravnanje će biti podešeno u odeljku za unos. Adresa će se promeniti samo ako nije eksplicitno navedena; to jest, ako komanda "SECTIONS" ne određuje početnu adresu za odjeljak.

- cela-arhiva

Za svaku arhivu koja se pominje u komandnoj liniji nakon opcije - cela-arhiva , uključite svaku datoteku objekta u arhivu u vezu, a ne tražiti arhivu za tražene datoteke objekata. Ovo se obično koristi za pretvorbu arhivske datoteke u deljenu biblioteku, primoravajući svaki objekt da bude uključen u rezultirajuću dijeljenu biblioteku. Ova opcija se može koristiti više puta.

Dve napomene kada koristite ovu opciju iz gcc: Prvo, gcc ne zna za ovu opciju, tako da morate koristiti -Wl, -kako-arhivirati . Drugo, nemojte zaboraviti da koristite -Wl, -no-celu-arhivu nakon liste arhiva, jer će gcc dodati svoju listu arhiva vašoj liniji i možda ne želite da ova zastava utiče i na njih.

--wrap simbol

Koristite omotnu funkciju za simbol . Svaka nedefinisana referenca na simbol će biti riješena na "__ wrap_symbol". Svaka nedefinisana referenca na "__real_symbol" biće riješena na simbol .

Ovo se može koristiti za obezbeđivanje omota za sistemsku funkciju. Funkcija omotača treba nazvati "__wrap_symbol". Ako želi da pozove sistemsku funkciju, trebalo bi da pozove "__ real_symbol".

Evo trivijalnog primera:

prazan * __wrap_malloc (int c) {printf ("poziv je pozvan sa% ld \ n", c); povratak __real_malloc (c); }

Ako povezujete drugi kôd sa ovom datotekom koristeći --wrap malloc , onda će svi pozivi na "malloc" pozvati funkciju "__wrap_malloc" umjesto toga. Poziv na "__real_malloc" u "__wrap_malloc" će nazvati stvarnu funkciju "malloc".

Možda želite da obezbedite funkciju "__real_malloc" tako da će veze bez opcije --wrap uspeti. Ako ovo uradite, ne smete stavljati definiciju "__ real_malloc" u istu datoteku kao "__wrap_malloc"; ako to učinite, asembler može riješiti poziv prije nego što linker ima priliku da ga zamijeni za "malloc".

- novim-dtags

--dizable-new-dtags

Ovaj linker može kreirati nove dinamičke oznake u ELF-u. Međutim, stariji ELF sistemi ih možda ne razumiju. Ako navedete --enable-new-dtags , dinamičke oznake će se kreirati po potrebi. Ako navedete --disable-new-dtags , neće se kreirati nove dinamičke oznake. Podrazumevano, nove dinamičke oznake nisu kreirane. Imajte na umu da su te opcije dostupne samo za ELF sisteme.

Linker i386 PE podržava opciju -shared , što uzrokuje da izlaz bude dinamički povezana biblioteka (DLL) umesto normalne izvršne datoteke. Kada koristite ovu opciju, treba nazvati izlaz "* .dll". Osim toga, linker u potpunosti podržava standardne "* .def" fajlove, koji se mogu specificirati na linku komandne linije kao objektna datoteka (ustvari, treba da prethodi arhivima od kojih izvozi simbole, da bi se osiguralo da se oni povezuju, baš kao i normalna datoteka objekta).

Pored opcija zajedničkih za sve ciljeve, linker i386 PE podržava dodatne opcije komandne linije koje su specifične za cilj i386 PE. Opcije koje uzimaju vrijednosti mogu biti odvojene od njihovih vrijednosti bilo znakom prostora ili jednakom.

--add-stdcall-alias

Ako se daju, simboli sa stdcall sufiksom (@ nn ) biće izvezeni kao-i, kao i sa uklonjenim sufiksom.

- datoteka baze podataka

Koristite datoteku kao ime datoteke u kojoj ćete sačuvati osnovne adrese svih preseljenja potrebnih za generiranje DLL-ova sa dlltool-om .

- DLL

Napravite DLL umesto redovne izvršne datoteke. Takođe možete koristiti -eliti ili odrediti "LIBRARY" u datoj ".def" datoteki.

- enable-stdcall-fixup

--disable-stdcall-fixup

Ako veza pronađe simbol koji ne može da reši, pokušaće da uradi `` fuzzy linking '' traženjem drugog definisanog simbola koji se razlikuje samo u obliku imena simbola (cdecl vs stdcall) i riješiti taj simbol pomoću povezivanja na meč. Na primer, nedefinisan simbol "_foo" može biti povezan sa funkcijom "_foo @ 12", ili nedefinisan simbol "_bar @ 16" može biti povezan sa funkcijom "_bar". Kada linker to uradi, štampa upozorenje, pošto obično nije trebalo da se poveže, ali ponekad za uvoz biblioteka generiranih od DLL trećih strana možda će biti potrebna ova funkcija. Ako navedete --enable-stdcall-fixup , ova funkcija je potpuno omogućena, a upozorenja se ne štampaju. Ako navedete --disable-stdcall-fixup , ova funkcija je onemogućena i takve neusaglašenosti se smatraju greškama.

- eksport-svi simboli

Ako se daju, svi globalni simboli u objektima koji se koriste za izgradnju DLL-a biće izvezeni od strane DLL-a. Imajte na umu da je ovo podrazumevano ako inače ne bi bilo ikakvih izvoženih simbola. Kada se simboli eksplicitno izvoze pomoću DEF datoteka ili se implicitno izvoze preko atributa funkcije, podrazumevano je da ne izvozi bilo šta drugo, osim ako je ova opcija data. Imajte na umu da se simboli "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" i "impure_ptr" neće automatski izvoziti. Takođe, simboli uvezeni iz drugih DLL-ova neće biti ponovo izvezeni, niti će simboli navesti unutrašnji izgled DLL-a, poput onih koji počinju sa "_head_" ili završavaju sa "_iname". Pored toga, neće biti izvezeni simboli iz "libgcc", "libstd ++", "libmingw32" ili "crtX.o". Simboli čija imena počinju sa "__rtti_" ili "__builtin_" neće se izvoziti, pomoću DLL-a za C ++. Na kraju, postoji obimna lista cygwin-privatnih simbola koji se ne izvoze (očigledno, ovo se primjenjuje prilikom izgradnje DLL-a za ciljeve cygwin-a).

Ovi cygwin-isključeni 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" environ ".

simbol simbola , simbol , simbol , simbol ...

Određuje listu simbola koje ne bi trebalo automatski da se izvoze. Imena simbola mogu biti ograničene zapovijima ili kolonama.

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

Određuje listu biblioteka arhiva sa kojih se simboli ne bi trebali automatski izvoziti. Imena biblioteke mogu biti ograničene na zapise ili kolone. Navođenje "-exclude-libs ALL" isključuje simbole u svim arhivskim bibliotekama iz automatskog izvoza. Simboli koji su izričito navedeni u .def datoteki i dalje se izvoze, bez obzira na ovu opciju.

- poravnavanje datoteke

Navedite poravnanje datoteke. Sekcije u datoteci će uvek početi sa poravnanjem datoteka koje su višestruki od ovog broja. Ova vrijednost je 512.

- rezerva

- rezerva , izvrši

Navedite količinu memorije koju želite rezervirati (i opciono izvršiti) koja će se koristiti kao kup za ovaj program. Podrazumevano je rezervirano 1Mb, a izvršeno je 4K.

- osnovna vrijednost slike

Koristite vrijednost kao osnovnu adresu vašeg programa ili DLL-a. Ovo je najniža memorijska lokacija koja će se koristiti kada se vaš program ili DLL učita. Da biste smanjili potrebu za preseljenjem i poboljšanjem performansi vaših DLL-ova, svaka bi trebala imati jedinstvenu bazu i ne bi se preklapala sa bilo kojim drugim DLL-om. Podrazumevano je 0x400000 za izvršne datoteke, a 0x10000000 za DLL.

-kill-at

Ako se daju, stdcall sufikse (@nn) će biti uklonjeni iz simbola pre nego što se izvoze.

--major-slika-verzija vrijednost

Podešava glavni broj "verzija slike". Podrazumeva se na 1.

--major-os-verzija vrijednost

Podešava glavni broj `` verzija os ''. Podrazumeva se na 4.

- majora-podsistem-verzija vrijednosti

Podešava glavni broj `` podsistemske verzije ''. Podrazumeva se na 4.

- vrednost minora-slike-verzija

Podešava manji broj "verzija slike". Podrazumeva se na 0.

- minor-os-verzija vrijednost

Podešava manji broj `` verzija os ''. Podrazumeva se na 0.

--minor-podsistem-verzija vrijednost

Podešava manji broj `` podsistemske verzije ''. Podrazumeva se na 0.

--output-def fajl

Linker će kreirati datoteku datoteke koja će sadržati DEF datoteku koja odgovara DLL-u koji linker generira. Ova DEF datoteka (koju treba nazvati "* .def") može se koristiti za kreiranje biblioteke uvoza sa "dlltool" ili može biti korištena kao referenca za automatske ili implicitno izvožene simbole.

--out-implib fajl

Linker će kreirati datoteku datoteke koja će sadržati import lib koji odgovara DLL-u koji linker generira. Ovaj import lib (koji treba nazvati "* .dll.a" ili "* .a" može se koristiti za povezivanje klijenata protiv generisanog DLL-a, ovo ponašanje omogućava preskakanje zasebnog koraka kreiranja biblioteke uvoza "dlltool".

- enable-auto-image-base

Automatski odaberite bazu slika za DLL-ove, osim ako nije specificirano pomoću "-image-base" argumenta. Korišćenjem hash-a generisanog iz dllname-a za kreiranje jedinstvene baze slike za svaki DLL, izbjegavaju se sudaranja u memoriji i relokacije koji mogu odložiti izvršavanje programa.

--disable-auto-image-base

Nemojte automatski generirati jedinstvenu bazu slika. Ako ne postoji korisnička baza slike ("-image-base") onda koristite podrazumevanu platformu.

string string -dll-search-prefix

Kada dinamično povežete na dll bez biblioteke uvoza, potražite " .dll" pre svega "lib .dll". Ovo ponašanje omogućava lako razlikovanje između DLL-ova napravljenih za različite podplatforme: native, cygwin, uwin, pw itd. Na primjer, cygwin DLL obično koriste "--dll-search-prefix = cyg".

--enable-auto-import

Uradite sofisticirano povezivanje "_symbol" na "__imp__symbol" za DATA uvoz iz DLL-a, i kreirajte potrebne simbole za kreiranje biblioteka uvoza sa tim DATAexports. Ovo će uglavnom "samo raditi" --- ali ponekad možete videti ovu poruku:

"varijabla" ne može se automatski uvoziti. Molimo pročitajte dokumentaciju za len "--enable-auto-import" za detalje. "

Ova poruka se javlja kada neki (pod) ekspresija pristupi adresi koja se konačno daje sumom dve konstante (Win32 tabele uvoza dozvoljavaju samo jednu). Primeri u kojima se ovo može desiti uključuju pristup članovima polja strukturnih varijabli koje su uvezene iz DLL-a, kao i korištenje konstantnog indeksa u varijablu nizova koja je uvezena iz DLL-a. Svaka višestruka varijabla (nizovi, strukture, dugačke, itd.) Mogu pokrenuti ovu grešku. Međutim, bez obzira na tačan tip podataka uvredljive izvozne varijable, ld će ga uvijek otkriti, izdati upozorenje i izaći.

Postoji nekoliko načina za rješavanje ove poteškoće, bez obzira na tip podataka izvezene varijable:

Jedan od načina je da koristite --enable-runtime-pseudo-reloc switch. Ovo ostavlja zadatak prilagođavanja referenci u vašem klijentskom kodu za okruženje okruženja, tako da ova metoda funkcioniše samo kada je opcija za izvršavanje podržava ovu funkciju.

Drugo rešenje je prisiljavanje da jedna od "konstanti" bude promjenljiva - koja je, nepoznata i ne optimizibilna u vrijeme kompajliranja. Za nizove postoje dve mogućnosti: a) indeksira (adresa niza) varijablu, ili b) pravi "konstantni" indeks promenljivu. Tako:

extern type extern_array []; extern_array [1] -> {volatilni tip * t = extern_array; t [1]

ili

extern type extern_array []; extern_array [1] -> {volatile int t = 1; extern_array [t]}

Za strukture (i većinu drugih višeslojnih tipova podataka) jedina opcija je da napravite samu strukturu (ili dugu dugu, ili ...) varijablu:

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

ili

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

Treći način rešavanja ove poteškoće je da se napusti "auto-import" za simbol koji je uvredljiv i da ga označite sa "__declspec (dllimport)". Međutim, u praksi koja zahteva korištenje #defines za vrijeme kompajliranja kako bi ukazao na to da li pravite DLL, kreirate kôd klijenta koji će se povezati na DLL ili samo izgraditi / povezati statičku biblioteku. Prilikom izbora između različitih metoda rešavanja problema "direktne adrese sa konstantnim ofsetom", trebalo bi da uzmete u obzir tipičnu upotrebu u realnom svetu:

Original:

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

Rešenje 1:

--foo.h extern int arr []; --foo.c #ključi "foo.h" void main (int argc, char ** argv) {/ * Ovo rešenje je za win32 i cygwin; ne "optimizuj" * / volatile int * parr = arr; printf ("% d \ n", parr [1]); }

Rešenje 2:

--foo.h / * Napomena: pretpostavlja se auto-izvoz (nema __declspec (dllexport)) * / #if (definisano (_WIN32) || definisano (__ 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 main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Četvrti način izbjegavanja ovog problema je ponovna koda vaše biblioteke da koristi funkcionalni interfejs umjesto interfejs podataka za uvjetne varijable (npr. Set_foo () i get_foo () accessor funkcije).

--disable-auto-import

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

- vremenski raspored-pseudo-relok

Ako vaš kôd sadrži izraze opisane u odjeljku --enable-auto-import, odnosno DATAimports iz DLL-a sa ne-offsetom, ovaj prekidač će stvoriti vektor "pseudo-relokacija za vrijeme izvršavanja" koji može koristiti okruženje za vrijeme izvršavanja da bi prilagodio reference na takve podatke u vašem klijentskom kodu.

--dizable-runtime-pseudo-reloc

Ne kreirajte pseudo relokacije za nulte offset DATA uvoz iz DLL-ova. Ovo je podrazumevano.

- enable-extra-pe-debug

Pokažite dodatne informacije o grešci u vezi sa automatskim uvozom simbola.

-sekciono-poravnanje

Podešavanje poravnanja odseka. Sekcije u memoriji će uvek početi na adresama koje su višestruki od ovog broja. Podrazumeva se na 0x1000.

- rezervni rezervat

- rezervisati rezervu , izvršiti

Navedite količinu memorije koju želite rezervisati (i opciono izvršiti) koja će se koristiti kao stack za ovaj program. Podrazumevano je rezervirano 2Mb, a izvršeno je 4K.

- sustav sistema koji

- sistem koji : major

- sistem koji : major . minor

Određuje podsistem pod kojim će vaš program izvršavati. Pravne vrednosti za koje su "native", "windows", "console" i "posix". Takođe možete podesiti verziju podsistema.

Važno: Koristite komandu čovjeka ( % čovjek ) da biste videli kako se na vašem računaru koristi komanda.