Linux / Unix Command: Id

NIMI

ld - LD kasutamine , GNU linker

SÜNOPSIS

ld [ valikud ] objfile ...

KIRJELDUS

ld ühendab mitu objekti ja arhiivifaile, teisaldab nende andmed ja seostab sümbolite viiteid. Tavaliselt on viimane samm programmi koostamisel käivitada ld .

ld aktsepteerib Linker Command Language'i faile, mis on kirjutatud AT & T Link Editor-i käskluse keele süntaksis, et anda selgesõnaline ja täielik kontroll seostamisprotsessi üle.

Selle inimese lehel ei kirjeldata käsu keelt; Vaadake ld- kirje infos või käsu ld: GNU linkerit, et saada täielikku teavet käskluskeelte ja teiste GNU- linkeri aspektide kohta.

See ld versioon kasutab objektifailide toimimiseks üldkasutatavaid BFD-i teegiruume. See võimaldab ld lugeda, kombineerida ja kirjutada objekti faile paljudes eri vormingutes - näiteks COFF või "a.out". Olemasoleva objektifaili loomiseks võib olla ühendatud erinevad vormingud.

Peale selle paindlikkuse, on GNU-linker kasulikum kui teised linkerid diagnostilise teabe pakkumisel. Paljud linkerid loobuvad täitmisest kohe pärast vea tekkimist; Kui see on võimalik, jätkab ld käivitamist, mis võimaldab teil tuvastada teisi vigu (või mõnel juhul saada väljundfaili, hoolimata veast).

GNU linker ld on mõeldud laias valikus olukordade katmiseks ja olema võimalikult sarnane teiste linkeritega. Selle tulemusena on teil palju valikuid oma käitumise kontrollimiseks.

VÕIMALUSED

Linker toetab paljusid käsurea valikuid , kuid tegelikul praktikas kasutatakse neid mõnes konkreetses kontekstis. Näiteks sagedane ld kasutamine on standardsete Unixi objektifailide ühendamine standardse toetatava Unix-süsteemiga . Sellises süsteemis faili "hello.o" linkimiseks:

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

See ütleb, et ld toodab faili nimega väljund, kuna fail "/lib/crt0.o" on linkitud "hello.o" ja raamatukogu "libc.a", mis pärinevad standardsete otsingukataloogidest. (Vt arutelu allpool oleva variandi kohta.)

Mõned käsurea variandid ld-le võidakse määrata käsurea mis tahes punktis. Kuid failidele viitavate valikute (nt -l või -T) korral on faili lugemine kohas, kus valik ilmub käsureale võrreldes objektifailide ja muude failivormingutega. Muutuva argumendiga mitteseotud failide valikute kordamine ei oma täiendavat mõju või tühistab selle võimaluse eelnevaid sündmusi (need, mis on sellel käsuril vasakul). Allpool toodud kirjeldustes on toodud võimalused, mis võivad olla oluliselt määratletud rohkem kui üks kord.

Mittevalikunäidised on objektifailid või arhiivid, mida tuleb omavahel ühendada. Nad võivad käsurea võtmeid järgida, eelistada või segada, välja arvatud asjaolu, et optsiooni ja selle argumendi vahel ei saa asetada objektifailide argumenti.

Tavaliselt kasutatakse linkerit vähemalt ühe objektifailiga, kuid saate määrata -l , -R ja skriptikäskude keele abil ka teisi binaarse sisestusfailide vorme. Kui ühtegi binaarse sisendfaili üldse ei ole määratud, ei toeta linker väljundit ega anna välja sisendfaili sisestust .

Kui linker ei suuda ära tunda objektifaili vormingut, eeldatakse, et see on linker skript. Sel viisil määratud skript suurendab lingiks kasutatud peamist linkeri skripti (kas vaikimisi linker-skript või -T abil määratud). See funktsioon võimaldab linkeril seostada faili, mis näib olevat objekt või arhiiv, kuid tegelikult määrab ainult mõned sümboliväärtused või kasutab teiste objektide laadimiseks "INPUT" või "GROUP". Pange tähele, et skripti täpsustamine sellisel viisil suurendab ainult peamise linkeri skripti; kasutage -T valikut, et asendada vaikimisi linker skript täielikult.

Valikute puhul, mille nimed on ühe tähega, peavad valikulised argumendid järgima valikukirja ilma tühiku tühimitesse sisestamata või esitama eraldi argumentidega kohe, järgides nende jaoks vajalikku valikut.

Valikute puhul, mille nimed on mitu tähte, võib variandi nimele eelneda üks või kaks märki; Näiteks -traise-sümbol ja -trace-sümbol on samaväärsed. Märkus - selle reegli puhul on üks erand. Mitme kirja valikud, mis algavad väiketähtedega "o", võivad eelneda ainult kahe kriipsuga. See on segaduse vähendamine -o- valikuga. Näiteks -omagiline seab väljundfaili nime maagiaks, samal ajal kui --omagic määrab väljundis NMAGIC-lipu.

Mitme kirjaga optsioonide argumendid tuleb kas võrduvast märkist eraldada valikuvõimalusega või anda eraldi argumendid kohe pärast seda, mis neid nõuab. Näiteks - trajektoori sümbol foo ja --trace-symbol = foo on samaväärsed. Mitme kirja valikute nimede unikaalsed lühendid on aktsepteeritavad.

Märkus. Kui linkerit kasutatakse kaudselt, kasutades kompilaatori draiverit (nt gcc ), siis peaksid kõik linkeri käsureavõtmed olema eelistatud -Wl (või mis tahes konkreetse kompilaatori draiveri jaoks sobilik), näiteks:

gcc -Wl, - startgroup foo.o bar.o -Wl, - lõppgrupp

See on oluline, sest muidu kompileerija draiveri programm võib linkerite valikut vaikimisi maha jätta, mille tagajärjeks on halb link.

Siin on GNU linker aktsepteeritud üldiste käsurea lülitite tabel:

- märksõna

Seda võimalust toetab HP / UX ühilduvus. Märksõna argument peab olema üks stringide arhiivist , jagatud või vaikimisi . -archive on funktsionaalselt samaväärne -Bstatic'iga ja kaks muud märksõna on funktsionaalselt samaväärsed -Bdynamic'iga . Seda võimalust võib kasutada mitmel korral.

- arhitektuur

- arhitektuur = arhitektuur

Ld praeguses versioonis on see valik kasulik ainult Intel 960 arhitektuuride perekonnale. Selles ld- konfiguratsioonis määrab arhitektuuri argument kindlaks 960 perekonna konkreetse arhitektuuri, mis võimaldab mõningaid kaitsemeetmeid ja muutes arhiivi-raamatukogu otsingutee.

Ld edaspidised väljaanded võivad toetada sarnaseid funktsioone teiste arhitektuuriperete jaoks.

-b sisendformaat

--format = sisendformaat

ld võib olla konfigureeritud toetama rohkem kui ühte tüüpi objektifaili. Kui teie ld on sellisel viisil konfigureeritud, saate kasutada -b valikut määrata käsureal seda võimalust järgides sisestatud objektifailide kahendformaati. Isegi kui ld on seadistatud toetama alternatiivseid objektivorminguid, ei pea seda tavaliselt määrama, sest ld peaks olema konfigureeritud eeldama, et vaikimisi sisestatud vorming on kõige tavalisem formaat igas masinas. sisend-formaat on tekstistring, BFD-i raamatukogude poolt toetatud konkreetse vormingu nimi. (Võimalik on loetleda kättesaadavaid binaarseid vorminguid koos objdump-i-ga ).

Võite soovida seda võimalust kasutada, kui ühendate faile ebatavaliselt kahendformaadis. Võite kasutada ka -b, et vorminguid vahetada (eri formaatide objektifailide ühendamisel), sisestades -b sisendformaati enne konkreetses vormingus objektifailide rühma.

Vaikeformaat võetakse keskkonnamuutujast "GNUTARGET".

Võite ka sisendvormingut skriptist määrata, kasutades käsku "TARGET";

-c MRI-käsu fail

- mri-script = MRI-käsu fail

Ühildub MRI poolt loodud linkeritega, ld aktsepteerib GNU ld-dokumendi jaotises MRI ühilduvate skriptide failide jaotises kirjeldatud alternatiivse, piiratud käskluse keelde kirjutatud skripti faile. Tutvuge MRI skriptifailidega valikuga -c ; kasutage -T valikut, et käivitada linker-skripte, mis on kirjutatud üldistes ld- skriptikeeltes. Kui MRI-cmdfile puudub, ld otsib seda kataloogides, mis on määratud ükskõik millise -L- valiku abil.

-d

-dc

-dp

Need kolm võimalust on võrdsed; mitmest vormist toetatakse muude linkeritega ühilduvuse jaoks. Nad määravad ruumi ühistele sümbolitele isegi siis, kui on ära näidatud ümberpaigutatav väljundfail (koos -r-ga ). Skriptikäsk "FORCE_COMMON_ALLOCATION" omab sama mõju.

- sisenemine

--entry = sissekanne

Kasutage sisestust kui selget sümbolit oma programmi käivitamise asemel, mitte vaikimisi sisestamise punkti. Kui sümbolit ei nimetata sisestatuks , püüab linker sisestada numbrit ja kasutada seda sisenemisaadressina (seda numbrit tõlgendatakse aluses 10, võite kasutada baasi 16 juhtivat 0x või juhtivat 0 aluse 8 puhul).

-E

- Eksport dünaamiline

Dünaamiliselt seotud käivitatava faili loomisel lisage dünaamiliste sümbolite tabelile kõik sümbolid. Dünaamilise sümbolite tabel on sümbolite komplekt, mis on dünaamilistest objektidest nähtaval ajal töötamise ajal.

Kui te seda võimalust ei kasuta, sisaldab dünaamilise sümbol tabel ainult neid sümboleid, millele viitab mõni lingitud mõni dünaamiline objekt.

Kui kasutate "dlopen" dünaamilise objekti laadimiseks, mis peab viitama programmi määratletud sümbolitele, mitte mõnele muule dünaamilisele objektile, siis peate selle programmi seostamisel tõenäoliselt kasutama.

Samuti saate versiooni skripti kasutada, et kontrollida, milliseid sümboleid tuleks dünaamilise sümbol tabelisse lisada, kui väljundvorming seda toetab. Vaadake -versioon-skripti kirjeldust @ ref {VERSION}.

-EB

Link suurte endi objektid. See mõjutab vaikimisi väljundvormingut.

-EL

Link väikese endi objekte. See mõjutab vaikimisi väljundvormingut.

-f

- sõnaselge nimi

ELF-i jagatud objekti loomisel seadke sisemise DT_AUXILIARY välja määratud nimele. See annab dünaamilisele linkerile teada, et ühiskasutatava objekti sümbol tabelit tuleks kasutada jagatud objekti nime sümbolite tabelina abifilterina.

Kui hiljem linkite programmi selle filtriobjekti vastu, siis näeb dünaamiline linker programmi käivitamisel välja DT_AUXILIARY. Kui dünaamiline linker lahendab filtriobjektist kõik sümbolid, kontrollib see esmalt, kas jagatud objekti nimes on määratlus. Kui see on olemas, kasutatakse seda filtriobjekti määratluse asemel. Jagatud objekti nimi ei pea olema olemas. Seega saab jagatud objekti nime kasutada teatavate funktsioonide alternatiivse teostamise võimaldamiseks, ehk siis silumiseks või masina spetsiifiliste toimivuste jaoks.

Seda võimalust võib määrata rohkem kui üks kord. DT_AUXILIARY sissekanded luuakse järjekorras, milles need kuvatakse käsureal.

-F nimi

--filtri nimi

ELF-i jagatud objekti loomisel seadke sisemise DT_FILTERi väljale määratud nimi. See ütleb dünaamilise linkerile, et jagatava objekti sümbol tabelit tuleks kasutada jagatud objekti nime sümbolite tabelina filtritena.

Kui hiljem linkite programmi selle filtriobjekti vastu, siis näeb dünaamiline linker programmi käivitamisel välja DT_FILTER. Dünaamiline linker lahendab sümbolid vastavalt filtriobjekti sümbolite tabelile nagu tavaliselt, kuid see viitab tegelikult jagatud objekti nimes olevatele määratlustele. Seega saab filtriobjekti kasutada objekti nimega pakutavate sümbolite alamhulga valimiseks.

Mõned vanemad linkerid kasutasid -F- valikut kompileeriva tööriistariba kujul objektifailide vormingu määratlemiseks nii sisendi kui ka väljundi objektifailide jaoks. Sellel eesmärgil kasutab GNU-linker teisi mehhanisme: linke skriptidena kasutatavad -b , --format , --oformat valikud, käsk TARGET ja keskkonna muutuja GNUTARGET. GNU linker ignoreerib -F valikut, kui ei loo ELF-i jagatud objekti.

-fini nimi

ELF käivitatava või jagatud objekti loomisel helistage NAME, kui käivitatava või jagatud objekti laaditakse, seadistades DT_FINI funktsiooni aadressile. Linker kasutab vaikimisi funktsiooni helistamiseks "_fini".

-g

Ignoreeritakse. Juhul kui see on ühilduv teiste tööriistadega.

-G väärtus

--gpsize = väärtus

Seadke optimaalsete objektide suurim suurus, kasutades GP-registrit suuruse järgi . See on mõttekas ainult objektide failivormingute jaoks, näiteks MIPS ECOFF, mis toetab suurte ja väikeste objektide paigutamist eri sektsioonidesse. Seda ignoreeritakse muude objektide failivormingute puhul.

-n nimi

-soname = nimi

ELF-i jagatud objekti loomisel seadke sisemise DT_SONAME-i väljale määratud nimi. Kui käivitatav fail on ühendatud jagatud objektiga, millel on DT_SONAME väli, siis käivitatava käivitatava faili käivitamisel üritab dünaamiline linker koondada jagatud objekti, mis on määratud väljale DT_SONAME, ja mitte linkeri jaoks antud faili nime kasutades.

-i

Tehke täiendav link (sama kui variant -r ).

-nimi nimi

ELF käivitatava või jagatud objekti loomisel helistage NAME, kui käivitatav või jagatud objekt on laaditud, seades DT_INIT funktsiooni aadressile. Vaikimisi kasutab linker helistamiseks funktsiooni "_init".

-l arhiiv

--library = arhiiv

Arhiivifailide arhiivi lisamine seotud failide loendisse. Seda võimalust võib kasutada mitmel korral. ld otsib iga loetud arhiivi jaoks libarchive.a juhtumite loendit.

Ühisraamatukogude toetavate süsteemide puhul võib ld otsida ka muude kui ".a" laiendustega raamatukogusid. Täpsemalt, ELF-i ja SunOS-süsteemide puhul otsib ld kataloogi ".so" laiendusega raamatukogus, enne kui otsitakse ".a" laiendiga üks. Kokkuleppel näitab laiend ".so" jagatud teeki.

Linker otsib arhiivi ainult üks kord kohas, kus see on käsureal määratud. Kui arhiiv määratleb sümboli, mis oli mõnes objektis määratlemata, mis ilmnes käsurea alguses arhiivis, sisaldab linker ka arhiivist sobivat faili. Kuid hiljem käsureal ilmuvas objektis määratlemata sümbol ei põhjusta linkerit arhiivi uuesti otsimiseks.

Vt - ( variant, kuidas sundida linkerit arhiivide otsimiseks mitu korda.

Võite korraga sama arhiivi mitu korda kirjutada käsureale.

Seda tüüpi arhiivi otsimine on Unixi linkerite jaoks standardne. Siiski, kui kasutate lD onAIX-i, pidage meeles, et see erineb AIX-i linkeri käitumisest.

-L searchdir

--library-path = searchdir

Lisa path searchdir loendisse teedest, mis ld otsivad arhiiviribasid ja ld kontroll-skripte. Seda võimalust võite kasutada mitmel korral. Kataloogid otsitakse sellises järjekorras, nagu need on käsureal määratud. Käsureal määratud kataloogid otsitakse vaikimisi kataloogidena. Kõik -L valikud kehtivad kõigile -l võimalustele, olenemata sellest, millises järjekorras valikud kuvatakse.

Kui searchdir algab tähega "=", siis asendatakse "=" sysroot-prefiksiga , kui linker on konfigureeritud.

Vaikimisi määratud tee (mida pole otsitud -L-ga ) sõltub sellest, milline emuleerimisrežiim ld kasutab, ja mõnel juhul ka seda, kuidas see oli konfigureeritud.

Tee saab määrata ka lingi skriptiga käsuga "SEARCH_DIR". Sel viisil määratud kataloogid otsitakse asukohas, kus linker skript kuvatakse käsureal.

-m emulatsioon

Emuleerige emulatsiooni linkerit. Saate loetleda saadaolevad emulatsioonid --verbose või -V valikutega.

Kui- m- valikut ei kasutata, võetakse see emuleerimine keskkonnamuutuust "LDEMULATION", kui see on määratletud.

Vastasel juhul sõltub vaikemallulaator sellest, kuidas linker on konfigureeritud.

-M

--prindikaart

Prindi standardväljundile linkikaart. Linkikaart sisaldab linki teavet, sealhulgas järgmist:

*

Kui objektifailid ja sümbolid kaardistatakse mällu.

*

Kuidas levitatakse tavapäraseid sümboleid?

*

Kõik lingile lisatud arhiiviliikmed, viidates sümbolile, mis põhjustas arhiiviliidri sisseviimise.

-n

- mittevajalik

Lülitage välja sektsioonide lehtede joondamine ja märkige väljund nimega "NMAGIC" kui võimalik.

-N

- maagiline

Määrake teksti- ja andmeparameetrid loetavaks ja kirjutatavaks. Samuti ärge lehega vastavusse laske andmeside segmenti ja keelake linkimine jagatud teekide vastu. Kui väljundvorming toetab Unixi stiilis maagilisi numbreid, märkige väljund "OMAGIC".

- mitte-omagic

See suvand loob enamuse -N- valiku efektidest. See seab tekstiosa ainult kirjutuskaitstud ja sunnib andmesegmendi lehtede joondamiseks. Märkus - see valik ei võimalda jagatud teekide jagamist. Selle jaoks kasutage -Bdynamic .

-o väljund

- väljund = väljund

Kasuta ld väljastatava programmi nimeks väljundit ; kui seda võimalust pole määratud, vaikimisi kasutatakse nime a.out . Script command "OUTPUT" võib määrata ka väljundfaili nime.

-O- tase

Kui tase on numbriline väärtus suurem kui null, ld optimeerib väljundit. See võib võtta tunduvalt kauem aega ja seetõttu peaks see olema lubatud ainult viimase binaarfunktsiooni jaoks.

-q

- emot-relokad

Jätke ümberpaigutamise sektsioonid ja sisu täielikult seotud toimetajatesse. Postituslingi analüüsi ja optimeerimisvahendid võivad seda teavet vajavad käivitatavate failide õigete muudatuste tegemiseks. Selle tulemuseks on suuremad käivitatavad failid.

Seda valikut toetatakse praegu ainult ELFi platvormidel.

-r

- levitatav

Loo ümberpaigutatav väljund --- st luua väljundfail, mis omakorda võib olla sisendiks ld-le . Seda nimetatakse tihti osaliseks sidumiseks . Kõrvalmõjuna seab keskkond, mis toetab standardseid Unixi maagilisi numbreid, ka see, et väljundfaili maagiline number on "OMAGIC". Kui seda võimalust pole määratud, koostatakse absoluutne fail. C + + programmide ühendamisel ei lahenda see võimalus viiteid konstruktoritele; seda tehes kasutage -Ur .

Kui sisendfailil ei ole väljundfailiga sama vormingut, toetatakse osalist sidumist ainult juhul, kui see sisendfail ei sisalda ümberpaigutusi. Erinevatele väljundvormingutele võivad olla täiendavad piirangud; näiteks mõned "a.out" -põhised vormid ei toeta osalist sidumist teiste failide sisendfailidega üldse.

See valik teeb sama asja nagu -i .

-R failinimi

- just-symbols = failinimi

Loe filamenüüst sümbolinimesid ja nende aadresse, kuid ärge paigutage need ümber või lisage see väljundisse. See võimaldab oma väljundfailil sümboolselt viidata teistes programmides määratletud mälu absoluutsetele asukohadele. Seda võimalust võite kasutada rohkem kui üks kord.

Sobivuse huvides teiste ELF-i linkeritega, kui -R- valikule järgneb kataloogi nimi, mitte failinimi, käsitletakse seda kui -rpath- valikut.

-s

- kõikjal

Väljundfailist välja jätta kogu sümboliteave.

-S

-strip-silumine

Väljundfailist eemaldage silumisnäidu teave (kuid mitte kõik sümbolid).

-t

--jälg

Trükib sisendfailide nimesid, kui neid neid töötleb ld .

-T skriptifail

- script = script file

Linker-skriptina kasuta skripti. See skript asendab ld 's default linker skripti (selle asemel, et seda lisada), nii et käsufilm peab määratlema kõik väljundfaili kirjeldamiseks. Kui praeguses kataloogis ei ole skriptifaili olemas, otsib see "ld" kataloogistes, mille on määranud ükskõik milline eelnev -L valik. Mitme- T võimalused kogunevad.

-u sümbol

--undefined = sümbol

Väljundfailina sisestatav sümbol sisestatakse määratlemata sümbolina. See võib näiteks käivitada standardsete raamatukogude täiendavate moodulite ühendamise. -u võib korrata erinevate valikuvõimalustega, et sisestada täiendavad määratlemata sümbolid. See valik on samaväärne käsuga "EXTERN" linker script.

-Ur

Mis tahes muu kui C ++ programmide puhul on see valik samaväärne -r-ga : see genereerib ümberpaigutatavat väljundit --- st väljundfaili, mis võib omakorda olla ld sisendiks. Kui ühendate C ++ programme, siis -Ur lahendab viited konstruktoritele, erinevalt -r-st . See ei tööta, kui kasutad -Ur faile, mis olid ise seotud -Ur ; kui konstruktori tabel on ehitatud, ei saa seda lisada. Kasuta -Ur ainult viimase osalise lingi jaoks ja -r teiste jaoks.

--unique [= SECTION ]

Loob eraldi eraldiseisva sektsiooni iga sisendjaotuse osas, mis vastab SECTIONile , või kui iga soovitud sisendjaotuse jaoks on valikuline metamärke SECTION argument puudub. Orbteosakond on üks, mida pole konkreetselt linker skripti mainitud. Seda võimalust võite kasutada käsureal mitmel korral; See takistab ühe nimega sisendjaotiste tavapärast liitmist, mis omakorda muudab väljundsektsioonide jaotused linkeri skripti.

-v

--versioon

-V

Kuvage ld versiooni number. V- valik näitab ka toetatud emulatsioonide loendit.

-x

- lahti kõik

Kustuta kõik kohalikud sümbolid.

-X

- loobuda kohalikest elanikest

Kustuta kõik ajutised kohalikud sümbolid. Enamike sihtmärkide puhul on kõik kohalikud sümbolid, mille nimed algavad L-ga .

-sümbol

- trajektoor sümbol = sümbol

Printige iga lingitud faili nimi, kus sümbol kuvatakse. Seda võimalust võib anda mitmel korral. Paljude süsteemide puhul on vaja märkida alljoon.

See suvand on kasulik siis, kui teie lingil on määratlemata sümbol, kuid ei tea, kust viide on pärit.

-Ja tee

Lisa teekond raamatukogu vaikimisi otsinguteele. See valik kehtib Solaris ühilduvuse kohta.

-z märksõna

Tunnustatud märksõnad on "initfirst", "interposition", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "nüüd", "origin", "combreloc", "nocombreloc" ja "nocopyreloc" " Teised märksõnad ignoreeritakse Solarisi ühilduvuse jaoks. "initfirst" tähistab objekti, mis tuleb esmalt esialgseks käivitada enne mõnda muud objekti. "interposition" tähistab objekti, mis selle sümbol tabelis asub enne kõigi sümbolite, kuid esmase käivitatava faili. "loadfltr" tähistab objekti, et selle filteesid töödeldaks kohe töö ajal. "nodefaultlib" tähistab objekti, mis selle objekti sõltuvuste otsimisel ignoreerib kõik vaikimisi raamatukogu otsinguradad. "nodelete" märgib, et objekti ei tohiks käitusajal tühjendada. "nodlopen" tähistab objekti, mis pole dlopenile saadaval. "nodump" märgib, et objekti ei saa dumpinguga "dldump". "Nüüd" tähistab objekti mitte-laiskse käsurea sidumisega. Päritolu märgib, et objekt võib sisaldada $ ORIGIN. "defs" keelab määratlemata sümbolid. "muldefs" lubab mitut määratlust. "combreloc" ühendab mitu reloc-sektsiooni ja sorteerib neid, et muuta dünaamilise sümboli otsingu vahemällu.

"nocombreloc" blokeerib mitut reloc-sektsiooni. "nocopyreloc" keelab koopiate lehtede tootmise.

- ( arhiivid -)

--start-grupi arhiivid - end -grupp

Arhiiv peaks olema arhiivifailide loend. Need võivad olla kas otsesed failinimed või -l võimalused.

Määratud arhiive otsitakse korduvalt seni, kuni pole loodud uusi määratlemata viiteid. Tavaliselt otsitakse arhiivi ainult üks kord järjekorras, mis on määratud käsureal. Kui sellel arhiivil on sümbol, mida on vaja arhiivis sisalduva määratlemata sümboli lahendamiseks, mis ilmub käsurealt hiljem, ei saaks linker seda viidet lahendada. Arhiive rühmitades otsitakse neid kõiki korduvalt, kuni kõik võimalikud viited on lahendatud.

Selle valiku kasutamisel on olulised jõudluskulud. Parim on seda kasutada ainult siis, kui kahe või enama arhiivi vahel on vältimatud ringkiri.

- aktsepteeritud-teadmata-sisendkaar

--no-aktsepteeri-teadmata-input-arch

Annab linkerile nõusolevad sisendfailid, mille arhitektuuri ei saa tuvastada. Eeldatakse, et kasutaja teab, mida nad teevad ja tahtlikult soovib nende teadmata sisendfailide linkimist. See oli linkeri vaikimisi käitumine enne versiooni 2.14. Alates versioonist 2.14 käivitatav vaikimisi käitumine on selliste sisendfailide tagasilükkamine ning vana käitumise taastamiseks on lisatud --accept-unknown-input-arch valik.

kinnitada märksõna

Seda võimalust ignoreeritakse SunOS-i ühilduvuse jaoks .

-Bdünaamiline

- Jah

-call_shared

Link dünaamiliste raamatukogude vastu. See on oluline ainult nende platvormide puhul, mida jagatud raamatukogud toetavad. Selline võimalus on tavaliselt sellistes platvormides vaikimisi olemas. Selle variandi erinevad variandid sobivad erinevate süsteemidega ühilduvuseks. Võite seda võimalust kasutada käsureal mitmel korral: see mõjutab bibliograafiat, mis otsib -l võimalusi, mis järgivad seda.

-Bgroup

Dünaamilises osas sisestage "DF_1_GROUP" lipu kirje "DT_FLAGS_1". See põhjustab käitamise linkeri käitlemist selles objektis ja selle sõltuvust saab teostada ainult rühma sees. - ei ole määratlemata . See valik on mõttekas ELF-i platvormidel, mis toetavad jagatud teeke .

-Bstatic

-dn

-non_shared

- statiik

Ärge linkige jagatud teekide vastu. See on oluline ainult nende platvormide puhul, mida jagatud raamatukogud toetavad. Selle variandi erinevad variandid sobivad erinevate süsteemidega ühilduvuseks. Võite seda võimalust kasutada käsureal mitmel korral: see mõjutab bibliograafiat, mis otsib -l võimalusi, mis järgivad seda.

-Bümbooliline

Jagatud teegi loomisel siduge viited globaalsetele sümbolitele jagatud teegis määratletud määratlusele (kui on olemas). Tavaliselt on jagatud teegiga lingitud programm võimalik jagatud teegis olevat määratlust üle võtta. See valik on mõttekas ainult ELFplatformides, mis toetavad jagatud teeke.

- Kontroll-sektsioonid

--no-check-sektsioonid

Kutsub linkerit mitte sektsioonide aadresse kontrollima pärast nende määramist, et näha, kas need kattuvad. Tavaliselt teostab linker seda kontrolli ja kui ta leiab mõne kattumise, siis see toob kaasa sobivad veateated. Linker teab ja kasutab ülekatete sektsioone. Vaikimisi käitumist saab taastada kasutades käsurea lülitit - kontrolli osad .

--cref

Väljuge ristviidete tabelist. Kui linkerkaardi fail luuakse, trükitakse ristviidete tabel kaardifaili. Vastasel juhul trükitakse see standardväljundile.

Tabeli formaat on tahtlikult lihtne, nii et seda võib vajaduse korral skripti korral kergesti töödelda. Sümbolid trükitakse välja, sorteeritakse nime järgi. Iga sümboli jaoks on antud failinimede loend. Kui sümbol on määratletud, on loetletud esimene fail määratluse asukoht. Ülejäänud failid sisaldavad viiteid sümbolile.

--no-define-common

See suvand takistab aadresside määramist ühistele sümbolitele. Skripti käsk "INHIBIT_COMMON_ALLOCATION" omab sama mõju.

Valikuvõimalus - not-define-common võimaldab lahti seada otsuse määrata aadressid ühistele sümbolitele väljundfaili tüübi valikust; muidu võib mittekandev väljundtüüp ühendada tavaliste sümbolitega aadressid. Kasutades --no-define-common võimaldab jagatud teegiga seotud ühiseid sümboleid määrata ainult põhiprogrammis. See kõrvaldab jagatud teegis kasutamata kasutamata dubleerivad ruumid ja takistab ka võimaliku segadust vale duplikaadi lahendamisel, kui käivitussümbolite resolutsiooni jaoks on palju dünaamilisi mooduleid spetsialiseeritud otsinguteega.

--defsym symbol = ekspress

Looge väljundfaili globaalne sümbol, mis sisaldab väljendi poolt antud absoluutset aadressi. Võite kasutada seda võimalust nii palju kordi kui vaja, et määrata käsureal mitmeid sümboleid. Selles kontekstis toetatakse ekspressioonis piiratud arvu aritmeetikume: võite anda kuueteistkümnendväärtkonstanti või olemasoleva sümboli nime või kasutada hexadecimlikkonstantide või sümbolite lisamiseks või lahutamiseks "+" ja "-". Kui vajate täpsemaid väljendeid, kaaluge skripti linkeri käsuskeemi kasutamist. Märkus: sümboli , võrdse märgi (`` = '') ja väljendi vahel ei tohiks olla tühja ruumi.

--delement [= stiil ]

- mitte-demangle

Need valikud määravad, kas sümbolite nimede piiritlemine tõrketeates ja muudes väljundites. Kui linkeril on ettekirjutus demangleks muuta, püüab ta sümbolinimede esitamist loetavas vormis: see libistab juhtivaid alakripe, kui neid kasutatakse objektfailide vormingus, ja teisendab C ++ märgistatud sümbolinimed kasutajale loetavateks nimedeks. Erinevatel kompileerijal on erinevad mangling stiilid. Valikulise leppimisstiili argumenti saab kasutada selleks, et valida kompileerijale sobilik lahutamisstiil. Linker vaikimisi demangle, kui keskkonnamuutuja COLLECT_NO_DEMANGLE pole määratud. Neid valikuid saab kasutada vaikeväärtuste tühistamiseks.

- dünaamiline linker- fail

Määrake dünaamilise linkeri nimi. See on mõttekas vaid dünaamiliselt seotud ELFi käivitatavate failide genereerimisel. Vaikimisi dünaamiline linker on tavaliselt õige; ära kasuta seda, kui te ei tea, mida teete.

- embedded-relokatsioonid

See valik on tähendusjõudud ainult MIPS-i varjatud PIC-koodi ühendamisel, mis genereeritakse -membedded-pici võimalusega GNU kompilaatorile ja assemblerile. See paneb linkeri looma tabeli, mida saab käitusajas kasutada, et paigutada kõik andmed, mis olid staatiliselt väärtuse näitajana initsialiseeritud. Täpsema teabe saamiseks vaadake koodi testuite / ld-empic.

- fataalsed hoiatused

Kõigi hoiatuste käsitlemine vigu .

--force-exe-suffix

Veenduge, et väljundfailil on .exe sufiks.

Kui edukalt ehitatud täielikult lingitud väljundfailil ei ole järelliifi " .exe " või " .dll ", sunnib see linker kopeerima väljundfaili ühte nime koos ".exe" sufiksiga. See valik on kasulik, kui kasutate modifitseerimata Unixi makefileid Microsoft Windowsi hostis, kuna mõnel Windowsi versioonil ei esitata pilti, kui see ei lõpe sufiks ".exe".

- no-gc-sektsioonid

--gc-sektsioonid

Kasutamata sisendjaotiste prügikogumise lubamine. Seda ignoreeritakse eesmärkidel, mis seda võimalust ei toeta. See suvand ei ühildu -r-ga ega seda ka dünaamilise sidumisega. Vaikimisi käitumist (seda ei pruugita prügikogust ) saab taastada, märkides käsurealt --no-gc-sektsioonid .

--Help

Tippige standardväljundi ja väljumise käsurea valikute kokkuvõte.

- Target-help

Trüki kõigi standardväljundite ja väljumistega seotud siht-spetsiifiliste valikute kokkuvõte.

-Kaardkaart

Printige link kaardi faili mapfile . Vaata eespool toodud -M-vormingu kirjeldust.

--no-keep-mälu

ld optimeerib tavaliselt mälukasutuse kiiruse, salvestades sisendfailide sümbollaused mällu. See suvand ütleb, et ld peaks mälukasutuse asemel optimeerima, kui vajalik on sümbollauad. See võib olla vajalik, kui ld töötab mälumahtu suure käivitatava faili ühendamisel.

--no-undefined

-z defs

Tavapäraselt mitte-sümboolse jagatud teegi loomisel lubatakse määratlemata sümbolid ja see tuleb lahendada käivitusaja laadija abil. Need valikud keelavad sellised määratlemata sümbolid.

- väike-kordne määratlus

-z muldefs

Tavaliselt, kui sümbol on määratud mitu korda, teatab linker fataalse vea kohta. Need valikud võimaldavad mitut määratlust ja kasutatakse esimest määratlust.

--allow-shlib-undefined

Lubage jagatud objektidel määratlemata sümbolid isegi siis, kui --no-undefined on seatud. Tulemuseks on see, et tavapärastes objektides määratlemata sümbolid ikkagi viga, kuid ignoreeritakse määratlemata sümboleid jagatud objektides. No_undefined rakendamine eeldab, et Runtime Linker hakkab määratlema määramata sümboleid. Siiski on vähemalt üks süsteem (BeOS), kus jagatud raamatukogudes on määratlemata sümbolid normaalsed, kuna kernel parandab neid laadimise ajal, et valida, milline funktsioon on praeguse arhitektuuri jaoks kõige sobivam. IE dünaamiliselt valib sobiva membraani funktsiooni. Ilmselt on HPPA jagatud raamatukogude jaoks normaalne ka määratlemata sümbolid.

--no-undefined-version

Tavaliselt, kui sümbolil on määramata versioon, ignoreerib linker seda. See valik keelab määratlemata versiooni sümbolid ja selle asemel väljastatakse surmava vea.

--no-warn-mittevastavus

Tavaliselt annab ld veateate, kui üritate ühendada sisendfailid, mis mingil põhjusel ei sobi, ehkki need on koostatud erinevatelt protsessoritelt või erinevatest lõpptulemustest. See suvand ütleb ld, et ta peaks vaikimisi lubama selliseid võimalikke vigu. Seda võimalust tohib kasutada ainult hoolikalt, juhul kui olete võtnud teatud erimeetmeid, mis tagavad, et linkeri vead ei sobi.

- mitte-terviklik arhiiv

Lülitage hiljem arhiivifailide puhul valik --whole-archive valikut välja.

--noinhibit-exec

Säilitage käivitatava väljundfaili, kui see on endiselt kasutatav. Tavaliselt ei toeta linker väljundfaili, kui see seob protsessi käigus vigu; see väljub ilma väljundfaili kirjutamata, kui ta mingeid vigu ei tee.

-nostdlib

Otsi ainult kataloogiraamatuid, mis on selgesõnaliselt määratud käsurealt. Linkeri skriptid (sh käsureal määratud linkeri skriptid) loetletud raamatukogu kataloogid ignoreeritakse.

--formaadi väljundformaat

ld võib olla konfigureeritud toetama rohkem kui ühte tüüpi objektifaili. Kui teie ld on sellisel viisil konfigureeritud, saate väljundfaili binaarformaadi määramiseks kasutada --format- suvandit. Isegi kui ld on konfigureeritud toetama alternatiivseid objektivorminguid, ei pea seda tavaliselt määrama, sest ld peaks olema konfigureeritud esitama vaikimisi väljundvorminguna kõige tavalisemal kujul igas masinas. väljundformaat on tekstistring, BFD-i raamatukogude poolt toetatava konkreetse vormingu nimi. (Võite loetleda olemasolevad binaarsed vormingud koos objdump-i-ga .) Skripti käsk "OUTPUT_FORMAT" võib määrata ka väljundvormingu, kuid see valik ignoreerib seda.

-qmagic

Seda võimalust ignoreeritakse Linuxi ühilduvuse jaoks.

-Kui

Seda võimalust ignoreeritakse SVR4 ühilduvuse jaoks.

--relaks

Valik koos masinast sõltuvate mõjudega. Seda valikut toetatakse ainult mõnel eesmärgil.

Mõnel platvormil toimib --relax- valik globaalse optimeerimisega, mis muutub võimalikuks siis, kui linker lahendab programmis adresseerimise, näiteks lõdvestava aadressirežiimi ja väljundfaili uute juhiste sünteesimise.

Mõnes platvormis võivad nende linkimise ajalised globaalsed optimeeringud muuta simuleeritud käivitatava faili silumine võimatuks. See on teada ka Matsushita MN10200 ja MN10300 protsessorite perekonna puhul.

Platvormidel, kus seda ei toetata, - relax on heaks kiidetud, kuid ignoreeritakse.

--retelli sümbolid-faili failinimi

Salvestage ainult faili failinimedes loetletud sümbolid, jättes kõrvale kõik teised. failinimi on lihtsalt lame fail, millel on üks sümbolinimi reas. See valik on eriti kasulik keskkondades (näiteks VxWorks), kus suurte globaalsete sümbolite tabel koguneb järk-järgult, et säästa jooksut mälu.

--Salvestatud sümbolifail ei kõrvalda määramata sümboleid ega ümberpaigutamiseks vajalikke sümboleid.

Võite määrata käsureal ainult faili --retain-symbols-faili . See tühistab -s ja -S .

-rpath dir

Kataloogi lisamine käivitamisteegi otsinguteele. Seda kasutatakse, kui ühendada ELF-i käitatav jagatud objektidega. Kõik -rpath argumendid on ühendatud ja edastatakse runtime linkerile, mis kasutab neid jagatud objektide leidmiseks käitusajal. -rpath- valikut kasutatakse ka jagatud objektide leidmisel, mida on vaja linki selgesõnaliselt lisatud jagatud objektide jaoks; vt -rpath-linki kirjeldust. Kui ELF-i käivitatava faili ühendamisel ei kasutata -rpathi , siis kasutatakse keskkonnamuutuja "LD_RUN_PATH" sisu, kui see on määratletud.

Võimalust -rpath võidakse kasutada ka SunOS-is. Vaikimisi moodustab linker SunOS-i käivitamise otsingu pahandust kõigist -L- valikutest, mida see on antud. Kui kasutatakse -rpath- valikut, luuakse käitusaja otsingutee, kasutades ainult -rpath- valikuid, ignoreerides -L valikuid. See võib olla kasulik gcc-i kasutamisel, mis lisab palju -L võimalusi, mis võivad olla paigaldatud NFS-i failisüsteemidele.

Sobivuse huvides teiste ELF-i linkeritega, kui -R- valikule järgneb kataloogi nimi, mitte failinimi, käsitletakse seda kui -rpath- valikut.

-rpath-link DIR

Kui kasutate ELF-i või SunOS-i, võib üks jagatud teeki vajada teist. See juhtub, kui "ld-shared" link sisaldab jagatud teeki ühe sisendfailina.

Kui linker satub sellisele sõltuvusele, kui teete jagamata, mitte relatsioonitavat linki, püüab ta automaatselt leida vajalikku jagatud teeki ja lisada see linki, kui see pole selgesõnaliselt lisatud. Sel juhul määrab -rpath-link esimene otsingute kataloogide komplekt. Võimalus -rpath-link võib määrata katalooginimede järjestuse, täpsustades kloonidega eraldatud nimede loendi või esitades mitu korda.

Seda võimalust tuleks kasutada ettevaatlikult, kuna see ignoreerib otsingutee, mis võis olla jagatud teeki jaoks keeruline. Sellisel juhul on tahtmatult võimalik kasutada erinevat otsinguteed, mida runtime linker teeks.

Linker kasutab vajalike jagatud teekide leidmiseks järgmisi otsinguteid.

1

Kõik kataloogid, mille määravad -rpath-linki võimalused.

2

Kõik kataloogid, mille määravad -rpath- valikud. Erinevus -rpathi ja -rpath-linki vahel on see, et -rpath- valikutega määratud kataloogid on kaasatud käivitatavasse ja neid kasutatakse käitusajal, samas kui -rpath-link valik on efektiivne ainult link ajal. See on ainult native linker.

3

Kui ELF-i süsteemis ei kasutata -rpathi ja rpath-linki võimalusi, siis otsige keskkonnamuutuja "LD_RUN_PATH" sisu. See on ainult native linker.

4

SunOSis , kui -rpath- valikut ei kasutata, otsige kõiki -L- valikuid kasutades määratud katalooge.

5

Natiivse linkeri jaoks on keskkonnamuutuja sisu "LD_LIBRARY_PATH".

6

Native ELF linkeriga otsitakse jagatud teegi "DT_RUNPATH" või "DT_RPATH" katalooge selle jaoks vajalike jagatud raamatukogude jaoks. Kirjeid "DT_RPATH" ignoreeritakse, kui kirjed "DT_RUNPATH" on olemas.

7

Vaikekataloogid , tavaliselt / lib ja / usr / lib .

8

ELF-i emakeelse linkeri korral, kui fail /etc/ld.so.conf eksisteerib, asub selles failis leiduvate kataloogide loend.

Kui nõutavat jagatud artiklit ei leita, annab linker välja hoiatus ja jätkab linki.

- jagatud

- jagatud

Jagatud teegi loomine. Seda toetatakse praegu ainult ELF, XCOFF ja SunOS platvormidel. SunOS-is loob linker automaatselt jagatud teeki, kui -e- valikut ei kasutata ja linkis on määratlemata sümbolid.

--sort-tavaline

See suvand ütleb, et ld sorteerib ühised sümbolid suuruse järgi, kui need paigutatakse vastavatesse väljundsektsioonidesse. Esmalt tulevad kõik ühe baidi sümbolid, siis kõik kaks baiti, siis kõik neli baiti ja seejärel kõik muud. Selle eesmärk on ära hoida lüngad sümbolite vahel, mis on tingitud joondamise piirangutest.

--spit-by-file [ suurus ]

Sarnane --split-by-reloc, kuid loob iga sisendfaili jaoks uue väljalõiget, kui suurus on saavutatud. suuruse vaikimisi suurus 1, kui seda pole antud.

--Salvestatud reloc [ count ]

Püüab luua väljundfailis täiendavaid jaotisi, nii et ükski väljundseade failis ei sisalda rohkem kui arvutusi ümberpaigutamiseks. See on kasulik, kui genereerib tohutuid teisaldatavaid faile, mis laaditakse alla teatud reaalajas tuumadele COFF-i objektifailivorminguga; kuna COFFcannot esindab rohkem kui 65535 ümberpaigutamist ühes jaotises. Pange tähele, et see ei toimi objektide failivormingutega, mis ei toeta suvalisi jaotisi. Linker ei jaota ümbersuunamiseks üksikuid sisendsektoreid, seega kui üks sisendjaotis sisaldab rohkem kui arvutusi ümberpaigutamisteks, sisaldab üks väljundsektsioon seda paljusid ümberpaigutamisi. arvutab vaikimisi väärtuseks 32768.

- staatused

Arvuta ja näidake linkeri toimimise statistikat, näiteks täitmise aega ja mälukasutust.

- traditsiooniline formaat

Mõne sihtmärgi puhul on mõne olemasoleva linkeri väljundist mõnevõrra erinev ld- väljund. See lüliti nõuab ld- l traditsioonilise vormingu kasutamist.

Näiteks SunOS-i puhul ühendab ld sümbol stringitabel duplikaatkirjed. See võib vähendada väljundfaili suurust täieliku tõrketeabega rohkem kui 30% võrra. Kahjuks ei saa SunOS "dbx" programm lugeda saadud programmi ("gdb-l pole probleeme"). - Traditsioonilise vormingu lüliti ütleb ld, et ei ühenda topelt kirjed.

- sektsioon-algusse sektsioonnimi = org

Leidke väljundfaili jaotis org-i poolt antud absoluutses aadressis. Võite kasutada seda võimalust nii palju kordi kui vaja, et leida käsurida mitme sektsiooni. org peab olema üks üheksakujuline täisarv; teiste saitidega ühilduvuse korral võite jätta juhtiva 0x, mida tavaliselt seostatakse kuueteistkümnenda väärtusega. Märkus: sektsiooni nime , võrdusmärgi (`` = '') ja org-i vahel ei tohiks olla tühja ruumi.

-Tbss org

-Tedata org

-Ttext org

Kasutage org-d algse aadressina --- vastavalt --- väljundfaili "bss", "data" või "text" -segment. org peab olema üks üheksakujuline täisarv; teiste saitidega ühilduvuse korral võite jätta juhtiva 0x, mida tavaliselt seostatakse kuueteistkümnenda väärtusega.

- dll-verbose

--verbose

Kuvage ld versiooni number ja näidake toetatud linkeri emulatsioonide loendit. Näidake, milliseid sisendfaile saab ja mida ei saa avada. Kuvage linkeri skript, mida linker kasutab.

--version-script = versioon- skriptifail

Määrake versiooni skripti nimi linkerile. Tavaliselt kasutatakse seda jagatud raamatukogude loomisel, et täpsustada lisainformatsiooni loodud raamatukogu versiooni heirarhiast. See valik on mõttekas ELF-i platvormidel, mis toetavad jagatud teeke.

--laine - tavaline

Hoiata, kui tavaline sümbol on kombineeritud mõne teise ühise sümboliga või sümboli määratlusega. Unixi linkerid võimaldavad seda mõnevõrra lohakas tava, kuid linkerid mõnes teises operatsioonisüsteemis seda ei tee. See suvand võimaldab teil leida globaalsete sümbolite kombineerimisega seotud probleeme. Kahjuks kasutavad mõned C-raamatukogud seda praktikat, nii et võite saada mõningaid hoiatusi sümbolite kohta nii raamatukogudes kui ka teie programmides.

Siin on kolm näpunäiteid illustreerivate globaalsete sümbolite hulgast:

int i = 1;

Määratlus, mis asub väljundfaili initsialiseeritud andmete sektsioonis.

extern int i;

Määratlemata viide, mis ei eralda ruumi. Muutuja jaoks peab olema kas määratlus või ühine sümbol.

int i;

Ühine sümbol. Kui muutuja jaoks on ainult (üks või mitu) ühist sümbolit, läheb see väljundfaili mitteinitsialiseeritud andmeväljale. Linker ühendab sama muutujaga mitu ühist sümbolit ühe sümbolina. Kui need on erineva suurusega, valib see suurima suuruse. Linker muudab ühise sümboli deklaratsiooniks, kui on olemas sama muutuja määratlus.

The -warn-common variant võib toota viis hoiatusi. Iga hoiatus koosneb rida paarist: esimene kirjeldab just tekkinud sümbolit ja teine ​​kirjeldab sama nimega varem esinenud sümbolit. Üks või mõlemad kaks sümbolit on tavaline sümbol.

1

Ühise sümboli viimine võrdlusse, sest sümbol on juba defineeritud.

(
): hoiatus: üldine on `` ', mille üle on määratluse (
): hoiatus: siin määratletud

2

Ühise sümboli viimine viidetena, kuna on näha sümboli hilisemat määratlust. See on sama mis eelmisel juhul, välja arvatud see, et sümboleid esineb teises järjekorras.

(
): hoiatus: määratlus <> ülekaalukas tavaline (
): hoiatus: tavaline on siin

3

Ühise sümboli ühendamine eelmise sama suurusega ühise sümboliga.

(
): hoiatus: mitu ühist <`symbol> ' (
): hoiatus: eelmine üldine on siin

4

Ühise sümboli ühendamine eelmise suurema üldise sümboliga.

(
): hoiatus: sagedamini kui ` 'on suuremate sagedamate (
) üle hääldatud: hoiatus: suurem on üldine siin

5

Ühise sümboli ühendamine eelmise väiksema üldise sümboliga. See on sama mis eelmisel juhul, välja arvatud see, et sümboleid esineb teises järjekorras.

(
): hoiatus: tavaline sümbol ` 'väikseim ühine (
): hoiatus: väiksemad levinud on siin

- -võti-konstruktorid

Hoiata, kui kasutatakse globaalseid konstruktoreid. See on kasulik ainult mõne objekti failivormingu puhul. Selliste vormingute puhul nagu COFF või ELF linker ei suuda tuvastada globaalsete konstruktorite kasutamist.

--warn-multiple-gp

Hoiatus, kui väljundfailis on vaja mitu ülemaailmset pointeri väärtust. See on tähendusjärgne vaid teatavatele töötlejatele, nagu näiteks Alfa. Täpsemalt öeldes panevad mõned protsessorid spetsiaalses osas suuremahulisi konstantse. Selle rea keskel asetseb spetsiaalne register (globaalne kursor), nii et konstante saab efektiivselt laadida baasregistri suhtelise adresseerimisrežiimi abil. Kuna baasregistri suhtelise režiimi nihe on fikseeritud ja suhteliselt väike (nt 16 bitti), piirab see konstantse bassi suurimat suurust. Seega on suurtes programmides sageli vaja kasutada mitut globaalset pointeri väärtust, et oleks võimalik kõigi võimalike konstanditega tegeleda. See valik põhjustab selle juhtumi korral hoiatus.

--vaheta üks kord

Ainult üks kord hoiatatakse iga määratlemata sümboli eest, mitte üks kord mooduli kohta, mis viitab sellele.

--lahendusjoonega joondus

Hoiata, kui väljundsegmendi aadress muutub joondamise tõttu. Tavaliselt määrab joonduse sisendjaotis. Aadressi saab muuta ainult siis, kui see pole selgesõnaliselt täpsustatud; see tähendab, et kui käsk "SEKTSIOONID" ei määra sektsiooni esialgset aadressi.

- täiesti arhiiv

Iga arhiivi puhul, mis on käsuril pärast suvalise arhiivi valikut, lisage linki kogu arhiivis olev objektifail, selle asemel et otsida vajalikest objektifailidest arhiivi. Seda kasutatakse tavaliselt arhiivifaili jagamiseks jagatud teeki, sundides iga objekti kaasatud jagatud teegist kaasama. Seda võimalust võib kasutada rohkem kui üks kord.

Kaks märkust, kui kasutate seda võimalust gcc-ist: esiteks ei tea gcc seda võimalust, nii et peate kasutama -Wl -i peaaegu arhiivi . Teiseks, ära unusta arhiivide loendist kasutada -Wl, -ne-tervet arhiivi, sest gcc lisab oma lingile oma arhiivide nimekirja ja te ei soovi, et see lipp ka neid mõjutaks.

- ümbrise sümbol

Kasutage sümboli jaoks ümbrisfunktsiooni . Iga määratlemata viide sümbolile lahendatakse, et "__ wrap_symbol". Iga määratlemata viide "__real_symbolile" lahendatakse sümbolile .

Seda saab kasutada süsteemi funktsiooni pakendamiseks. Pakkimisfunktsiooni tuleks nimetada "__wrap_symbol". Kui see soovib süsteemi funktsiooni kutsuda, peaks see nimetama "__ real_symbol".

Siin on triviaalne näide:

void * __wrap_malloc (int c) {printf ("malloc kutsutakse koos% ld \ n", c); tagasi __real_malloc (c); }

Kui ühendate selle failiga mõne teise koodi, kasutades --wrap malloc , siis kõik kõned "malloc" nimetavad selle asemel funktsiooni "__wrap_malloc". "__wrap_malloc" kõne "__real_malloc" kutsub üles tegeliku "malloc" funktsiooni.

Võimalik, et soovite luua ka "__real_malloc" funktsiooni, nii et lingid ilma - wrap-valikuta ei õnnestu. Kui teete seda, siis ei tohiks määratleda "__ real_malloc" samas failis kui "__wrap_malloc"; kui te seda teete, võib assembler kõne lahendada, enne kui linkeril on võimalus seda malloc-le pakkida.

--enable-new-dtags

--disable-new-dtags

See linker võib luua uusi dünaamilisi silte ELFis. Kuid vanemad ELFi süsteemid ei pruugi neid mõista. Kui määrate --nable-new-dtags , luuakse dünaamilised siltid vastavalt vajadusele. Kui määrate --disable-new-dtags , ei looda uusi dünaamilisi silte. Vaikimisi uusi dünaamilisi silte ei loodud. Pange tähele, et need valikud on saadaval ainult FORF süsteemide jaoks.

I386 PE linker toetab jagatud võimalust, mis muudab väljundiks tavalise käivitatava faili asemel dünaamiliselt seotud teeki (DLL). Kui kasutate seda võimalust, peaksite väljastama "* .dll". Lisaks sellele toetab linker täielikult standardseid "* .def" faile, mis võivad olla määratud linkeri käsureale nagu objektifail (tegelikult peaks see eelnema arhiividele, mida ta ekspordib sümbolitest, tagamaks, et need lingitakse, nagu tavaline objektifail).

Lisaks kõigi sihtmärkide jaoks ühistele võimalustele toetab i386 PE linker ka täiendavaid käsurea võtmeid, mis on spetsiifilised i386 PE sihtimise jaoks. Valikuid, mis võtavad väärtusi, võib nende väärtustest eraldada kas tühiku või võrdse märgiga.

- add-stdcall-alias

Kui antud, kasutatakse stdcall-järelliide (@ nn ) sümbolid eksistentsiga nagu on-line ja ka järelliide.

- baasfailifail

Kasutage faili faili nime järgi, kus kõigi DLL- ide genereerimiseks vajalike ümberpaigutamiste põhiaadresse salvestatakse dlltooliga .

- dll

Loo tavalise käivitatava faili DLL. Võite kasutada ka antud failis ".def" - "jagatud" või "LIBRARY".

--enable-stdcall-fixup

--disable-stdcall-fixup

Kui link leiab sümboli, mida see ei suuda lahendada, üritab ta "fuzzy linking" ("fuzzy linking") teha, otsides teist määratletud sümbolit, mis erineb ainult sümboli nime vormingus (cdecl vs stdcall) ja lahendab selle sümboli, ühendades võistlusele. Näiteks määratlemata sümbol "_foo" võib olla seotud funktsiooniga "_foo @ 12" või määratlemata sümbol "_bar @ 16" võib olla seotud funktsiooniga "_bar". Kui linker seda teostab, prindib ta hoiatuse, kuna see ei tohiks tavaliselt linkida, kuid mõnikord kolmandatest isikupõhistest dllidest loodud raamatukogude importimiseks võib olla vaja seda funktsiooni kasutada. Kui määrate --nable-stdcall-fixup , on see funktsioon täielikult sisse lülitatud ja hoiatusi ei prindita. Kui määrate --disable-stdcall-fixup , on see funktsioon keelatud ja sellised mittevastavused loetakse veadeks .

- Eksport-kõik sümbolid

Kui see on antud, DLL-i ekspordib kõik DLL-i loomisel kasutatud objektide globaalsed sümbolid. Pange tähele, et see on vaikimisi, kui muidu ei oleks eksporditud sümboleid. Kui sümboleid eksporditakse selgesõnaliselt DEF-failide kaudu või kaudselt eksporditakse funktsiooni atribuutide kaudu, siis vaikimisi ei eksporita midagi muud peale selle valimise. Pange tähele, et sümboleid "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" ja "impure_ptr" ei ekspordita automaatselt. Teistest DLL-failidest imporditud sümbolit ei ekspordita uuesti ega ka DLL-i sisemist paigutust tähistavad sümbolid, näiteks need, mis algavad "_head_" -ga või lõpevad "_inamega". Lisaks ei ekspordita ühtegi "libgcc", "libstd ++", "libmingw32" ega "crtX.o" sümbolit. Sümbolit, mille nimed algavad nimega "__rtti_" või "__builtin_", ei ekspordita C ++ DLL-ide jaoks. Lõpuks on laialdane nimekiri cygwin-erasümbolitest, mida ei ekspordita (muidugi kehtib see ka siis, kui cygwin-eesmärkide jaoks DLL-ide loomisel).

Need cygwin-välistused on: "_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" "ja" keskkond ".

- välistama sümbolid , sümbol , ...

Määrab nimekirja sümbolitest, mida ei tohiks automaatselt eksportida. Tähemärkide nimed võib piiritleda komadega või koolonitega.

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

Määrab nimekirja arhiivikogudest, kust sümboleid ei tohiks automaatselt eksportida. Raamatute nimed võivad piiritleda komadega või kääridena. "--exclude-libs ALL" määramine välistab automaatsel ekspordil kõikides arhiivibakirjades olevad sümbolid. .def-failis sõnaselgelt loetletud sümbolid eksporditakse endiselt, olenemata sellest võimalusest.

--file-joondus

Täpsustage faili joondamine. Faili osad algavad alati sellel numbrikomplektidel olevate failide tasaarvelduste korral. See vaikimisi on 512.

--heap reservi

--heap reserv , toime

Määrake mälu kogus reserveerimiseks (ja valikuliselt commit), mida kasutatakse selle programmi jaoks hooga. Vaikimisi on reserveeritud 1 MB, toimepandud 4K.

- Imag-baasväärtus

Kasutage väärtust oma programmi või dlli põhiaadressina. See on madalaim mälu asukoht, mida kasutatakse siis, kui teie programm või dll on laaditud. Et vähendada oma dllide ümberpaigutamise vajadust ja parandada nende toimimist, peaks igaüks omama unikaalset põhiaadressi ja mitte kattuma teiste dllidega. Vaikimisi on käivitatavate failide jaoks 0x400000 ja dll-de jaoks 0x10000000.

- Kill-at

Kui see antakse, eemaldatakse sümbolidest enne eksportimist stdcalli järelliited (@ nn ).

--major-image-versiooni väärtus

Määrab suurema arvu "pildi versiooni". Vaikimisi on 1.

--major-os-versiooni väärtus

Määrab suurema arvu `` os versiooni ''. Vaikimisi on 4.

--major-alamsüsteemi versiooni väärtus

Määrab suurima arvu "alamsüsteemi versiooni". Vaikimisi on 4.

--minor-image-versiooni väärtus

Määrab väiksema arvu "pildi versiooni". Vaikimisi on 0.

- minor-os-versiooni väärtus

Määrab väiksema arvu `` os versiooni ''. Vaikimisi on 0.

--minor-allsüsteemi versiooni väärtus

Määrab alamsüsteemi versiooni väiksema arvu. Vaikimisi on 0.

- väljund-def fail

Linker loob failifaili, mis sisaldab DEF-faili, mis vastab linkerite genereeritavale DLL-ile. Seda DEF-faili (mida tuleks nimetada "* .def") võib kasutada impordiblogi loomiseks dlltooliga või seda võib kasutada viidetena automaatselt või kaudselt eksporditud sümbolitele.

--out-implib fail

Linker loob failifaili, mis sisaldab impordibaali, mis vastab linkerite loomisel olevale DLL-ile. Seda impordibaali (mida tuleks nimetada "* .dll.a" või "* .a" võib kasutada klientide linkimiseks genereeritud DLL-i kaudu; see käitumine võimaldab vahele jätta eraldi dlltooli importimise teegi loomise sammu.

--enable-auto-image-base

Vali automaatselt DLL-ide kujutise baas, kui pole määratud, kasutades "--image-base" argumenti. Kasutades dllnimega genereeritud räsi, et luua iga DLL-i ainulaadne kujutise alused, välditakse programmis käivitamise edasilükkamist võimaldavaid kokkupõrkeid ja ümberpaigutamisi.

--disable-auto-image-base

Ärge genereerige automaatselt ainulaadset kujutise baasi. Kui kasutaja määratud pildialbale pole ("--image-base"), siis kasutage platvormi vaikimisi.

- dll-otsing-prefiksi string

Kui ühendate dünaamiliselt dllinimekirja ilma impordipaberi, otsi " .dll", eelistades "lib .dll". Selline käitumine võimaldab hõlpsalt eristada eri "subplatforms" -i jaoks loodud DLL-e: native, cygwin, uwin, pw jne. Näiteks kasutavad cygwini DLL-id tavaliselt "-dll-search-prefix = cyg".

--enable-auto-import

Kasuta "_symbol" keerukat linki "__imp__symbol" DLL-i impordiks DLL-failidest ja looge vajalikud importimissümbolid, kui impordib raamatukogud nende DATAexportsi loomisel. See üldiselt "lihtsalt töötab" --- kuid mõnikord näete seda sõnumit:

"muutuja" "ei saa automaatselt imporditud. Lisateabe saamiseks lugege ld-i dokumente" --enable-auto-import "."

See teade ilmneb, kui mõni (alam) väljendus pääseb aadressile, mille lõpuks annab kahe konstanti summa (Win32 impordi tabelid lubavad seda ainult). Sellised juhud, kus see võib juhtuda, sisaldab juurdepääsu DLL-i imporditud struktuurimuutuja liikmete-väljadelt ning DLL-i imporditud massiivi muutuja abil püsiva indeksi kasutamist. Selle vea tingimuseks võib käivitada mis tahes mitmemoodiline muutuja (massiivid, struktuurid, kauakestev jne). Siiski, olenemata eksimatud muutuja täpsest andmetüübist, tuvastab ld alati selle, annab hoiatuse ja väljub.

Selle raskusega tegelemiseks on mitmeid võimalusi, olenemata eksporditud muutuja andmetüübist.

Üks võimalus on kasutada - enableable runtime pseudo-reloc lülitit. See jätab ülesandeks kohandada oma kliendikoodi viiteid käitusajakeskkonnale, mistõttu see meetod töötab ainult siis, kui käitusaja keskkond seda funktsiooni toetab.

Teine lahendus on sundida ühte "konstandist" olema muutuja --- see on tundmatu ja optimeerimata kompileerimise ajal. Massiivide jaoks on kaks võimalust: a) muuta indeksit (massiivi aadress) muutujaks või b) muuta muutuja konstantseks indeksiks. Seega:

extern tüüpi extern_array []; extern_array [1] -> {lenduv tüüp * t = extern_array; t [1]}

või

extern tüüpi extern_array []; extern_array [1] -> {lenduvad int t = 1; extern_array [t]}

Struktuuride jaoks (ja enamikul teistest mitme sõnadega seotud andmetüüpidest) on ainus võimalus struktuur ise (või ka pikk või ... muutuja) muuta:

extern struct s extern_struct; extern_struct.field -> {volatiilsed struktuurid s * t = & extern_struct; t-> välja}

või

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

Kolmas meetod selle raskusega tegelemiseks on loobuda sümbolist "autoimport" ja märkida see "__declspec (dllimport)". Kuid praktikas nõuab see kompileerimisaja #definition kasutamist, et näidata, kas teete DLL-i, ehitades DLL-iga linkimisega seotud kliendikoodi või lihtsalt ehitades / sidudes staatilise teegiga. Valides erinevate probleemide otsest aadresside lahendamise meetodid, peaksite arvestama tüüpilise reaalmaailma kasutusega:

Originaal:

--foo.h extern int arr []; --foo.c # sisesta "foo.h" tühine peamine (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Lahendus 1:

--foo.h extern int arr []; --foo.c #include "foo.h" tühine peamine (int argc, char ** argv) {/ * See lahendus on mõeldud win32 ja cygwin; Ärge "optimeerige" * / lenduv int * parr = arr; printf ("% d \ n", parr [1]); }

Lahendus 2:

--foo.h / * Märkus: eeldatakse automaatset eksporti (ei __declspec (dllexport)) * / #if (defineeritud (_WIN32) || määratletud (__ CYGWIN__)) && \! (määratletud (FOO_BUILD_DLL) || määratletud (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c # sisesta "foo.h" tühine peamine (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Neljas võimalus selle probleemi vältimiseks on koodi uuesti kodeerimine, et kasutada funktsionaalset liidest, mitte andmesidet rikkuva muutuja jaoks (nt set_foo () ja get_foo () accessor funktsioonidele).

--disable-auto-import

Ärge üritage DLL-idele DATAimportside jaoks suvalist "_symbol" siduda "__imp__symboliga".

--nable-runtime-pseudo-reloc

Kui teie kood sisaldab väljendeid --enable-auto-import, mida on kirjeldatud jaotises - DATA imports from DLL with non-zero offset, siis loob see lüliti "runtime pseudo-relatsioonide" vektor, mida viitetehnoloogia abil saab käivituskeskkonda kasutada oma kliendikoodi sellistesse andmetesse.

--disable-runtime-pseudo-reloc

Ärge looge pseudot ümberpaigutamised DLL-i DLL-idele mitteväljamakseliseks kompenseerimiseks. See on vaikimisi.

--nable-extra-pe-silur

Kuva täiendav silumisteave, mis on seotud sümbolite automaatse importimisega.

- sektsioon-joondus

Määrab sektsiooni joonduse. Mälu osad algavad alati aadressidel, mis on selle numbri kordumatud. Vaikimisi 0x1000.

- stack reserve

- stack reserve , toime

Määrake mälu kogus reserveerimiseks (ja valikuliselt commit), mida kasutatakse selle programmi jaoks korstna. Vaikimisi on reserveeritud 2 MB, 4K panustatud.

- allsüsteem, mis

- allsüsteem, mis : suur

- allsüsteem, mis : suur . alaealine

Määrab allsüsteemi, mille raames teie programm käivitatakse. Õiguslikud väärtused on "emakeelena", "aknad", "konsool" ja "posix". Võimalikult saate määrata ka allsüsteemi versiooni.

Tähtis: kasutage käsuga man ( % man ), et näha, kuidas käsku kasutatakse teie konkreetsel arvutis.