Linux / Unix ukaz: Id

NAME

ld - Uporaba LD , GNU linker

POVZETEK

ld [ možnosti ] objfile ...

OPIS

ld združuje več objektnih in arhivskih datotek , preslika njihove podatke in povezuje referenčne simbole. Običajno je zadnji korak pri sestavljanju programa zagnati ld .

ld sprejema jezikovne datoteke Linker Command napisane v nadgradnji sintakse jezika ukaznega jezika AT & T's Link Editor Command, da zagotovi izrecen in popoln nadzor nad povezovalnim procesom.

Ta manska stran ne opisuje ukaznega jezika; glej vnos ld v "info" ali priročniku ld: linker GNU za podrobne informacije o ukaznem jeziku in drugih vidikih linkerja GNU.

Ta različica ld uporablja splošne BFD knjižnice za delovanje v objektnih datotekah. To ld omogoča branje, združevanje in pisanje predmetnih datotek v različnih oblikah --- npr. COFF ali "a.out". Različne oblike so lahko povezane tako, da ustvarijo vse razpoložljive vrste objektne datoteke.

Poleg fleksibilnosti je linker GNU bolj koristen kot drugi povezovalci pri zagotavljanju diagnostičnih informacij. Mnogi povezovalci zapustijo izvršitev takoj, ko naletijo na napako; kadar koli je to mogoče, ld nadaljuje z izvajanjem, kar vam omogoča, da prepoznate druge napake (ali v nekaterih primerih dobite izhodno datoteko kljub napaki).

GNU linker ld naj bi pokrival širok razpon situacij in bil čim bolj kompatibilen z drugimi povezovalci. Kot rezultat, imate veliko možnosti za nadzor svojega vedenja.

OPCIJE

Povezovalec podpira številne možnosti ukazne vrstice , vendar se v praksi le malo uporablja v določenem kontekstu. Na primer, pogosta uporaba ld je povezava standardnih Unixovih datotek v standardnem, podprtem Unix sistemu . V takem sistemu lahko povežete datoteko »hello.o«:

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

To pove ld, da proizvede datoteko, imenovano izhod, kot rezultat povezovanja datoteke "/lib/crt0.o" s "hello.o" in knjižnico "libc.a", ki bo prišla iz standardnih imenskih iskalnih poizvedb. (Glejte razpravo o spodnji možnosti -l .)

Nekatere možnosti ukazne vrstice za ld se lahko določijo na kateri koli točki v ukazni vrstici. Vendar pa možnosti, ki se nanašajo na datoteke, kot je -l ali -T , povzročijo, da se datoteka bere na točki, na kateri se možnost pojavi v ukazni vrstici, glede na datoteke predmeta in druge možnosti datoteke. Ponavljajoče se možnosti za neuporabo datoteke z drugačnim argumentom ne bodo imele nobenega nadaljnjega učinka ali preglasijo predhodnih pojavov (tistih, ki so na levi strani v ukazni vrstici) te možnosti. Možnosti, ki so lahko smiselno določene več kot enkrat, so navedene v spodnjih opise.

Nepreklicni argumenti so objektne datoteke ali arhivi, ki jih je treba povezati skupaj. Lahko sledijo, pred ali se kombinirajo z možnostmi ukazne vrstice, razen, da argument o predmetni datoteki ne sme biti nameščen med možnostjo in njenim argumentom.

Običajno se povezovalec sklicuje z vsaj eno datoteko predmeta, vendar lahko določite druge oblike binarnih vhodnih datotek z uporabo -l , -R in skriptnega ukaznega jezika. Če nobena binarna vhodna datoteka sploh ni določena, povezovalec ne proizvaja nobenega izhoda in izdaja sporočila Ni vhodnih datotek .

Če linker ne more prepoznati oblike datoteke s predmeti, bo domneval, da gre za linker skript. Skript, ki je naveden na ta način, poveča glavni povezovalni skript, ki se uporablja za povezavo (bodisi privzeti skriptni skript ali določen z uporabo -T ). Ta funkcija dovoljuje linkerju povezavo z datoteko, ki je videti kot predmet ali arhiv, dejansko pa samo določi nekatere vrednosti simbola ali uporablja "INPUT" ali "GROUP" za nalaganje drugih predmetov. Upoštevajte, da določanje skripta na ta način zgolj poveča glavni linker skript; uporabite možnost -T , da v celoti povrne privzeti skriptni linker.

Za opcije, katerih imena so enojna črka, morajo argumenti opcije slediti opcijski črki brez vmesnega presledka ali pa jih dati kot ločeni argumenti takoj po možnosti, ki jih potrebujejo.

Za opcije, katerih imena so več črk, je lahko ena pomišljaja ali dve pred imenom opcije; na primer, -tracni simbol in -tracni simbol sta enakovredni. Opomba - obstaja ena izjema od tega pravila. Možnosti z več črkami, ki se začnejo z majhnim ohlapnim znakom 'o', lahko pred tem izberejo samo dve pomišljaji. To je za zmanjšanje zmede z možnostjo -o . Torej, na primer, -magnetna nastavi ime izhodne datoteke v čarobno, medtem ko --momagično postavlja NMAGIC zastavico na izhodu.

Argumenti za opcije z več črkami morajo biti ločeni od imena opcije z enakim znanjem ali pa morajo biti podani kot ločeni argumenti takoj po možnosti, ki jih potrebujejo. Na primer, - sledilni simbol foo in -trace-simbol = foo sta enakovredni. Sprejete so edinstvene okrajšave imen veččlanskih možnosti.

Opomba - če se linker posredno posreduje prek gonilnika prevajalnika (npr. Gcc ), je treba vse možnosti povezovalca ukazne vrstice prednastaviti z -Wl (ali kar je primerno za določen gonilnik prevajalnika), na primer:

gcc -Wl, - zagonska skupina foo.o bar.o -Wl, - končna skupina

To je pomembno, ker sicer lahko gonilnik prevajalnika tiho spusti možnosti povezovalca, kar ima za posledico slabo povezavo.

Tukaj je tabela generičnih stikal ukazne vrstice, ki jih je sprejel GNU linker:

- ključna beseda

Ta možnost je podprta za združljivost HP / UX. Argument ključne besede mora biti eden od arhivov nizov , deljenih ali privzetih . -arhiv je funkcionalno enakovreden -Bstatičnemu , druga pa sta funkcionalno enakovredna -Bodynamic . Ta možnost se lahko uporablja večkrat.

- Arhitektura

- arhitektura = arhitektura

V trenutni izdaji ld je ta možnost uporabna le za družino arhitektur Intel 960. V tej konfiguraciji ld argument arhitekture določi določeno arhitekturo v družini 960, ki omogoča nekatere zaščitne ukrepe in spremeni iskalno pot knjižnice arhiva.

Prihodnje izdaje ld lahko podpirajo podobne funkcije za druge družine arhitekture.

-b vhodni format

--format = vhodni format

ld je lahko konfiguriran tako, da podpira več kot eno vrsto objektne datoteke. Če je vaš ld konfiguriran na ta način, lahko uporabite možnost -b , da določite binarni format za datoteke vhodnih objektov, ki sledijo tej možnosti v ukazni vrstici. Tudi kadar je ld konfiguriran za podporo alternativnih formatov, vam ponavadi to ni treba navesti, ker naj bo ld nastavljen tako, da pričakuje kot privzeti vhodni format najbolj običajen format na vsakem računalniku. vhodni format je besedilni niz, ime določenega formata, ki ga podpirajo knjižnice BFD. (Seznam razpoložljivih binarnih formatov lahko najdete z objdump -i .)

To možnost lahko uporabite, če povezujete datoteke z nenavadnim binarnim formatom. Lahko tudi uporabite -b, da izrecno preklopite formate (pri povezovanju objektnih datotek različnih formatov) z vključitvijo -b vhodnega formata pred vsako skupino datotek predmetov v določeni obliki.

Privzeta oblika je vzeta iz spremenljivke okolja "GNUTARGET".

Vhodni format lahko določite tudi iz skripte z ukazom "TARGET";

-c MRI-commandfile

--mri-script = MRI-ukazna datoteka

Za združljivost z linkerji, ki jih proizvaja MRI, ld sprejema skriptne datoteke, napisane v nadomestnem, omejenem ukaznem jeziku, opisanem v razdelku Združljive skripte datotek MRI v dokumentaciji GNU ld. Uvesti datoteke skripta MRI z možnostjo -c ; uporabite možnost -T za zagon povezav skripte, napisane v splošnem namenskem jeziku skriptnega jezika. Če MRI-cmdfile ne obstaja, ld ga išče v imeniku, ki ga določijo morebitne možnosti -L .

-d

-dc

-dp

Te tri možnosti so enakovredne; podpirajo več oblik za združljivost z drugimi povezovalci. Dodeljujejo prostor skupnim simbolom, tudi če je podana izstopna datoteka, ki jo je mogoče premestiti (z -r ). Enak učinek ima ukaz skripta "FORCE_COMMON_ALLOCATION".

- vstop

- vnos = vnos

Uporabite vnos kot izrecen simbol za začetek izvajanja programa, namesto privzete vstopne točke. Če ni nobenega simbola poimenovanega vnosa , bo linker poskušal razčleniti vnos kot številko in ga uporabiti kot naslov vnosa (številka se razlaga v bazi 10, lahko uporabite vodilni 0x za osnovo 16 ali vodilno 0 za osnovo 8).

-E

- izvoz-dinamična

Pri ustvarjanju dinamično povezane izvedljive datoteke dodajte vse simbole dinamični tabeli simbolov. Dinamična simbolna tabela je nabor simbolov, ki so vidni med dinamičnimi predmeti v času izvajanja.

Če ne uporabljate te možnosti, bo dinamična tabela simbolov običajno vsebovala le tiste simbole, na katere se sklicuje določen dinamični objekt, naveden v povezavi.

Če uporabljate "dlopen" za nalaganje dinamičnega predmeta, ki se mora nanašati na simbole, ki jih definira program, in ne na nekatere druge dinamične predmete, boste verjetno morali uporabiti to možnost, ko povezujete sam program.

Skript različice lahko uporabite tudi za nadzor, katere simbole je treba dodati v tabelo dinamičnih simbolov, če jo podpira izhodni format. Oglejte si opis --version-skripta v @ ref {VERSION}.

-EB

Povežite velike-endijske objekte. To vpliva na privzeti izhodni format.

-EL

Povežite malo-endijske predmete. To vpliva na privzeti izhodni format.

-f

--oksialno ime

Pri ustvarjanju skupnega predmeta ELF nastavite notranje polje DT_AUXILIARY pod določenim imenom. To pove dinamičnemu povezovalniku, da se tabela simbolov skupnega predmeta uporabi kot pomožni filter v tabeli simbolov imena skupnega predmeta.

Če pozneje povežete program proti tem filtrirnim objektom, bo ob zagonu programa dinamični linker videli polje DT_AUXILIARY. Če dinamični linker reši vse simbole iz objekta filtra, bo najprej preveril, ali obstaja definicija v imenu skupnega predmeta. Če obstaja, bo namesto definicije v filtrirnem objektu uporabljen. Ime skupnega predmeta ne potrebuje. Tako se lahko ime skupnega predmeta uporabi za zagotovitev alternativne izvedbe določenih funkcij, morda za razhroščevanje ali za specifično delovanje naprave.

To možnost lahko določite več kot enkrat. DT_AUXILIARY vnosi bodo ustvarjeni v vrstnem redu, v katerem se pojavijo v ukazni vrstici.

-F ime

- ime filma

Pri ustvarjanju skupnega predmeta ELF nastavite notranje polje DT_FILTER pod določenim imenom. To pove dinamičnemu povezovalniku, da se tabela simbolov skupnega predmeta, ki se ustvarja, uporablja kot filter v tabeli simbolov imena skupnega predmeta.

Če pozneje povežete program proti tem filtrirnim objektom, bo ob zagonu programa dinamični povezovalec prikazal polje DT_FILTER. Dinamični linker bo rešil simbole glede na tabelo simbolov filtra kot običajno, vendar se bo dejansko povezala z definicijami, ki jih najdemo v imenu skupnega predmeta. Tako lahko uporabite filtrirni predmet, da izberete podmnožico simbolov, ki jih podaja ime objekta.

Nekateri starejši povezovalci so uporabili opcijo -F v celotni zbirki orodij za določanje formata datoteke datotek za datoteke vhodnih in izhodnih datotek. Povezovalec GNU v ta namen uporablja druge mehanizme: opcije -b , -format , -oformat , ukaz "TARGET" v skriptah povezav in spremenljivko okolja "GNUTARGET". Povezava GNU-ja bo ignorirala možnost -F , če ne ustvarite skupnega ELF objekta.

-fini ime

Pri ustvarjanju izvršljivega ali skupnega predmeta ELF pokličite NAME, ko je izvršilni ali skupni predmet razložen, tako da nastavite DT_FINI na naslov funkcije. Povezovalec privzeto uporablja funkcijo "_fini" kot funkcijo klica.

-g

Prezrta. Zagotovljena združljivost z drugimi orodji.

-G vrednost

--gpsize = vrednost

Nastavite največjo velikost predmetov, ki jih želite optimirati z registrom GP, do velikosti . To je smiselno le za oblike datotek objektov, kot je MIPS ECOFF, ki podpira postavljanje velikih in majhnih predmetov na različne dele. To se prezre za druge oblike zapisov objektov.

-H ime

-soname = ime

Pri ustvarjanju skupnega predmeta ELF nastavite notranje polje DT_SONAME pod določenim imenom. Ko je izvedljiva datoteka povezana s skupnim objektom, ki ima polje DT_SONAME, potem ko se izvrši izvršitveni program, bo dinamični linker poskušal naložiti skupni predmet, ki ga je določil polje DT_SONAME, namesto da uporabite ime datoteke, ki je dodeljeno linkerju.

-jaz

Izvedite inkrementalno povezavo (isto kot možnost -r ).

-Vneseno ime

Pri ustvarjanju izvedljivega ali skupnega predmeta ELF pokličite NAME, ko je naložen izvršilni ali skupni predmet, tako da nastavite DT_INIT na naslov funkcije. Povezovalec privzeto uporablja funkcijo »_init« kot funkcijo klica.

-l arhiv

--library = arhiv

Dodaj arhivsko arhivsko datoteko na seznam datotek, ki jih želite povezati. Ta možnost se lahko uporablja večkrat. ld bo poiskal svoj seznam poti za dogodke "libarchive.a" za vsak podan arhiv .

Na sistemih, ki podpirajo deljene knjižnice, lahko ld išče tudi knjižnice z razširitvami, ki niso ".a". Natančneje, v sistemih ELF in SunOS bo ld iskal imenik za knjižnico z razširitvijo ».so«, preden jo išče z razširitvijo ».a«. Konvencija razširitev ".so" označuje skupno knjižnico.

Povezovalec bo poiskal arhiv le enkrat, na mestu, kjer je naveden v ukazni vrstici. Če arhiv definira simbol, ki v določenem objektu ni bil definiran, ki se je pojavil pred arhivom v ukazni vrstici, bo linker vključil ustrezne datoteke iz arhiva. Vendar pa nedefinirani simbol v objektu, ki se bo pojavil kasneje v ukazni vrstici, ne bo povzročil, da bi povezovalec znova iskal arhiv.

Oglejte si - ( možnost za način, s katerim lahko linker večkrat pritisnete na arhive iskanja.

Isti arhiv lahko večkrat navedete v ukazni vrstici.

Ta vrsta arhivskega iskanja je standardna za linkers Unix. Če pa uporabljate ld onAIX, upoštevajte, da se razlikuje od obnašanja povezave AIX.

-L searchdir

--library-path = searchdir

Dodajte pot searchdir na seznam poti, ki jih bo ld iskala arhivske knjižnice in kontrolne skripte ld . To možnost lahko uporabite večkrat. Imeniki se iščejo v vrstnem redu, v katerem so navedene v ukazni vrstici. Imeniki, ki so podani v ukazni vrstici, se iščejo pred privzetimi imeniki. Vse možnosti -L veljajo za vse -l možnosti, ne glede na vrstni red, v katerem so prikazane možnosti.

Če se searchdir začne z "=", bo "=" zamenjana s predpono sysroot , določena pot, ko je konfiguriran linker.

Privzeti nabor iskanih poti (brez navedbe z -L ) je odvisen od načina uporabe načina emulacije ld , v nekaterih primerih tudi od tega, kako je bil konfiguriran.

Pot lahko prav tako določite v skriptni povezavi z ukazom "SEARCH_DIR". Imeniki, navedeni na ta način, se iščejo v trenutku, ko se v ukazni vrstici prikaže skriptni linker.

-m emulacija

Emulirajte povezovalec emulacije . Na voljo so lahko emulacije z možnostmi --verbose ali -V .

Če opcija -m ni uporabljena, se emulacija vzame iz spremenljivke okolja "LDEMULATION", če je to določeno.

V nasprotnem primeru je privzeta emulacija odvisna od tega, kako je bil konfiguriran linker.

-M

-print-zemljevid

Natisnite mapo povezav na standardni izhod. Mapa povezave vsebuje informacije o povezavi, vključno z naslednjim:

*

Kjer se objektne datoteke in simboli preslikajo v pomnilnik.

*

Kako so dodeljeni skupni simboli.

*

Vsi člani arhiva, vključeni v povezavo, z navedbo simbola, zaradi katerega je bil vložen arhivski član.

-n

- Nmagija

Izklopite poravnavo strani in označite izhod kot "NMAGIC", če je mogoče.

-N

- zmešan

Nastavite odseke besedila in podatkov za branje in pisanje. Prav tako ne poravnajte podatkovnega segmenta na strani in onemogočite povezovanje proti knjižnicam v skupni rabi. Če izhodni format podpira magične številke tipa Unix, označite izhod kot "OMAGIC".

- ne-omagična

Ta možnost negira večino vplivov opcije -N . Oddelek za besedilo nastavi samo za branje in prisili segment podatkov v poravnavo strani. Opomba - ta možnost ne omogoča povezave s knjižnicami v skupni rabi. Uporabi -Bodynamic za to.

-o izhod

--output = izhod

Uporabi izhod kot ime za program, ki ga proizvaja ld ; če ta možnost ni podana, se ime a.out privzeto uporabi. Ukaz skripta "OUTPUT" lahko tudi navede ime izhodne datoteke.

-O ravni

Če je nivo numerične vrednosti večje od nič, ld optimizira izhod. To lahko traja precej daljše in zato je verjetno le omogočeno le za končno binarno.

-q

- emit-relocs

Pustite odseke in vsebino preselitve v popolnoma povezane izvršilne liste. Te informacije so potrebne za analizo in orodja za objavo povezav, da bi lahko izvedli pravilne spremembe izvedljivih datotek. To ima za posledico večje izvedljive datoteke.

Ta možnost je trenutno podprta samo na platformah ELF.

-r

- previdno

Ustvari relocatable output --- tj, ustvari izhodno datoteko, ki lahko služi kot vhod v ld . To se pogosto imenuje delno povezovanje . Kot neželeni učinek, v okoljih, ki podpirajo standardne magične številke Unixa, ta možnost tudi nastavi magično številko izhodne datoteke na »OMAGIC«. Če ta možnost ni podana, se generira absolutna datoteka. Pri povezovanju programov C + + ta možnost ne bo rešila sklicev na konstruktorje; za to, uporabite -Ur .

Ko vhodna datoteka nima enake oblike kot izhodna datoteka, je delna povezava podprta le, če ta vhodna datoteka ne vsebuje selitev. Različne izhodne oblike imajo lahko dodatne omejitve; na primer nekatere oblike zapisa "a.out" ne podpirajo delne povezave z vhodnimi datotekami v drugih oblikah.

Ta možnost deluje enako kot -i .

-R ime datoteke

--just-symbols = ime datoteke

Preberite imena simbolov in njihove naslove iz imena datoteke , vendar jih ne preselite ali jih vključite v izhod. To omogoča, da se vaša izhodna datoteka simbolično nanaša na absolutne lokacije pomnilnika, določene v drugih programih. To možnost lahko uporabite več kot enkrat.

Za združljivost z drugimi linkerji ELF, če možnost -R sledi ime imenika in ne ime datoteke, se obravnava kot možnost -rpath .

-s

- vse ostalo

Iz izhodne datoteke izpustite vse podatke o simbolu.

-S

--strip-debug

Iz izhodne datoteke ne izpustite informacij o simbolu za razhroščevalce (vendar ne vseh simbolov).

-t

- trace

Natisnite imena vhodnih datotek, ko jih ld obdela.

-T scriptfile

--script = scriptfile

Uporabite skriptno datoteko kot povezovalni skript. Ta skript zamenja ld -jev privzet skriptni skript (namesto da bi ga dodal), zato mora ukazna datoteka določiti vse, kar je potrebno za opis izhodne datoteke. Če scriptfile v trenutnem imeniku ne obstaja, jo lddišče išče v imeniku, ki je določen v prejšnjih možnostih -L . Na voljo so več možnosti -T .

-u simbol

- navadno = simbol

Simbol za vnašanje v izhodno datoteko kot nedefiniran simbol. To lahko na primer sproži povezavo dodatnih modulov s standardnimi knjižnicami. -u se lahko ponovi z drugačnimi argumenti za vnos dodatnih nedefiniranih simbolov. Ta možnost je enaka ukazu "EXTERN" linker script.

-Ur

Za vse razen programov C + + je ta možnost enakovredna -r : generira relocatable output --- tj. Izhodno datoteko, ki lahko služi kot vhod v ld . Pri povezovanju programov C + + -Ur rešuje sklicevanje na konstruktorje, za razliko od -r . Ne uporablja se za uporabo -Ur v datotekah, ki so bile povezane z -Ur ; ko je zgrajena tabela konstruktorja, ni mogoče dodati. Uporabi -Ur samo za zadnjo delno povezavo in -r za ostale.

- Unique [= ODDELEK ]

Ustvari ločen izhodni odsek za vsak oddelek za vnos, ki se ujema z SECTION , ali če manjka dodaten argument SECTION , za vsak oddelek za vpis v sirote. Del sirot je eden, ki ni posebej omenjen v povezovalnem skriptu. To možnost lahko večkrat uporabite v ukazni vrstici; Preprečuje normalno združevanje vhodnih odsekov z istim imenom, prevladujoče dodelitve izhodnega odseka v povezovalnem skriptu.

-v

- različica

-V

Prikaže številko različice za ld . V opciji -V so naštete tudi podprte emulacije.

-x

-discard-vse

Izbrišite vse lokalne simbole.

-X

- lokalno prebivalstvo

Izbrišite vse začasne lokalne simbole. Za večino tarč so to vsi lokalni simboli, katerih imena se začnejo z L.

-y simbol

- trace-symbol = simbol

Natisnite ime vsake povezane datoteke, v kateri se pojavi simbol . To možnost lahko dobite večkrat. Na mnogih sistemih je treba pripraviti podčrtaj.

Ta možnost je uporabna, če imate v svoji povezavi nedefiniran simbol, vendar ne veste, od kod prihaja referenca.

- Pot

Dodaj pot do privzete poti za iskanje v knjižnici. Ta možnost obstaja za združljivost s Solarisom.

-z ključno besedo

Prepoznane ključne besede so "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" in "nocopyreloc ". Druge ključne besede se ne upoštevajo za združljivost s Solarisom. "initfirst" označuje predmet, ki ga je najprej treba inicializirati med izvajanjem pred drugimi predmeti. "interpose" označuje predmet, ki ga njegova tabela simbolov vnese pred vsemi simboli, temveč primarno izvedljivo. "loadfltr" označuje objekt, ki ga je treba obrav navati pri obdelavi njegovih filateljev ob zagonu. "nodefaultlib" označuje predmet, ki ga bo zanemarilo iskanje odvisnosti tega predmeta vse privzete poti za iskanje v knjižnici. "nodelete" označuje, da se objekt ne sme raztovarjati med izvajanjem. "nodlopen" označuje predmet, ki ni na voljo za "dlopen". "nodump" označuje, da predmeta ni mogoče damping z "dldump". "zdaj" označuje predmet z vezavo ne-lažnega izvajanja. Oznake "izvor" lahko vsebujejo $ ORIGIN. "defs" onemogoča nedefinirane simbole. "muldefs" omogoča več definicij. "combreloc" združuje več segmentov in jih razvrsti, da omogoči dinamičen predpomnilni pohod.

"nocombreloc" onemogoči združevanje več segmentov. "nocopyreloc" onemogoča izdelavo kopij.

- ( arhivi -)

- arhivi začetne skupine - end-group

Arhivi morajo biti seznam arhivskih datotek . Morda so izrecna imena datotek ali -l možnosti.

Navedene arhive se večkrat iščejo, dokler ne ustvarijo novih nedefiniranih referenc. Običajno se arhivu išče samo enkrat v vrstnem redu, ki je naveden v ukazni vrstici. Če je simbol v tem arhivu potreben za razrešitev nedefiniranega simbola, na katerega se nanaša predmet v arhivu, ki se kasneje pojavi v ukazni vrstici, povezovalec ne bi mogel rešiti te reference. Z združevanjem arhivov se vse večkrat iščejo, dokler niso odpravljene vse morebitne reference.

Uporaba te možnosti ima znatne stroške učinkovitosti. Najbolje je uporabiti le, če obstajajo neizogibna krožna sklicevanja med dvema ali več arhivi.

--accept-unknown-input-arch

--no-sprejme-neznano-vhod-lok

Povežete povezovalcu, da sprejme vhodne datoteke, katerih arhitekture ni mogoče prepoznati. Predpostavka je, da uporabnik ve, kaj počne in namerno želi povezati v te neznane vhodne datoteke. To je bilo privzeto obnašanje povezovalca pred izdajo 2.14. Privzeto obnašanje od izdaje 2.14 naprej je zavrnitev takšnih vhodnih datotek, zato je bila dodana opcija -accept-unknown-input-arch za obnovitev stara vedenja.

-spremenljiva ključna beseda

Ta možnost se ne upošteva za združljivost s SunOS-om .

-Bodynamic

- Ja

-call_shared

Povezava z dinamičnimi knjižnicami. To je smiselno le na platformah, za katere so podprti skupne knjižnice . Ta možnost je običajno privzeta na takšnih platformah. Različne različice te možnosti so združljive z različnimi sistemi. To možnost lahko večkrat uporabite v ukazni vrstici: vpliva na iskanje knjižnic za možnosti -l, ki sledijo temu.

- Skupina

Nastavite "DF_1_GROUP" zastavo v vnosu "DT_FLAGS_1" v dinamičnem delu. To povzroči, da linker za runtime obravnava lookups v tem objektu, njegove odvisnosti pa se izvajajo samo znotraj skupine. --no-nedoločeno je implicitno. Ta možnost je pomembna samo na platformah ELF, ki podpirajo deljene knjižnice .

-Bastično

-Dn

-non_shared

-statično

Ne povežite se proti deljenim knjižnicam. To je smiselno le na platformah, za katere so podprti skupne knjižnice. Različne različice te možnosti so združljive z različnimi sistemi. To možnost lahko večkrat uporabite v ukazni vrstici: vpliva na iskanje knjižnic za možnosti -l, ki sledijo temu.

-Bimbolično

Ko ustvarjate knjižnico v skupni rabi, vezate na globalne simbole z definicijo znotraj knjižnice v skupni rabi, če obstaja. Običajno je mogoče, da program, povezan z knjižnico v skupni rabi, preglasi definicijo znotraj knjižnice v skupni rabi. Ta možnost je pomembna le na ELFplatformah, ki podpirajo deljene knjižnice.

- preverite dele

- brez preverjanja

Zahteva, da linker ne preveri naslovov razdelkov po tem, ko so bili dodeljeni, da bi videli, ali se prekrivajo. Običajno bo povezovalec izvedel ta pregled, in če najde prekrivanja, bo ustvaril ustrezna sporočila o napakah. Povezovalec ne ve, in naredi dodatke za dele v prekrivanju. Privzeto vedenje je mogoče obnoviti z uporabo preklopnika ukazne vrstice - check-sections .

- cref

Izhodite navzkrižno referenčno tabelo. Če se generira datoteka mape povezav, se v mapno datoteko natisne navzkrižna referenčna tabela. V nasprotnem primeru se natisne na standardni izhod.

Oblika tabele je namerno preprosta, tako da jo je mogoče enostavno obdelati s skriptom, če je potrebno. Simboli so natisnjeni, razvrščeni po imenu. Za vsak simbol je podan seznam imen datotek. Če je simbol definiran, je prva navedena datoteka lokacija definicije. Preostale datoteke vsebujejo sklicevanja na simbol.

--no-določi-pogosto

Ta možnost zavira dodeljevanje naslovov skupnim simbolom. Enak učinek ima ukaz skripta "INHIBIT_COMMON_ALLOCATION".

Opcija -no-define-common omogoča ločitev odločitve o dodeljevanju naslovov skupnim simbolom od izbire vrste izhodne datoteke; v nasprotnem primeru nespremenljiva vrsta izpisa prisili dodeljevanje naslovov skupnim simbolom. Uporaba -no-define-common omogoča skupne simbole, na katere se sklicuje knjižnica v skupni rabi, ki jih je treba dodeliti samo v glavnem programu. S tem se odpravi neizkoriščeni podvojeni prostor v deljeni knjižnici in preprečuje morebitna zmeda pri reševanju napačnega dvojnika, če obstaja veliko dinamičnih modulov s specializiranimi iskalnimi potmi za ločljivost simbola za izvajanje.

--defsym simbol = izraz

Ustvarite globalni simbol v izhodni datoteki, ki vsebuje absolutni naslov, ki ga podaja izraz . To možnost lahko uporabite tolikokrat, kot je potrebno za določitev več simbolov v ukazni vrstici. Za izraz v tem kontekstu je podana omejena oblika aritmetike: lahko navedete šestnajstiško konstanto ali ime obstoječega simbola ali uporabite »+« in »-« za dodajanje ali odštevanje šestnajstiških konstant ali simbolov. Če potrebujete več izdelanih izrazov, razmislite o uporabi ukaznega jezika linkerja iz skripte. Opomba: med simbolom ne sme biti praznega prostora, znaka enaka ("` = = ") in izraza .

--demangle [= slog ]

- ne-demangle

Te možnosti nadzorujejo, ali naj razkrijejo imena simbolov v sporočilih o napakah in drugih izhodih. Ko je povezovalcu rečeno, da razkrije, poskuša predstaviti imena simbolov v berljivem načinu: trakovi vodijo podčrtaje, če jih uporablja format datoteke objektov, in pretvarja C ++ obrnjena imena simbolov v uporabniško berljiva imena. Različni prevajalniki imajo različne oblike manglinga. Izbirni argument za razkrivanje sloga lahko uporabite, da izberete ustrezen slog za prevajanje v vašem prevajalniku. Povezovalec bo privzeto razdelil, razen če je nastavljena spremenljivka okolja COLLECT_NO_DEMANGLE . Te možnosti se lahko uporabijo za preglasitev privzete nastavitve.

- datoteka z dinamično povezavo

Določite ime dinamičnega povezovalca. To je smiselno samo pri ustvarjanju dinamično povezanih izvedljivih ELF-jev. Privzeti dinamični linker je običajno pravilen; ne uporabljajte tega, če veste, kaj počnete.

--embedded-relocs

Ta možnost je smiselna samo, če povezujete vdelano PIC kodo MIPS, ki jo generira opcija -membedded-pic na prevajalko in sestavljavce GNU-ja. Vzrok povzroči, da linker ustvari tabelo, ki se lahko uporablja v času izvajanja, da preselijo vse podatke, ki so bili statično inicializirani na vrednosti kazalca. Za podrobnosti glejte kodo v testu / ld-empic.

- smrtna opozorila

Vsa opozorila obravnavajte kot napake .

--force-exe-suffix

Poskrbite, da ima izhodna datoteka dodatek .exe.

Če uspešno zgrajena popolnoma povezana izhodna datoteka nima pripono " .exe " ali " .dll ", ta možnost prisili povezovalca, da kopira izhodno datoteko v isto ime s pripono ".exe". Ta možnost je uporabna pri uporabi nestandardnih makrofilov Unixa na gostitelju operacijskega sistema Microsoft Windows, saj nekatere različice operacijskega sistema Windows ne bodo prikazale slike, razen če se ne konča s pripono ».exe«.

--no-gc-odseki

- gc-odseki

Omogočite zbiranje smeti neuporabljenih vhodnih odsekov. Ne upošteva se ciljev, ki ne podpirajo te možnosti. Ta možnost ni združljiva z -r , niti ni potrebna za dinamično povezovanje. Privzeto obnašanje (neuporabe te zbirke smeti ) je mogoče obnoviti tako, da v ukazni vrstici podate ukaze -no-gc .

- pomoč

Natisnite povzetek možnosti ukazne vrstice na standardnem izhodu in izstopu.

- pomoč za pomoč

Natisnite povzetek vseh ciljnih specifičnih možnosti na standardnem izhodu in izhodu.

-Map mapfile

Natisnite mapo povezav v datoteko mapfile . Glejte opis možnosti -M , zgoraj.

- ne hranite v spominu

ld se običajno optimira za hitrost pomnjenja s pomnilnikom s pomikanjem simbolnih tabel vhodnih datotek v pomnilnik. Ta možnost pove ld, da se namesto tega optimira za uporabo pomnilnika, tako da preberete tabele simbolov, kot je potrebno. To je morda potrebno, če ld izteče iz pomnilniškega prostora, medtem ko povežete veliko izvršljiv.

--no-nedoločeno

-z defs

Običajno pri ustvarjanju ne-simbolične knjižnice v skupni rabi so dovoljeni nedefinirani simboli, ki jih loči, da jih reši zagonski nalagalnik. Te možnosti onemogočajo nedefinirane simbole.

- z veliko opredelitvijo

-z muldefs

Običajno, ko je simbol večkrat določen, bo linker poročal o usodni napaki. Te možnosti omogočajo več definicij in uporabljena bo prva definicija.

- slabo-shlib-nedoločeno

Dovoli nedefinirane simbole v skupnih objektih, tudi če je nastavljen -no-undefined. Neto rezultat bo, da bodo nedoločeni simboli v običajnih objektih še vedno sprožili napako, vendar bodo nedefinirani simboli v skupnih objektih prezrti. Izvedba no_undefined naredi predpostavko, da se bo povezovalnik izvajanja zagozdil na nedefinirane simbole. Vendar obstaja vsaj en sistem (BeOS), kjer so nedefinirani simboli v skupnih knjižnicah normalni, saj jih jedro prilagodi ob času nalaganja, da izbere, katera funkcija je najprimernejša za trenutno arhitekturo. IE dinamično izbere ustrezno funkcijo memset. Očitno je običajno, da knjižnice v skupni rabi HPPA imajo nedefinirane simbole.

--no-nedoločena različica

Običajno, ko ima simbol nedefinirano različico, jo bo povezovalec zanemaril. Ta možnost onemogoča simboli z nedefinirano različico, namesto tega pa se izda usodna napaka.

- opozorilo-neusklajenost

Običajno bo ld dala napako, če poskusite povezati vhodne datoteke, ki so iz kakršnegakoli razloga neusklajene, morda zato, ker so bile zbrane za različne procesorje ali za različne koncepte. Ta možnost pove ld , da mora tiho dovoliti take morebitne napake. To možnost je treba uporabljati samo previdno, v primerih, ko ste naredili nekaj posebnih ukrepov, ki zagotavljajo, da so napake povezovalca neprimerne.

- ne-celota-arhiv

Izklopite učinek možnosti --whole-archive za naslednje arhivske datoteke.

- brezhibno-exec

Ohranite izvedljivo izhodno datoteko, kadar je še vedno uporabna. Običajno linker ne bo proizvedel izhodne datoteke, če bi med procesom povezave naletel na napake; izhod, ne da bi napisal izhodno datoteko, ko izda kakršno koli napako.

-nostdlib

V imeniški vrstici izrecno določite samo knjižnice knjižnic. Knjižnični imeniki, ki so določeni v povezavah skriptov (vključno s skripti povezav, ki so podani v ukazni vrstici), se prezrejo.

--format izhodnega formata

ld je lahko konfiguriran tako, da podpira več kot eno vrsto objektne datoteke. Če je vaš ld konfiguriran na ta način, lahko z opcijo -oformat določite binarni format za datoteko izhodnega objekta. Tudi kadar je ld konfiguriran za podporo alternativnih oblik objektov, tega običajno ni treba navajati, ker naj bo ld nastavljen tako, da bo kot privzeti izhodni format izdelal najbolj običajno obliko na vsakem računalniku. izhodni format je besedilni niz, ime določenega formata, ki ga podpirajo knjižnice BFD. (Lahko najdete seznam razpoložljivih binarnih formatov z objdump -i .) Ukaz skripta "OUTPUT_FORMAT" lahko določi tudi izhodni format, vendar jo ta možnost preglasi.

-magic

Ta možnost se zanemari za združljivost z Linuxom.

-Ki

Ta možnost se zanemari za združljivost SVR4.

-relax

Možnost s strojno odvisnimi učinki. Ta možnost je podprta samo na nekaj ciljev.

Na nekaterih platformah, možnost -relax opravlja globalne optimizacije, ki postanejo možne, ko se linker reši naslavljanje v programu, kot so sproščanje naslovnih načinov in sintetiziranje novih navodil v datoteki izhodnega objekta.

Na nekaterih platformah lahko ti svetovni optimizaciji povezanih časov onemogočajo simbolično odpravljanje izpraznjenega izvršnega programa. To velja za družino procesorjev Matsushita MN10200 in MN10300.

Na platformah, kjer to ni podprto, --relax je sprejet, vendar zanemarjen.

--retain-symbols-file filename

Zadržite samo simbole, navedene v datoteki datoteke , zavržete vse ostale. ime datoteke je preprosto ploska datoteka z eno ime simbola na vrstico. Ta možnost je še posebej uporabna v okoljih (kot je VxWorks), kjer se velika tabela simbolov nakopiči postopoma, s čimer se ohrani časovni pomnilnik.

--retain-symbols-datoteka ne zavrže nedefiniranih simbolov ali simbolov, potrebnih za preselitve.

V ukazni vrstici lahko določite samo -retain-symbols-file . Prevladuje -s in -S .

-Prath dir

Dodajte imenik v iskalno pot knjižnice izvajalnega časa. To se uporablja pri povezovanju ELFexecutable s predmeti v skupni rabi. Vsi argumenti -rpath so združeni in se prenesejo na povezovalnik izvajanja, ki jih uporablja za iskanje skupnih predmetov v času izvajanja. Možnost -rpath se uporablja tudi pri iskanju predmetov v skupni rabi, ki jih potrebujejo skupni objekti, ki so izrecno vključeni v povezavo; si oglejte opis možnosti -rpath-link . Če pri povezavi izvedljivega ELF- krmila ni uporabljen, se bo uporabljena vsebina spremenljivke okolja "LD_RUN_PATH", če je definirana.

Možnost -rpath se lahko uporablja tudi na SunOS. Privzeto je v SunOS-u linker od vseh možnosti -L, ki jih je dal, oblikoval popravek za iskanje med izvajanjem. Če je uporabljena možnost -rpath , se bo pot do iskanja v časovnem obdobju izvedla izključno z možnostmi -rpath , pri čemer se upoštevajo možnosti -L . To je lahko uporabno pri uporabi gcc-a, ki dodaja številne možnosti -L, ki so lahko na fiksnih datotečnih sistemihNFS.

Za združljivost z drugimi linkerji ELF, če možnost -R sledi ime imenika in ne ime datoteke, se obravnava kot možnost -rpath .

-rpath-link DIR

Če uporabljate ELF ali SunOS, lahko ena knjižnica v skupni rabi zahteva drugo. To se zgodi, če povezava »ld -shared« vključuje deljeno knjižnico kot eno od vhodnih datotek.

Ko povezovalec naleti na takšno odvisnost, ko delaš ne-deljeno, neprenosljivo povezavo, bo samodejno poskušal poiskati zahtevano knjižnico v skupni rabi in jo vključiti v povezavo, če ni izrecno vključena. V takem primeru možnost -rpath-link določa prvi niz imenikov za iskanje. Možnost -rpath-link lahko določi zaporedje imenika z določitvijo seznama imen, ločenih s kolonami, ali pa se večkrat pojavlja.

To možnost je treba uporabljati previdno, ker preglasi pot do iskanja, ki je bila morda težko zbrana v knjižnici v skupni rabi. V takem primeru je mogoče nenamerno uporabiti drugo pot za iskanje, kot bi to storil linker za runtime.

Povezovalec uporablja naslednje iskalne poti za iskanje potrebnih knjižnic v skupni rabi.

1.

Vsi imeniki, ki jih določijo možnosti -rpath-link .

2.

Vsi imeniki, ki jih določijo možnosti -rpath . Razlika med -rpath in -rpath-link je, da so imeniki, ki so podani v opciji -rpath , vključeni v izvedljivo in uporabljeni med izvajanjem, medtem ko je možnost -rpath-link veljavna le pri času povezave. Samo za avtohtonega povezovalca.

3.

V sistemu ELF, če možnosti -rpath in "rpath-link" niso bile uporabljene, poiščite vsebino spremenljivke okolja "LD_RUN_PATH". Samo za avtohtonega povezovalca.

4.

V sistemu SunOS, če možnost -rpath ni bila uporabljena, poiščite vse imenike, ki so podani z možnostmi -L .

5.

Za avtohtonega povezovalca vsebine spremenljivke okolja "LD_LIBRARY_PATH".

6.

Pri domačem povezovalniku ELF se v imeniku »DT_RUNPATH« ali »DT_RPATH« knjižnice v skupni rabi iščejo skupne knjižnice, ki jih potrebuje. Vpisi "DT_RPATH" se ne upoštevajo, če vnesete "DT_RUNPATH" vnosi.

7.

Privzeti imenik, navadno / lib in / usr / lib .

8.

Za izvorni linker v sistemu ELF, če obstaja datoteka /etc/ld.so.conf , se prikaže seznam imenikov v tej datoteki.

Če zahtevane knjižnice v skupni rabi ni mogoče najti, bo linker izdal opozorilo in nadaljeval s povezavo.

-elezijo

-Božljivo

Ustvarite knjižnico v skupni rabi. Trenutno je podprt samo na platformah ELF, XCOFF in SunOS. V SunOSu bo linker samodejno ustvaril knjižnico v skupni rabi, če ne uporabljate možnosti -e in v povezavi so nedefinirani simboli.

-sort-common

Ta možnost pove ld, da razvrsti skupne simbole glede na velikost, ko jih postavi v ustrezne izhodne dele. Najprej prikažite vse ene byte simbole, nato vse dva bajta, nato vse štiri bajta, nato pa vse drugo. To je, da preprečite vrzeli med simboli zaradi omejitev poravnave.

--split-by-file [ velikost ]

Podobno kot --split-by-reloc pa ustvari nov izhodni del za vsako vhodno datoteko, ko dosežete velikost . velikost je privzeta velikost 1, če ni navedena.

--split-po-reloc [ count ]

Tries ustvari dodatne dele v izhodni datoteki, tako da noben posamezni izhodni del v datoteki ne vsebuje več kot preseljevanja števila . To je uporabno pri ustvarjanju velikih preselljivih datotek za prenos v določena jedra v realnem času s formatom datoteke predmeta COFF; saj COFFcannot predstavlja več kot 65535 selitev v enem odseku. Upoštevajte, da to ne bo delovalo z oblikami objektnih datotek, ki ne podpirajo poljubnih delov. Povezovalec ne razdeli posameznih vhodnih odsekov za prerazporeditev, zato če en vhodni odsek vsebuje več kot preseljevanje števila, bo en izhodni odsek vseboval toliko premestitev. šteje privzeto vrednost na vrednost 32768.

- stati

Izračunajte in prikažite statistične podatke o delovanju linkerja, kot so čas izvajanja in uporaba pomnilnika.

- tradicionalni format

Za nekatere cilje je proizvodnja ld na določen način drugačna od proizvodnje nekaterih obstoječih linkerjev. To stikalo zahteva ld, da namesto tega uporabi tradicionalni format.

Na primer, na SunOSu, ld združuje podvojene vnose v tabelo nizov simbolov. To lahko zmanjša velikost izhodne datoteke s popolnimi informacijami o odpravljanju napak za več kot 30 odstotkov. Na žalost program SunOS "dbx" ne more prebrati nastalega programa ("gdb" nima težav). Preklopno-formatno stikalo pove ld, da ne združuje podvojenih vnosov.

- section section section = org

Poiščite razdelek v izhodni datoteki na absolutnem naslovu, ki ga poda org . To možnost lahko uporabite tolikokrat, kot je potrebno za iskanje več razdelkov v ukazni vrstici. org mora biti eno šestnajstiško celo število; za združljivost z drugimi povezovalci lahko izpustite vodilni 0x, ki je običajno povezana s šestnajstiškimi vrednostmi. Opomba: med razdelkom ne sme biti praznega prostora, znak ( = ``) in org .

-Tbss org

-Tdata org

-Torg org

Uporabite org kot začetni naslov za --- --- --- segment »bss«, »data« ali »text« izhodne datoteke. org mora biti eno šestnajstiško celo število; za združljivost z drugimi povezovalci lahko izpustite vodilni 0x, ki je običajno povezana s šestnajstiškimi vrednostmi.

-dll-verbose

-verbose

Prikažite številko različice za ld in navedite podprto emulacijo povezave. Prikazovanje, katere vhodne datoteke lahko in jih ni mogoče odpreti. Prikaz povezovalnega skripta, ki ga uporablja linker.

--version-script = version-scriptfile

Navedite ime skripta različice linkerja. To se navadno uporablja pri ustvarjanju knjižnic v skupni rabi, če želite podati dodatne informacije o heirarhiji različice za ustvarjeno knjižnico. Ta možnost je pomembna samo na platformah ELF, ki podpirajo deljene knjižnice.

--warn-common

Opozori, če je skupni simbol povezan z drugim skupnim simbolom ali z definicijo simbola. Povezovalci Unixa to omogočajo nekoliko nepravilno prakso, vendar povezovalci v nekaterih drugih operacijskih sistemih ne. Ta možnost vam omogoča iskanje morebitnih težav pri združevanju globalnih simbolov. Na žalost nekatere knjižnice C uporabljajo to prakso, zato boste morda prejeli nekaj opozoril o simbolih v knjižnicah in v svojih programih.

Obstajajo tri vrste globalnih simbolov, ki jih tukaj ilustrirajo primeri C:

int i = 1;

Definicija, ki gre v razdelku inicializiranih podatkov v izhodni datoteki.

extern int i;

Nedefinirana referenca, ki ne dodeljuje prostora. Za neko spremenljivko mora obstajati definicija ali skupni simbol.

int i;

Skupni simbol. Če obstajajo samo (en ali več) skupnih simbolov za spremenljivko, gre v neinicializirano podatkovno polje izhodne datoteke. Povezovalec združuje več skupnih simbolov za isto spremenljivko v en sam simbol. Če so v različnih velikostih, izbere največjo velikost. Povezovalec spremeni skupni simbol v deklaracijo, če obstaja definicija iste spremenljivke.

Možnost --warn-common lahko povzroči pet vrst opozoril. Vsako opozorilo je sestavljeno iz dveh vrstic: prvi opisuje simbol, s katerim se je pravkar srečal, in drugi opisuje prejšnji simbol, ki se srečuje z istim imenom. En ali oba simbola bo skupni simbol.

1.

Obrnitev skupnega simbola v referenco, ker že obstaja definicija simbola.

(
): opozorilo: običajno od »« prekliče po definiciji (): opozorilo: definirano tukaj

2.

Obrnitev skupnega simbola v referenco, ker se pojavlja poznejša definicija simbola. To je enako kot prejšnji primer, le da se simboli srečujejo v drugačnem vrstnem redu.

(
): opozorilo: definicija "" prevladujočega skupnega (
): opozorilo: pogosto je tukaj

3.

Združevanje skupnega simbola s prejšnjim istim skupnim simbolom.

(
): opozorilo: več pogostih »simbolov« (
): opozorilo: tukaj je prejšnja skupna

4.

Združevanje skupnega simbola s prejšnjim večjim skupnim simbolom.

(
): opozorilo: običajno od »« preglasi večja skupna datoteka (
): opozorilo: tukaj je večje skupno

5.

Združite skupni simbol s prejšnjim manjšim skupnim simbolom. To je enako kot prejšnji primer, le da se simboli srečujejo v drugačnem vrstnem redu.

(
): opozorilo: običajno od »« prevladuje manjša skupna datoteka (
): opozorilo: tukaj je manjše skupno

- opozorila-konstruktorji

Opozori, če se uporabljajo kateri koli globalni konstruktorji. To je uporabno le za nekaj oblik zapisa objektnih datotek. Za formate, kot so COFF ali ELF, povezovalec ne more zaznati uporabe globalnih konstruktorjev.

--warn-multiple-gp

Opozori, če je v izhodni datoteki potrebno več vrednosti globalnega kazalca. To je smiselno le za nekatere procesorje, kot je Alpha. Natančneje, nekateri procesorji v poseben oddelek postavljajo velike vrednosti konstant. Poseben register (globalni kazalec) kaže na sredino tega razdelka, tako da se lahko konstanti učinkovito naložijo prek načina relativnega naslavljanja osnovnega registra. Ker je zamik v relativnem načinu osnovnega registra fiksen in relativno majhen (npr. 16 bitov), ​​to omejuje največjo velikost konstantnega bazena. Tako je v velikih programih pogosto potrebno uporabiti več vrednosti globalnih kazalcev, da bi lahko obravnavali vse možne konstante. Ta možnost povzroči, da se opozorilo izda kadarkoli pride do tega primera.

- opozorilo enkrat

Samo enkrat opozarjamo na vsak nedefiniran simbol, namesto enkrat na modul, ki se nanaša nanjo.

- poravnavanje opozorila

Opozori, če je naslov izhodnega odseka spremenjen zaradi poravnave. Običajno bo poravnava nastavljena z vhodnim odsekom. Naslov bo spremenjen le, če ni izrecno naveden; to pomeni, če ukaz "SECTIONS" ne določa začetnega naslova za razdelek.

- cela arhiva

Za vsak arhiv, ki je naveden v ukazni vrstici po možnosti --whole-archive , vključite vsako datoteko v arhivu v povezavo in ne poiščite arhiva za zahtevane datoteke objektov. To se navadno uporablja za pretvorbo arhivske datoteke v knjižnico v skupni rabi, s čimer se vsak predmet vključi v knjižnico, ki se prikaže v skupni rabi. To možnost lahko uporabite več kot enkrat.

Dve beležki, ko uporabljate to možnost iz gcc: Najprej gcc ne ve za to možnost, zato morate uporabiti -Wl, -vse-arhiv . Drugič, ne pozabite uporabiti -Wl, -no-celega-arhiva po seznamu arhivov, ker bo gcc dodal svoj seznam arhivov v svojo povezavo in morda ne želite, da ta zastava vpliva tudi na te.

- znak za zavijanje

Za simbol uporabite funkcijo ovoja. Vsako nedefinirano sklicevanje na simbol bo razrešeno na "__ wrap_symbol". Vsako nedoločeno sklicevanje na "__real_symbol" bo razrešeno na simbol .

To lahko uporabite za zagotovitev ovitka za sistemsko funkcijo. Funkcijo ovoja je treba imenovati "__wrap_symbol". Če želi poklicati sistemsko funkcijo, mora poklicati »__ real_symbol«.

Tukaj je trivialen primer:

prazen * __wrap_malloc (int c) {printf ("klic z imenom% ld \ n", c); vrnitev __real_malloc (c); }

Če povezujete drugo kodo s to datoteko z uporabo --wrap malloc , bodo vsi klici na »malloc« namesto tega klicali funkcijo »__wrap_malloc«. Klic na "__real_malloc" v "__wrap_malloc" bo poklical dejansko funkcijo "malloc".

Morda boste želeli zagotoviti funkcijo »__real_malloc«, tako da bodo povezave brez možnosti - wrap uspele. Če to naredite, ne bi smeli dati definicije »__ real_malloc« v isti datoteki kot »__wrap_malloc«; če to storite, lahko umaknjenec razreši klic, preden linker lahko obrne na "malloc".

- novosti-novosti

--dizable-new-dtags

Ta linker lahko v ELF ustvari nove dinamične oznake. Toda starejši sistemi ELF jih morda ne bodo razumeli. Če podate --enable-new-dtags , bodo dinamične oznake ustvarjene po potrebi. Če podate --disable-new-dtags , nove dinamične oznake ne bodo ustvarjene. Privzeto nove dinamične oznake niso ustvarjene. Upoštevajte, da so te možnosti na voljo samo za sisteme ELF.

Povezovalec i386 PE podpira možnost -shared , ki povzroči, da je izhod dinamično povezana knjižnica (DLL) namesto običajnega izvršljivega. Ko uporabite to možnost, morate ime »* .dll« navesti. Poleg tega linker v celoti podpira standardne datoteke "* .def", ki jih je mogoče določiti v ukazni vrstici linker, kot je predmetna datoteka (dejansko bi morala biti pred arhivi, iz katerih izvozi simbole, da bi se prepričali, tako kot običajna datoteka s predmeti).

Poleg možnosti, ki so skupne vsem ciljem, povezava i386 PE podpira dodatne možnosti ukazne vrstice, ki so specifične za cilj i386 PE. Možnosti, ki sprejmejo vrednosti, so lahko ločene od njihovih vrednosti s presledkom ali enako znako.

--add-stdcall-vzdevek

Če je podano, bodo simboli s stdcall končnico (@ nn ) izvoženi kot-in tudi s pripono.

- datoteko z bazo podatkov

Uporabite datoteko kot ime datoteke, v kateri želite shraniti osnovne naslove vseh selitev, potrebnih za ustvarjanje DLL- jev z dlltool - om .

- dll

Ustvarite DLL namesto rednega izvršljivega. V danem ".def" datoteki lahko tudi uporabite -elite ali navedite "LIBRARY".

--enable-stdcall-fixup

--disable-stdcall-fixup

Če povezava najde simbol, ki ga ne more rešiti, bo poskušal narediti `` fuzzy linking '', tako da išče drug definiran simbol, ki se razlikuje le v obliki imena simbola (cdecl vs stdcall) in bo odpravil ta simbol s povezovanjem na tekmo. Na primer, nedefiniran simbol "_foo" je lahko povezan s funkcijo "_foo @ 12" ali pa je lahko z nedefiniranim simbolom "_bar @ 16" povezana funkcija "_bar". Ko povezovalec to naredi, natisne opozorilo, ker običajno ni bilo mogoče povezati, včasih pa je treba to funkcijo uporabiti za uvoz knjižnic, ustvarjenih iz DLL tretjih oseb. Če podate --enable-stdcall-fixup , je ta funkcija v celoti omogočena in opozorila niso natisnjena. Če podate --disable-stdcall-fixup , je ta funkcija onemogočena in takšna neskladja se štejejo za napake.

- izvoz-vsi simboli

Če je podan, bodo DLL izvozili vse globalne simbole v objektih, uporabljenih za izdelavo DLL-ja. Upoštevajte, da je to privzeto, če drugače ne bi bilo nobenih izvoženih simbolov. Če so simboli izrecno izvoženi z datotekami DEF ali implicitno izvoženi prek atributov funkcij, privzeto ne bo izvoziti ničesar drugega, razen če je ta možnost dana. Upoštevajte, da simboli "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" in "impure_ptr" ne bodo samodejno izvoženi. Tudi simboli, uvoženi iz drugih DLL-jev, se ne bodo ponovno izvoženi, niti simboli, ki določajo notranjo postavitev DLL, kot so tisti, ki se začnejo z "_head_" ali končajo z "_iname". Poleg tega se ne bodo izvozili nobeni simboli iz "libgcc", "libstd ++", "libmingw32" ali "crtX.o". Simboli, katerih imena se začnejo z "__rtti_" ali "__builtin_", ne bodo izvoženi, da bi pomagali pri DLL-jih C ++. Končno, obstaja obsežen seznam cygwin-zasebnih simbolov, ki se ne izvažajo (očitno je, da to velja pri izdelavi DLL-jev za cilje cygwin-a).

Ti cygwin-izključeni so: "_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" "in" okolju ".

- simbol simbola izključevanja , simbol , ...

Določi seznam simbolov, ki jih ne smemo samodejno izvoziti. Imena simbolov so lahko razmejene z vejicami ali dvopičjem.

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

Določa seznam arhivskih knjižnic, iz katerih simboli ne bi smeli biti samodejno izvoženi. Imena knjižnic se lahko razmejujejo z vejicami ali dvopičjem. Določanje "-exclude-libs ALL" izključuje simbole v vseh arhivskih knjižnicah iz samodejnega izvoza. Simboli, ki so izrecno navedeni v datoteki .def, se še vedno izvažajo, ne glede na to možnost.

- poravnava datoteke

Določite poravnavo datoteke. Odseki v datoteki se vedno začnejo s premiki datotek, ki so večkratnik te številke. Ta privzeta vrednost je 512.

- rezervna rezerva

- rezervna rezerva , obvezna

Določite količino pomnilnika, ki ga želite rezervirati (in neobvezno storiti), ki bo uporabljen kot kup za ta program. Privzeto je rezervirana 1Mb, dodeljena je 4K.

- osnovna vrednost slike

Uporabite vrednost kot osnovni naslov vašega programa ali dll. To je najmanjša lokacija pomnilnika, ki bo uporabljena, ko bo naložen vaš program ali dll. Da bi zmanjšali potrebo po preselitvi in ​​izboljšanju učinkovitosti vaših DLL, bi morali imeti vsak svoj edinstven osnovni naslov in ne prekrivati ​​drugih DLL-jev. Privzeta vrednost je 0x400000 za izvedljive datoteke in 0x10000000 za DLL.

-kill-at

Če je podano, bodo pred izvozom stidne nastavitve (@ nn ) odstranjene iz simbolov.

--major-slika- vrednost verzija

Nastavi glavno število "slikovne različice". Privzeto je 1.

--major-os-verzija vrednost

Nastavi glavno število različice `` os ''. Privzeta vrednost je 4.

-major-podsistem- vrednost različice

Nastavi glavno število "podsistemske različice". Privzeta vrednost je 4.

- vrednost pomnilniške verzije slike

Nastavi manjše število "slikovne različice". Privzeto je 0.

- vrednost min-os-verzija

Nastavi manjše število različice `` os ''. Privzeto je 0.

-minor-podsistem- vrednost različice

Nastavi manjše število "podsistemov". Privzeto je 0.

- fileoutout-def

Povezovalec bo ustvaril datoteko datotek, ki bo vsebovala datoteko DEF, ki ustreza DLL, ki jo povzroči linker. Datoteko DEF (ki jo je treba imenovati ».def«) se lahko uporabi za ustvarjanje uvozne knjižnice z »dlltool« ali pa se lahko uporabi kot sklicevanje na samodejno ali implicitno izvožene simbole.

--out-implib datoteka

Povezovalec bo ustvaril datoteko z datoteko, ki bo vsebovala uvozni lib, ki ustreza DLL, ki ga ustvarja linker. Ta uvozni lib (ki ga je treba imenovati »* .dll.a« ali »* .a« lahko uporabite za povezavo strank z ustvarjeno DLL, kar pomeni, da lahko preskočite ločen korak izdelave knjižnice uvoza »dlltool«.

--enable-auto-image-base

Samodejno izberi slikovno bazo za DLL, razen če je določena s pomočjo »-image-base« argumenta. Z uporabo razprševanja, ustvarjenega iz dllname, za ustvarjanje edinstvene podobe slik za vsako DLL, se izognejo trčenja v pomnilniku in premestitve, ki lahko zavlečejo izvajanje programa.

--dizable-auto-image-base

Ne ustvarite samodejno slikovne baze. Če ni uporabniške podobe slike ("-image-base"), uporabite privzeto platformo.

string -dll-search-prefix string

Ko dinamično povežete na dll brez knjižnice uvoza, poiščite » .dll« v prednostju »lib .dll«. To vedenje omogoča enostavno razlikovanje med DLL-jemi, zgrajenimi za različne podplatforme: native, cygwin, uwin, pw itd. Na primer, cygwin DLL-ji navadno uporabljajo "-dll-search-prefix = cyg".

--enable-auto-import

Izvedite prefinjeno povezavo »_symbol« na »__imp__symbol« za uvoz DATA iz DLL-ov in ustvarite potrebne simbole za izdelavo uvoznih knjižnic s tistimi podatki DATAexports. To bo na splošno "samo delo" --- včasih boste morda videli to sporočilo:

"spremenljivka" "ni mogoče samodejno uvažati. Prosimo, da za podrobnosti preberete dokumentacijo za" --enable-auto-import ".

To sporočilo se pojavi, ko neki (pod) izraz doseže naslov, ki ga navede vsota dveh konstant (tabele uvozov Win32 dovoljujejo le eni). Primeri, ko se to lahko zgodi, vključujejo dostop do članskih polj strukturnih spremenljivk, uvoženih iz DLL-a, kot tudi z uporabo stalnega indeksa v spremenljivko matrike, uvoženo iz DLL-ja. Vsaka spremenljivka več besed (nizi, strukture, dolge dolgo itd.) Lahko sproži to napako. Vendar pa bo, ne glede na točno vrsto podatkov spremenjene izvozne spremenljivke, ld vedno zaznal, izdal opozorilo in zapustil.

Te težave je mogoče rešiti na več načinov, ne glede na vrsto podatkov izvožene spremenljivke:

Eden od načinov je, da uporabite --enable-runtime-pseudo-reloc switch. To zapusti nalogo prilagajanja referenc v kodi vašega odjemalca za okolje izvajanja, zato ta metoda deluje le, če je ta funkcija podprta s časom delovanja.

Druga rešitev je prisiliti eno od "konstant", da je spremenljivka, ki je v času prevajanja neznana in ne optimizirana. Za nizi obstajata dve možnosti: a) indeksira (polje matrike) spremenljivko ali b) naredi indeks "konstantni" spremenljivko. Tako:

extern tipa extern_array []; extern_array [1] -> {hlapljiva vrsta * t = extern_array; t [1]}

ali

extern tipa extern_array []; extern_array [1] -> {hlapljiv int int = 1; extern_array [t]}

Za strukture (in večino drugih vrst večvrstnih podatkov) je edina možnost, da spremenite strukturo (ali dolge dolgo ali ...):

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

ali

zunanja dolga dolga extern_ll; extern_ll -> {hlapljiva dolga dolga * local_ll = & extern_ll; * local_ll}

Tretji način reševanja te težave je opustiti "samodejno uvoz" za simbol, ki krši pravila, in ga označite z "__declspec (dllimport)". Vendar je v praksi, ki zahteva uporabo #defines časa za preslikavo, da se prikaže, ali gradite DLL, zgradite kodo odjemalca, ki bo povezana z DLL, ali zgolj zgraditi / povezati s statično knjižnico. Pri izbiri med različnimi metodami reševanja problema z neposrednim naslovom s konstantnim izravnavo bi morali razmisliti o tipični uporabi v realnem svetu:

Izvirnik:

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

Rešitev 1:

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

Rešitev 2:

--foo.h / * Opomba: predpostavlja se samodejni izvoz (ni __declspec (dllexport)) * / #if (definiran (_WIN32) || definiran (__ CYGWIN__)) && \! (opredeljen (FOO_BUILD_DLL) || definiran (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #defini FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c #ključi "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Četrti način, da se izognemo tej težavi, je, da svojo knjižnico znova kodira za uporabo funkcionalnega vmesnika namesto podatkovnega vmesnika za spremenljive spremenljivke (npr. Funkcije set_foo () in get_foo () ).

--dizable-auto-import

Ne poskušajte narediti sophisticalted povezavo "_symbol" na "__imp__symbol" za DATAimports iz DLL-jev.

- časovno-časovno-časovno-pseudo-reloc

Če vaša koda vsebuje izraze, opisane v razdelku --enable-auto-import, to je DATAimports iz DLL-a z ničelnim offsetom, bo to stikalo ustvarilo vektor "izvajalskih psevdo preselij", ki ga lahko uporablja okolje za izvajanje, da prilagodi reference na takšne podatke v kodi stranke.

--disobit-runtime-pseudo-reloc

Ne ustvarjajte psevdo preseljevanja za uvoz, ki ni nič nič oddaljena, iz DLL-jev. To je privzeto.

--enable-extra-pe-debug

Prikaži dodatne informacije o odpravi napak, povezane s simbolom samodejnega uvoza.

- poravnava s segmentom

Nastavi poravnavo odseka. Sekcije v pomnilniku se vedno začnejo z naslovi, ki so večkratnik tega števila. Privzeta vrednost je 0x1000.

- rezervna rezerva

- rezervna rezerva , zaveza

Določite količino pomnilnika, ki ga želite rezervirati (in neobvezno storiti), ki bo uporabljen kot sklad za ta program. Privzeto je rezervirana 2Mb, dodeljena je 4K.

- sistem, ki

- sistem, ki : glavni

- sistem, ki : glavni . manjša

Določa podsistem, pod katerim bo vaš program izvedel. Pravne vrednote, za katere so "native", "windows", "console" in "posix". Podobno lahko nastavite tudi različico podsistema.

Pomembno: Uporabite ukaz man ( % man ), da vidite, kako se na vašem računalniku uporablja ukaz.