Linux / Unix komanda: Id

VARDAS

ld - LD naudojimas , GNU linkeris

SANTRAUKA

ld [ options ] objfile ...

APIBŪDINIMAS

Ld sujungia keletą objektų ir archyvų failus , perkelia jų duomenis ir sujungia simbolių nuorodas. Paprastai paskutinis programos sudarymo žingsnis yra paleisti ld .

ld priima "Linker Command Language" failus, parašytus AT & T "Link Editor" komandų kalbos sintaksėje, siekiant aiškiai ir visiškai kontroliuoti susiejimo procesą.

Šiame puslapyje nėra aprašomos komandų kalbos; Žiūrėkite " ld" įrašą "info" arba vadovą ld: GNU linkerį, kad gautumėte išsamią informaciją apie komandų kalbą ir kitus " GNU linker" aspektus.

Ši " ld" versija naudoja bendrojo naudojimo BFD bibliotekas, veikiančias objektų bylose. Tai leidžia " ld" skaityti, sujungti ir parašyti objektų failus daugelyje skirtingų formatų, pvz., COFF arba "a.out". Skirtingi formatai gali būti susieti kartu, norint sukurti bet kokį turimą objekto failo tipą.

Be lankstumo, GNU jungtys yra naudingesnės, palyginti su kitomis nuorodomis teikiant diagnostinę informaciją. Daugybė nuorodų atsisako vykdyti iš karto po klaidos; kai tik įmanoma, ld tęsia vykdymą, leidžiančią jums nustatyti kitas klaidas (arba kai kuriais atvejais gauti išvesties failą, nepaisant klaidos).

GNU Linker ld skirtas padengti įvairias situacijas ir būti kuo labiau suderintu su kitais linkeriais. Dėl to jūs turite daug pasirinkimų, kad galėtumėte kontroliuoti savo elgesį.

GALIMYBĖS

Linker palaiko daugybę komandinės eilutės parinkčių , tačiau realioje praktikoje keli iš jų yra naudojami bet kuriame konkrečiame kontekste. Pavyzdžiui, dažnas ld naudojimas yra standartinių Unix objektų failų sujungimas į standartinę palaikomą Unix sistemą . Tokioje sistemoje susieti failą "hello.o":

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

Tai nurodo ld sukurti failą, vadinamą produkcija , susiejant failą "/lib/crt0.o" su "hello.o" ir biblioteka "libc.a", kuris ateis iš standartinių paieškos katalogų. (Žr. Toliau pateiktą variantą " -l" ).

Kai kurios komandinės eilutės parinktys ld gali būti nurodytos bet kuriame komandų eilutės taške. Tačiau galimybės, susijusios su failais, pvz., -l ar -T , sukelia failo skaitymą taške, kuria parinktis atsiranda komandinėje eilutėje, palyginti su objektų failais ir kitomis failų parinktimis. Keičiant ne failo parinktis su kitokiu argumentu nebus jokio papildomo efekto arba anuliuoti ankstesnius įvykius (tolesnius į kairę komandinės eilutės). Parinktys, kurios gali būti reikšmingai nurodytos daugiau nei vieną kartą, nurodytos toliau pateiktuose aprašymuose.

Neparametruoti argumentai yra objektiniai failai ar archyvai, kurie turi būti susieti kartu. Jie gali sekti, sekti arba sumaišyti su komandinės eilutės parinktimis, išskyrus tai, kad objekto failo argumentas negali būti tarp pasirinkimo ir jo argumentų.

Paprastai linkeris yra nukreipiamas bent su viena objekto byla, bet galite nurodyti kitas binarinių įvesties failų formas, naudodamas -l , -R ir scenarijų komandų kalbą. Jei nenurodyta nė vieno dvejetainio įvesties failo, linkeris nepateikia jokios išvesties ir išduoda pranešimą Nr įvesties failus .

Jei linkeris negali atpažinti objekto failo formato, jis darys prielaidą, kad tai yra nuorodų scenarijus. Tokiu būdu nurodytas scenarijus sustiprina pagrindinį linkerio scenarijų, kuris naudojamas nuorodai (numatytojo lankstymo scenarijų arba nurodytam naudojant " -T" ). Ši funkcija leidžia linkeriui susieti failą, kuris, atrodo, yra objektas ar archyvas, iš tikrųjų tik apibrėžia kai kurias simbolių vertes arba naudoja "INPUT" arba "GROUP", kad įkeltų kitus objektus. Atkreipkite dėmesį, kad tokiu būdu nurodant scenarijų tik padidinamas pagrindinis linkerio scenarijus; naudokite -T parinktį, kad visiškai pakeistumėte numatytąjį linkerio scenarijų.

Parinktyse, kurių pavadinimai yra viena raide, parinkčių argumentai turi būti arba po pasirinkimo raidės, nepraleidžiant tarpo, arba būti pateikiami kaip atskiri argumentai iš karto po to, kai jiems reikalinga parinktis.

Jei parinktys, kurių pavadinimai yra kelis raides, prieš pasirinkimo pavadinimą gali būti prieš vieną ar du brūkšnelius; Pavyzdžiui, trajektorijos simbolis ir traukos simbolis yra lygiaverčiai. Pastaba: šioje taisyklėje yra viena išimtis. Keli raidiniai parinktys, prasidedantys mažosiomis raidėmis "o", gali būti iš anksto užfiksuoti tik dviem brūkšneliais. Tai sumažina painiavą su -o parinktimi. Pavyzdžiui, -omagic nustato išvesties failo pavadinimą magija, tuo tarpu - magic nustato NMAGIC vėliavėlę ant išvesties.

Argumentai dėl kelių raidžių parinkčių turi būti atskirti nuo varianto pavadinimo lygiomis raidėmis arba būti pateikiami kaip atskiri argumentai iškart po to, kai jie reikalingi. Pavyzdžiui, traukos simbolis foo ir --trace-symbol = foo yra lygiaverčiai. Priimamos unikalios kelių raidžių variantų pavadinimų santrumpos.

Pastaba: jei linkeris yra naudojamas netiesiogiai per kompiliatoriaus tvarkyklę (pvz., Gcc ), visoms linkerio komandinės eilutės parinktims turėtų būti priskirtas -Wl (arba viskas, kas yra tinkama konkrečiam kompiliatoriaus tvarkyklės), pavyzdžiui:

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

Tai yra svarbu, nes kitaip kompiliatoriaus tvarkyklės programa gali tyliai nuleisti nuorodų parinktis, todėl bloga nuoroda.

Štai lentelė bendrų komandų eilutės jungiklių, priimtų GNU linkerio:

- raktinis žodis

Ši parinktis palaikoma HP / UX suderinamumui. Raktinio žodžio argumentas turi būti vienas iš styginių archyvų , bendrų ar numatytųjų . -archive yra funkcionaliai lygus -Bstatic , o kiti du raktažodžiai yra funkcionaliai lygiaverčiai -Bdynamic . Ši parinktis gali būti naudojama bet kuriuo metu.

- Architektūra

--architecture = architektūra

Dabartiniame " ld" leidime ši parinktis naudinga tik "Intel 960" architektūros šeimai. Šiame ld konfigūracijoje architektūros argumentas identifikuoja konkrečią 960 šeimos architektūrą, leidžiančią tam tikras apsaugos priemones ir keisti archyvo bibliotekos paieškos kelią.

Ateities ld leidimai gali palaikyti panašias funkcijas kitų architektūros šeimų atveju.

-b įvesties formatas

--format = įvesties formatas

ld gali būti sukonfigūruotas palaikyti daugiau nei vieną objekto failo tipą. Jei jūsų ld yra sukonfigūruotas tokiu būdu, galite naudoti -b parinktį nurodyti dvejetainį formatą įvesties objektų rinkmenoms, kurios seka šią parinktį komandinėje eilutėje. Net tada, kai ld yra sukonfigūruotas palaikyti alternatyvius objektų formatus, jums paprastai nereikia tai nurodyti, nes ld turi būti sukonfigūruotas kaip numatytasis įvesties formatas, labiausiai įprastas formatas kiekviename kompiuteryje. įvesties formatas yra teksto eilutė, tam tikro formato pavadinimas, kurį palaiko BFD bibliotekos. (Galima nurodyti dvejetainius formatus su objdump-i .)

Galbūt norėsite naudoti šią parinktį, jei susiesite failus su neįprastais dvejetainiu formatu. Taip pat galite naudoti -b, jei norite tiesiogiai keisti formatus (susiejant skirtingų formatų objektų failus), įtraukdami -b įvesties formatą prieš kiekvieną konkrečios formos objektų failų grupę.

Numatytasis formatas paimamas iš aplinkos kintamojo "GNUTARGET".

Jūs taip pat galite apibrėžti įvesties formatą iš scenarijaus, naudodami komandą "TARGET";

-c MRI-commandfile

- mri-script = MRI-commandfile

Kad būtų suderinama su MRI sukurtais nuorodomis, ld priima scenarijų failus, parašytus alternatyviame, ribotojo komandų kalba, aprašytą GNU ld dokumento skyriuje "MRI suderinamojo scenarijaus failai". Įveskite MRI scenarijų rinkmenas su parinktimi -c ; naudokite -T parinktį paleisti linkerio scenarijus, parašytus bendrojo naudojimo ld scripting language. Jei MRI-cmdfile neegzistuoja, ld ją ieško kataloge, nurodytame bet kurios -L parinktys.

-d

-dc

-dp

Šie trys variantai yra lygiaverčiai; Daugybė formų yra palaikomos suderinamumui su kitais linkeriais. Jie priskiria erdvę bendriems simboliams, net jei yra nurodomas perkeliamas išvesties failas (su -r ). Komandos scenarijus "FORCE_COMMON_ALLOCATION" turi tokį patį poveikį.

- įrašas

- centre = įrašas

Naudokite įrašą kaip aiškų simbolį, kad pradėtumėte vykdyti programą, o ne numatytąją įėjimo tašką. Jei nėra simbolio pavadinimo įrašo , linkeris bandys parsifikuoti įrašą kaip numerį ir jį naudoti kaip įvesties adresą (numeris bus interpretuotas bazine 10, galite naudoti pagrindinį 0x bazei 16 arba pirmajam 0 bazei 8).

-E

- Eksportas-dinamiškas

Kurdami dinamiškai susietą vykdomąjį failą, pridėkite visus simbolius prie dinaminio simbolio lentelės. Dinaminio simbolio lentelė yra simbolių rinkinys, kuris yra matomas iš dinaminių objektų vykdymo metu.

Jei nenorite naudoti šios parinkties, dinaminio simbolio lentelėje paprastai yra tik tie simboliai, kuriuos nurodo koks nors dinaminis objektas, paminėtas nuorodoje.

Jei naudojate "dlopen", norėdami įkelti dinaminį objektą, kuris turi grįžti į programoje nurodytus simbolius, o ne į kitą dinaminį objektą, tikriausiai turėsite naudoti šią parinktį susiejant pačią programą.

Taip pat galite naudoti scenarijų versiją, norėdami valdyti, kokie simboliai turėtų būti įtraukti į dinaminio simbolio lentelę, jei tai palaiko išvesties formatas. Žr. " --version-script" aprašymą, esantį @ ref {VERSION}.

-EB

Susieti didelius objektus. Tai daro įtaką numatytam išvesties formatui.

-EL

Sieti mažai-endianus objektus. Tai daro įtaką numatytam išvesties formatui.

-f

- papildomas vardas

Kuriant ELF bendrai naudojamą objektą, nustatykite vidinį DT_AUXILIARY lauką nurodytam vardui. Tai nurodo dinaminį linkerį, kad bendro naudojimo objekto simbolių lentelėje kaip bendrojo objekto simbolių lentelę reikėtų naudoti pagalbinį filtrą.

Jei vėliau susiesite programą su šiuo filtro objektu, tada, kai paleisite programą, dinaminis jungiklis pamatys lauką DT_AUXILIARY. Jei dinaminis linkeris pašalina visus filtro objekto simbolius, jis pirmiausia patikrins, ar bendrame objekto pavadinime yra apibrėžimas. Jei yra vienas, jis bus naudojamas vietoj apibrėžties filtro objekte. Bendrasis objekto pavadinimas neturi egzistuoti. Taigi bendrai naudojamo objekto pavadinimas gali būti naudojamas tam, kad būtų galima alternatyviai įgyvendinti tam tikras funkcijas, galbūt derinti arba konkrečiai mašinai atlikti.

Ši parinktis gali būti nurodyta daugiau nei vieną kartą. DT_AUXILIARY įrašai bus sukurti tokia tvarka, kokia jie rodomi komandinėje eilutėje.

-F vardas

- filtro pavadinimas

Sukurdami bendrai naudojamą objektą ELF, nustatykite vidinį lauką DT_FILTER nurodytu vardu. Tai nurodo dinaminį linkerį, kad sukurto bendrojo objekto simbolių lentelė turėtų būti naudojama kaip filtras, pateikiamas bendrosios objekto pavadinimo simbolių lentelėje.

Jei vėliau susiesite programą su šiuo filtro objektu, tada paleisdami programą, dinaminis linkeris pamatys lauką DT_FILTER. Dinaminis linkeris sugebės atpažinti simbolius pagal filtro objekto simbolių lentelę, tačiau jis iš tikrųjų susieja su bendrinamo objekto pavadinime esančiais apibrėžimais. Taigi filtro objektas gali būti naudojamas norint pasirinkti objekto pavadinime esančių simbolių pogrupį.

Kai kurie senesni linkeriai naudojo -F parinktį kompiliavimo įrankių juostoje, norėdami nurodyti objektinio failo formatą tiek įvesties, tiek išvesties objekto failams. GNU linkeris naudoja kitus mechanizmus šiam tikslui: -b , --format , --format parinktys, komandą "TARGET" nuorodų scenarijose ir "GNUTARGET" aplinkos kintamąjį. GNU linkeris ignoruos -F parinktį, kai nebus sukurtas ELF bendrai naudojamas objektas.

-fini vardas

Kuriant ELF vykdomąjį arba bendrai naudojamą objektą, skambinkite NAME, kai vykdomąjį arba bendrai naudojamą objektą iškraunate, nustatydami DT_FINI į funkcijos adresą. Pagal numatytuosius nustatymus, linkeris naudoja "_fini" kaip funkciją skambinti.

-g

Ignoruotas. Numatytas suderinamumas su kitomis priemonėmis.

-G vertė

--gpsize = vertė

Nustatykite didžiausią optimizuojamų objektų dydį, naudodami GP registro dydį . Tai yra reikšminga tik objekto failų formoms, pavyzdžiui, MIPS ECOFF, kuri palaiko didelių ir mažų objektų įvairiose sekcijose. Tai ignoruojama kitiems objektų failų formatais.

-i vardas

-someam = vardas

Kuriant ELF bendrai naudojamą objektą, nustatykite vidinį lauką DT_SONAME nurodytu vardu. Kai vykdomasis failas yra susietas su bendrai naudojamu objektu, turinčiu lauką DT_SONAME, tada, kai vykdomas vykdomąjį failą, dinaminis linkeris bandys įkelti bendrai naudojamą objektą, nurodytą lauke DT_SONAME, o ne naudojant failo pavadinimą, pateiktą linkeriui.

-i

Atlikite papildomą nuorodą (tokia pat kaip parinktį -r ).

- vardas

Kuriant ELF vykdomąjį arba bendrai naudojamą objektą, skambinkite "NAME", kai įkeliamas vykdomąjį arba bendrai naudojamą objektą, nustatydami DT_INIT prie funkcijos adreso. Pagal numatytuosius nustatymus, linkeris naudoja "_init", kaip skambinimo funkciją.

-l archyvas

--library = archyvas

Pridėkite archyvo failo archyvą prie susietų failų sąrašo. Ši parinktis gali būti naudojama bet kuriuo metu. ld ieškos savo kelio sąrašo "libarchive.a" atvejų kiekvienam nurodytam archyvei.

Sistemose, kurios palaiko bendras bibliotekas, ld taip pat gali ieškoti bibliotekų su kitais nei ".a" plėtiniais. Konkrečiai kalbant apie ELF ir SunOS sistemas, ld ieškos bibliotekos katalogo su ".so" pratęsimu prieš ieškant "one" su plėtiniu ".a". Pagal susitarimą ".so" plėtinys nurodo bendrąją biblioteką.

Linkeras ieškos archyve tik vieną kartą, toje vietoje, kur jis nurodytas komandinėje eilutėje. Jei archyve nustatomas simbolis, kuris buvo neapibrėžtas kai kuriam objektui, kuris pasirodė prieš archyvą komandinėje eilutėje, linkeris įtraukia atitinkamą (-us) failą (-us) iš archyvo. Tačiau neapibrėžtas simbolis objekte, kuris vėliau pasirodo komandinėje eilutėje, nesukels linkerio vėl ieškoti archyvuose.

Žr. - ( parinktis, kaip priversti linkerį keletą kartų ieškoti archyvų.

Tą pačią archyvą galite įrašyti keletą kartų komandinėje eilutėje.

Tokio tipo archyvo paieška yra Unix nuorodų standartas. Tačiau, jei naudojate ld onAIX, atkreipkite dėmesį, kad tai skiriasi nuo AIX nuorodų elgesio.

-L searchdir

--library-path = searchdir

Pridėkite kelią searchdir prie maršrutų sąrašo, kuriame ld ieškos archyvų bibliotekų ir ld kontrolės scenarijų. Galite naudoti šią parinktį bet kuriuo metu. Katalogai ieškoma tokia tvarka, kokia jie nurodyti komandinėje eilutėje. Katalogai, nurodyti komandinėje eilutėje, yra ieškomi prieš numatytuosius katalogus. Visos " -L" parinktys taikomos visoms -l parinktims, nepriklausomai nuo to, kokia tvarka rodomos parinktys.

Jei searchdir prasideda simboliu "=", tada "=" bus pakeistas sysroot prefiksu , nurodytu keliu, kai sukonfigūruota linker.

Numatytasis maršrutų, kurių ieškoma (nenurodoma su -L ), nustatymas priklauso nuo to, kokio emuliavimo režimo ld naudoja, o kai kuriais atvejais ir dėl to, kaip jis buvo sukonfigūruotas.

Kelias taip pat gali būti nurodyti nuorodų scenarijuje su komanda "SEARCH_DIR". Tokiu būdu sukurtomis katalogomis ieškoma taško, kuriame komandų eilutėje atsiranda nuorodų scenarijus.

-m emuliacija

Imuliuokite emuliacijos nuorodą. Galite sąrašas galimų emuliacijų su -verbose arba -V parinktimis.

Jei -m parinktis nenaudojama, emuliacija imama iš "LDEMULATION" aplinkos kintamojo, jei jis yra apibrėžtas.

Priešingu atveju, numatytoji emuliacija priklauso nuo to, kaip sukonfigūruota linker.

-M

- Spausdinti žemėlapį

Spausdinkite nuorodų žemėlapį į standartinę išvestį. Nuorodų katalogas pateikia informaciją apie nuorodą, įskaitant šias:

*

Kai objekto failai ir simboliai susiejami su atmintimi.

*

Kaip paskirstomi simboliai?

*

Visi archyvo nariai, įtraukti į nuorodą, nurodydami simbolį, kuris sukėlė archyvo nario įvedimą.

-n

--Nmagic

Išjunkite puslapių išlyginimo sekcijas ir, jei įmanoma, pažymėkite išvestį kaip "NMAGIC".

-N

- magiškas

Nustatykite, kad tekstas ir duomenų skyriai būtų skaitomi ir įrašomi. Be to, nespausdinkite duomenų segmento ir neleiskite susieti su bendromis bibliotekomis. Jei išvesties formatas palaiko Unix stiliaus magiškus numerius, pažymėkite išvestį kaip "OMAGIC".

- -no-omagic

Ši parinktis atmetė daugumą variantų -N . Jis nustato, kad teksto sekcija yra tik skaitoma, ir verčia duomenų segmentą suderinti su puslapiu. Pastaba - ši parinktis neleidžia susieti su bendromis bibliotekomis. Tam naudokite -Bdynamic .

-o produkcija

--output = output

Naudokite produkciją kaip " ld" sukurtos programos pavadinimą; jei ši parinktis nenurodyta, pagal pavadinimą naudojamas vardas a.out . Komandos scenarijus "OUTPUT" taip pat gali nurodyti išvesties failo pavadinimą.

-O lygis

Jei lygis yra skaitinė vertė didesnė už nulį, ld optimizuoja produkciją. Tai gali užtrukti žymiai ilgiau, todėl tikriausiai turėtų būti įjungta tik galutiniam dvejetainiui.

-q

- emit-relocs

Palikite perkėlimo sekcijas ir turinį visiškai susietuose vykdomajose programose. Skelbimo nuorodų analizės ir optimizavimo įrankiai gali reikalauti šios informacijos, kad atliktų teisingus vykdomųjų failų pakeitimus. Tai padidina vykdomąjį failą.

Ši parinktis šiuo metu palaikoma tik ELF platformose.

-r

- susiejamas

Sukurkite perkeliamą produkciją --- ty sukurkite išvesties failą, kuris, savo ruožtu, gali būti indėlis į ld . Tai dažnai vadinama daline susiejimu . Kaip šalutinis efektas, aplinkoje, kurioje palaikomi standartiniai Unix magiškieji numeriai, ši parinktis taip pat nustato išvesties failo magišką numerį "OMAGIC". Jei ši parinktis nenurodyta, generuojamas absoliutus failas. Susiejant C + + programas, ši galimybė nebus išspręsta nuorodų į konstruktorius; Norėdami tai padaryti, naudokite -Ur .

Kai įvesties failas nėra tokio paties formato kaip išvesties failas, dalinis susiejimas palaikomas tik tuo atveju, jei šiame įvesties byloje nėra jokių perkėlimų. Įvairūs išvesties formatai gali turėti papildomų apribojimų; Pavyzdžiui, kai kurie "a.out" formato pagrindai neleidžia dalinai susieti su įvesties failais kitais formatais.

Ši parinktis yra tokia pati kaip ir- i .

-R failo pavadinimas

--just-simboliai = failo vardas

Perskaitykite simbolių pavadinimus ir jų adresus iš failo pavadinimo , bet ne perkelkite arba įtraukite į išvestį. Tai leidžia jūsų išvesties failui simboliškai nurodyti absoliučias atminties vietas, apibrėžtas kitose programose. Galite naudoti šią parinktį daugiau nei vieną kartą.

Jei norite suderinamumo su kitais ELF linkeriais, jei po -R parinktimi seka katalogo pavadinimas, o ne failo pavadinimas, jis laikomas parinktimi -rpath .

-s

- "Strip-all"

Išeikite visą informaciją apie simbolį iš išvesties failo.

-S

--strump-debug

Išeikite iš debitininko simbolio informaciją (bet ne visus simbolius) iš išvesties failo.

-t

- trauka

Spausdinkite įvesties failų pavadinimus, kaip ld juos apdoroja.

-T scenarijus

- script = scriptfile

Naudokite scriptfile kaip linkerio scenarijų. Šis scenarijus pakeičia ld numatytąjį susiejimo scenarijų (o ne jį papildo), todėl komandų faile reikia nurodyti viską, kas reikalinga išvesties failui apibūdinti. Jei scenarijų failas dabartiniame kataloge neegzistuoja, "ld" jį ieško kataloge, nurodytame bet kurios ankstesnės -L parinktys. Sukurta kelios- T parinktys.

-u simbolis

--undefined = simbolis

Įvesties simbolis įrašomas į išvesties failą kaip neapibrėžtas simbolis. Pavyzdžiui, tai gali paskatinti papildomų modulių susiejimą su standartinėmis bibliotekomis. -u gali būti kartojamas su skirtingais parinkčių argumentais, norint įvesti papildomus neapibrėžtus simbolius. Ši parinktis atitinka "EXTERN" nuorodų scenarijų komandą.

-Ur

Kitu atveju, išskyrus C + + programas, ši parinktis yra lygiavertė -r : sukuria perkeliamą produkciją --- ty išvesties failą, kuris savo ruožtu gali būti indėlis į ld . Susiejant C + + programas, -Ur neišsprendžia nuorodų į konstruktorius, kitaip nei -r . Jis neveikia, jei norite naudoti -Ur failus, kurie buvo susiję su -Ur ; Kai konstruktoriaus stalas yra pastatytas, jo negalima pridėti. Naudokite -Ur tik paskutinei dalinei nuorodai ir -r kitiems.

--unique [= SECTION ]

Sukuria atskirą išėjimo sekciją kiekvienai įvesties sekcijai, atitinkančiai SECTION , arba, jei trūksta neprivalomo laukelio " SECTION" argumento, kiekvienai našlaičių įvesties sekcijai. Režimų skyrius yra tas, kuris konkrečiai nenurodytas nuorodų scenarijuje. Šią parinktį galite naudoti kelis kartus komandinėje eilutėje; Tai užkerta kelią įprastam vienodo pavadinimo įvesties skirsnių sujungimui, antraeilės išvesties sekcijos paskyrimams linkerio scenarijuje.

-v

--versija

-V

Rodyti versijos numerį ld . Pasirinkus -V taip pat pateikiamos palaikomos emuliacijos.

-x

--Discard-all

Ištrinkite visus vietinius simbolius.

-X

--Diskardas - vietiniai gyventojai

Ištrinkite visus laikinus vietinius simbolius. Daugumai tikslų tai visi vietiniai simboliai, kurių pavadinimai prasideda nuo L.

-i simbolis

--trace-simbolis = simbolis

Spausdinkite kiekvieno susieto failo pavadinimą, kuriame rodomas simbolis . Ši parinktis gali būti suteikta bet kuriuo metu. Daugelyje sistemų reikia pridėti paryškinimą.

Ši parinktis yra naudinga, kai jūsų nuorodoje yra neapibrėžtas simbolis, bet nežinote, iš kur atsiranda nuoroda.

-Y takas

Įtraukite kelią į numatytąją bibliotekos paieškos kelią. Ši parinktis yra Solaris suderinamumas.

-z raktinis žodis

Pripažinti raktiniai žodžiai yra initfirst, interposition, loadfltr, nodefaultlib, nodelete, nodlopen, nodump, now, origin, combreloc, nocombreloc ir nocopyreloc. " Kiti raktiniai žodžiai ignoruojami "Solaris" suderinamumui. "initfirst" žymi objektą, kuris bus inicijuotas pirmą kartą paleidus prieš kitus objektus. "įstrižai" žymi objektą, kurio simbolių lentelė įsiterpia prieš visus simbolius, bet pagrindinį vykdomąjį failą. "loadfltr" žymi objektą, kurį jo filietai apdoroja iš karto paleidimo metu. "nodegaultlib" žymi objektą, kurio objekto priklausomybių paieška bus ignoruojama visi numatyti bibliotekos paieškos būdai. "nodelete" pažymi, kad objektas neturėtų būti iškraunamas paleidimo metu. "nodlopen" žymi objektą, kurio nėra "dlopen". "Node" pažymi, kad objektą negalima išmesti "dldump". "dabar" pažymi objektą su nejautriu paleidimo įpareigojimu. "kilmė" žymi objektą gali būti "$ ORIGIN". "defs" neleidžia neapibrėžtų simbolių. "muldefs" leidžia keletą apibrėžimų. "combreloc" sujungia kelis reloc sekcijas ir juos rūšiuoja, kad dinaminio simbolio paieškos cecho galima.

"nocombreloc" išjungia kelis reloc skirsnius, jungiančius. "nocopyreloc" išjungia kopijų redagavimą.

- ( archyvai -)

- pradžios grupių archyvai - end-group

Archyvai turėtų būti archyvų failų sąrašas. Jie gali būti arba tiesioginiai failų pavadinimai, arba -l parinktys.

Šie archyvai ieškomi pakartotinai, kol nebus sukurtos naujos neapibrėžtos nuorodos. Paprastai archyvas ieškomas tik vieną kartą, kai jis yra nurodytas komandinėje eilutėje. Jei šiame archyve reikalingas simbolis, norint išspręsti neapibrėžtą simbolį, nurodytą archyvo objekte, kuris vėliau pasirodo komandinėje eilutėje, linkeris negalės išspręsti šios nuorodos. Grupuojant archyvus, jie visi bus ieškomi pakartotinai, kol bus išspręstos visos galimos nuorodos.

Šios parinkties naudojimas turi didelę našumo kainą. Geriausia tai naudoti tik tada, kai yra neišvengiamos dvi ar daugiau archyvų apvalios nuorodos.

- Priimti-nežinomas-įėjimo arch

- ne-priimti-nežinomas-įėjimo arch

Sakoma linkeriui priimti įvesties failus, kurių architektūrą negalima atpažinti. Manoma, kad vartotojas žino, ką jie daro, ir sąmoningai nori susieti šiuos nežinomus įvesties failus. Tai buvo numatytasis linkerio elgesys prieš paleidžiant 2.14. Numatytasis įvykis nuo 2.14 paleidimo - atmesti tokius įvesties failus, todėl prie senosios elgsenos atkūrimo buvo pridėta parinktis --accept-unknown-input-arch .

- patvirtinti raktinį žodį

Ši parinktis ignoruojama " SunOS" suderinamumui .

-Bdynamic

-iš

-call_shared

Ryšys su dinaminėmis bibliotekomis. Tai tik prasminga platformose, kurioms palaikomos bendrai naudojamos bibliotekos . Paprastai ši parinktis yra tokia platforma pagal nutylėjimą. Skirtingos šios parinkties variantai yra suderinami su įvairiomis sistemomis. Šią parinktį galite naudoti keletą kartų komandinėje eilutėje: tai turi įtakos bibliotekai ieškant -l parinkčių, kurios seka ją.

-B grupė

Dinaminėje dalyje įrašykite "DT_FLAGS_1" žymą "DF_1_GROUP". Tai sukelia runtime linker tvarkyti šio objekto paiešką ir jo priklausomybes atlikti tik grupės viduje. - nenurodyta nenurodyta . Ši parinktis yra reikšminga tik ELF platformoms, kurios palaiko bendras bibliotekas .

-Bstatic

-dn

-non_shared

-statinis

Nejunkite nuorodų į bendrinamas bibliotekas. Tai tik prasminga platformose, kurioms palaikomos bendrai naudojamos bibliotekos. Skirtingos šios parinkties variantai yra suderinami su įvairiomis sistemomis. Šią parinktį galite naudoti keletą kartų komandinėje eilutėje: tai turi įtakos bibliotekai ieškant -l parinkčių, kurios seka ją.

-Bsymbolic

Kurdami bendrąją biblioteką, nuorodas į globalius simbolius priskirkite bendrai naudojamai bibliotekai, jei tokia yra, apibrėžimui. Paprastai programa, susieta su bendrai naudojama biblioteka, gali keisti bendrinamos bibliotekos apibrėžimą. Ši parinktis yra prasminga tik ELFplatforms, kurios palaiko bendras bibliotekas.

--check-sections

--Nekontrociniai skyriai

Prašo linkerio netikrinti skyrių adresų po to, kai jie buvo priskirti, norėdami pamatyti, ar yra kokių nors dalinių sutapimų. Paprastai "linkeris" atliks šį patikrinimą ir, jei nustatys kokį nors dalinį dubliavimą, jis sukurs tinkamus klaidų pranešimus. Linkeris žino apie mokesčius už sluoksnių sekcijas. Numatytasis elgesys gali būti atkurtas naudojant komandų eilutės jungiklį - žymės langelius .

--cref

Išvesties kryžminį nuorodų lentelę. Sukuriant nuorodų žemėlapio failą, kryžminė lentelė spausdinama į žemėlapio failą. Priešingu atveju jis spausdinamas standartine išvestimi.

Lentelės formatas yra tyčia paprasta, todėl ją, jei reikia, gali būti lengvai apdorojamas scenarijaus. Simboliai yra atspausdinti, surūšiuoti pagal pavadinimą. Kiekvienam simboliui pateikiamas failų pavadinimų sąrašas. Jei simbolis yra apibrėžtas, pirmasis failas yra apibrėžties vieta. Likusiuose failuose yra nuorodos į simbolį.

--no-define-common

Ši parinktis slopina adresų priskyrimą bendram simboliui. Komandos scenarijus "INHIBIT_COMMON_ALLOCATION" turi tą patį efektą.

" -no-define-common" parinktis leidžia atskirti sprendimą priskirti adresus į bendruosius simbolius pasirinkus išvesties failo tipą; priešingu atveju ne-perkeliamas išvesties tipas įpareigoja adresus priskirti bendram simboliui. Naudojant --no-define-common leidžia bendriems simboliams, kurie yra nurodomi iš bendrinamos bibliotekos, priskirti adresus tik pagrindinėje programoje. Tai pašalina nepanaudotą pasikartojančią erdvę bendrinamoje bibliotekoje ir taip pat užkerta kelią bet kokiai galimai painiavai dėl neteisingo dublikato pašalinimo, kai yra daug dinaminių modulių su specializuotais paieškos paleidimo simbolių raiškos būdais.

--defsym simbolis = išraiška

Išvesties byloje sukurkite pasaulinį simbolį, kuriame yra absoliutusis adresas, nurodytas išraiška . Galite naudoti šią parinktį tiek kartų, kiek reikia, norėdami apibrėžti kelis simbolius komandinėje eilutėje. Reikšmė šiame kontekste palaiko ribotą aritmetinę formą: galite nurodyti šešioliktainę konstantą arba esamo simbolio pavadinimą arba naudoti "+" ir "-", kad pridėtumėte ar atimtumėte šešioliktainius konstantus ar simbolius. Jei jums reikalingos išsamesnės išraiškos, apsvarstykite galimybę naudoti scenarijaus nuorodą komandų kalbą. Pastaba: tarp simbolio , vienodo ženklo (`` = '') ir išraiškos neturėtų būti tarpų.

--demangle [= stilius ]

- ne-demangle

Šios parinktys kontroliuoja, ar simbolių pavadinimus reikia atskirti per klaidų pranešimus ir kitą išvestį. Kai linkeriui pasakoma, kad jis turi suskaidyti, jis bando pateikti simbolių pavadinimus lengvai suprantamu būdu: juose išdėstomi pagrindiniai požymiai, jei jie naudojami objekto failo formatu ir konvertuoja C ++ sugadintus simbolių pavadinimus į vartotojo skaitomuosius vardus. Skirtingi kompiliatoriai turi skirtingus mangling stilius. Pasirinktinas atskyrimo stiliaus argumentas gali būti naudojamas norint pasirinkti tinkamą kompiliatoriaus atminimo stilių. Linker bus demangle, jei nebus nustatytas aplinkos kintamasis COLLECT_NO_DEMANGLE . Šios parinktys gali būti naudojamos norint nepaisyti numatytojo.

--Dynamic-linker failas

Nustatykite dinaminio linkerio pavadinimą. Tai prasminga tik generuojant dinamiškai susietus ELF vykdomąjį failą. Numatytoji dinaminė linker paprastai yra teisinga; nenaudokite to, nebent žinote, ką darai.

--embedded-relocs

Ši parinktis yra prasminga tik susiejant MIPS įterptą PIC kodą, sukurtą "-membedded-pic" parinktimi GNU kompiliatoriui ir surinkėjui. Tai sukelia linkerio sukurti lentelę, kuri gali būti naudojama runtime, norint perkelti bet kokius duomenis, kurie buvo statiškai inicijuojami rodyklės vertes. Žr. "Testuite / ld-empic" kodą išsamią informaciją.

- fataliniai įspėjimai

Visus įspėjimus traukite kaip klaidas .

--force-exe-priesaga

Įsitikinkite, kad išvesties failas turi .exe priesagą.

Jei sėkmingai sukurtas visiškai susietas išvesties failas neturi priedėlio " .exe " arba " .dll ", ši parinktis verčia linkerį nukopijuoti išvesties failą į tą patį pavadinimą su ".exe" priesaga. Ši parinktis yra naudinga, kai "Microsoft Windows" pagrindiniame kompiuteryje naudoja nemodifikuotus " Unix" failų rinkmenas , nes kai kurioms " Windows" versijoms nebus paleista vaizdo, nebent jis baigiasi ". Exe" priesaga.

--no-gc-sekcijos

--gc-skyriai

Įgalinti nepanaudotų įvesties sekcijų šiukšliadėžę. Tai ignoruojama tikslams, kurie nepalaiko šios parinkties. Ši parinktis nesuderinama su -r , taip pat neturėtų būti naudojama su dinaminiu susiejimu. Numatytasis elgesys (nevykdant šio šiukšliadėžės ) gali būti atstatytas nurodant komandų eilutės " --no-gc-sections ".

--Pagalba

Spausdinkite komandinės eilutės parinkčių santrauką į standartinę išvestį ir išeikite.

- Tikslinė pagalba

Spausdinkite visų standartinių išėjimų ir išėjimų esančių konkrečių parinkčių santrauką.

-Kapas mapfile

Spausdinkite nuorodų žemėlapį į failų mapfile . Žr aprašymą -M parinktį aukščiau.

--ne-keep-memory

Ld paprastai optimizuoja greitį per atminties naudojimą, kai kaupiasi atmintyje esančių įvesties failų simbolių lentelės. Ši parinktis ld nurodo optimizuoti atminties panaudojimą, jei reikia, perskaičiuodama simbolių lenteles. Tai gali prireikti, jei ld trūksta atminties, kai susiesite didelį vykdomąjį failą.

- ne-undefined

-z defs

Paprastai, kai kuria ne simbolinę bendrinamą biblioteką, neapibrėžti simboliai leidžiami ir lieka išspręsti paleidimo įkėlimo metu. Šios parinktys neleidžia tokio neapibrėžto simbolio.

- visiškas kartotinis apibrėžimas

-z muldefs

Paprastai, kai simbolis yra apibrėžtas kelis kartus, linkeris praneša apie mirtiną klaidą. Šios parinktys leidžia keletą apibrėžimų ir bus naudojamas pirmasis apibrėžimas.

--Dabar-shlib-undefined

Leisti nenustatytus simbolius bendrinamuosiuose objektuose net tada, kai yra nustatytas - ne-undefined. Grynasis rezultatas bus tas, kad nenustatyti simboliai įprastiniuose objektuose vis tiek sukelia klaidą, bet neapibrėžti simboliai bendrinamuosiuose objektuose bus ignoruojami. Įdiegus no_undefined daroma prielaida, kad runtime linker užblokuos nenustatytus simbolius. Tačiau yra bent viena sistema (BeOS), kuriuose neapibrėžti simboliai bendriose bibliotekose yra įprasti, nes branduolys juos pakeičia įkrovos metu, norėdami pasirinkti, kuri funkcija yra tinkamiausia dabartinei architektūrai. IE dinamiškai pasirenka tinkamą įvesties funkciją. Matyt, taip pat yra įprasta, kad HPPA bendrai naudojamos bibliotekos turi neapibrėžtus simbolius.

- ne-undefined-versija

Paprastai, kai simbolis turi neapibrėžtą versiją, linkeris jį ignoruos. Ši parinktis neleidžia simbolių su neapibrėžta versija, o vietoje to bus pateikta netikėta klaida.

--no-warn-neatitikimas

Paprastai ld pateiks klaidą, jei bandysite susieti failų, kurie dėl kokių nors priežasčių nesuderinami, galbūt dėl ​​to, kad jie buvo sukonstruoti skirtingiems procesoriams ar skirtingiems endiannesses. Ši parinktis nurodo ld, kad ji turėtų tyliai leisti tokias galimas klaidas. Ši parinktis turėtų būti naudojama tik atsargiai, tais atvejais, kai atlikote tam tikrus specialius veiksmus, kurie užtikrina, kad nuorodų klaidos yra netinkamos.

- ne visos archyvas

Išjunkite funkciją " viskas archyvas " vėlesniems archyvo failams.

--noinhibit-exec

Išsaugokite vykdomąjį išvesties failą, kai jis vis dar bus naudojamas. Paprastai linkeris nepateiks išvesties failo, jei ryšio metu jis susiduria su klaidomis; jis išsijungia nepateikus išvesties failo, kai jis bet kokią klaidą išduoda.

-nostdlib

Tik paieškos bibliotekos katalogai, aiškiai nurodyti komandinėje eilutėje. Linkerio scenarijose nurodyti bibliotekos katalogai (įskaitant komandinės eilutės nurodytus nuorodų scenarijus) yra ignoruojami.

--format produkcijos formatą

ld gali būti sukonfigūruotas palaikyti daugiau nei vieną objekto failo tipą. Jei jūsų ld yra sukonfigūruotas tokiu būdu, galite naudoti parinktį -oformat nustatyti išvesties objekto failo dvejetainį formatą. Net tada, kai ld yra sukonfigūruotas palaikyti alternatyvius objektų formatus, jums paprastai nereikia tai nurodyti, nes ld turi būti sukonfigūruotas kaip numatytasis išvesties formatas, labiausiai įprastas formatas kiekviename kompiuteryje. išvesties formatas yra tekstinė eilutė, tam tikro formato pavadinimas, kurį palaiko BFD bibliotekos. (Galima nurodyti dvejetainius formatus su objdump-i .) Komandos scenarijus "OUTPUT_FORMAT" taip pat gali nurodyti išvesties formatą, tačiau ši parinktis ją pakeičia.

-qmagic

Ši parinktis yra ignoruojama "Linux" suderinamumui.

-kaip

Ši parinktis ignoruojama dėl SVR4 suderinamumo.

--relax

Galima naudoti su mašina susijusius efektus. Ši parinktis palaikoma tik keliais tikslais.

Kai kuriose platformose parinktis -relax atlieka globalius optimizavimus, kurie tampa įmanomi, kai "linker" sprendžia adresą programoje, pvz., Atsipalaiduoti adreso režimai ir sintezuojant naujas instrukcijas išvesties objekto failo.

Kai kuriose platformose tokie laiko optimizavimo ryšiai gali padaryti simbolinę įvykdomos vykdomosios versijos neįmanoma. Tai žinoma, kad Matsushita MN10200 ir MN10300 šeimos procesoriai.

Platformose, kur tai nepalaikoma, --relax yra priimtas, bet ignoruojamas.

--retain-symbols-failo failo vardas

Išsaugokite tik simbolius, nurodytus failo failo pavadinime , atmesdami visus kitus. failo pavadinimas yra tiesiog plokščias failas, kurio vienas simbolis yra eilutėje. Ši parinktis yra ypač naudinga aplinkose (pvz., "VxWorks"), kur didelė pasaulinė simbolių lentelė kaupiama palaipsniui, siekiant išsaugoti laikinąją atmintį.

--Perkstant simbolių failas nenukreipia neapibrėžtų simbolių ar simbolių, reikalingų perkėlimams.

Komandinės eilutėje galite nurodyti tik vieną simbolių failą . Tai pakeičia -s ir -S .

-rpath dir

Įtraukite katalogą į bibliotekos paleidimo paieškos kelią. Tai naudojama susiejant ELF vykdomąjį su bendraisiais objektais. Visi -rpath argumentai yra sujungti ir perkelti į runtime linker, kuris juos naudoja ieškant bendrų objektų vykdymo metu. " -rpath" parinktis taip pat naudojama nustatant bendrai naudojamus objektus, kurie reikalingi bendrai naudojamiems objektams, aiškiai įtrauktiems į nuorodą; žr. parinkties " -rpath-link" aprašymą. Jei -rpath nenaudojamas susiejant vykdomąjį ELF, aplinkos kintamojo "LD_RUN_PATH" turinys bus naudojamas, jei jis bus apibrėžtas.

" -rpath" parinktis taip pat gali būti naudojama "SunOS". Pagal numatytuosius nustatymus "SunOS", linkeris sudarys paleidimo paieškos pataisą iš visų -L parinkčių, kurioms jis skirtas. Jei naudojama -rpath parinktis, vykdymo paieškos kelias bus suformuotas tik naudojant -rpath parinktis, ignoruojant -L parinktis. Tai gali būti naudinga naudojant "gcc", kuris prideda daugybę -L parinkčių, kurios gali būti įdiegtos į "NFS" failų sistemas.

Jei norite suderinamumo su kitais ELF linkeriais, jei po -R parinktimi seka katalogo pavadinimas, o ne failo pavadinimas, jis laikomas parinktimi -rpath .

-rpath-link DIR

Naudojant ELF arba SunOS, viena bendroji biblioteka gali reikalauti kito. Taip atsitinka, kai nuorodoje "ld-shared" yra bendrai naudojama biblioteka kaip vienas iš įvesties failų.

Kai linkeris susiduria su tokia priklausomybe, kai atlieka nepaskirstytą, nepakeičiamą nuorodą, ji automatiškai bandys surasti reikiamą bendrinamą biblioteką ir įtraukti ją į nuorodą, jei ji nėra aiškiai nurodyta. Tokiu atveju -rpath-link parinktis nurodo pirmą rinkmenų paiešką kataloge. Parinktis -rpath-link gali nurodyti katalogų pavadinimų seką, nurodydama pavadinimų sąrašą, atskirtus dvitaškiais, arba kelis kartus.

Ši parinktis turėtų būti naudojama atsargiai, nes ji ignoruoja paieškos kelią, kuris galėjo būti sunkiai surinktas į bendrą biblioteką. Tokiu atveju netyčia galima naudoti kitokią paieškos kelią, negu "runtime linker".

Linkeris naudoja šiuos paieškos kelius, norėdami rasti reikalingas bendrinamas bibliotekas.

1.

Bet kokie katalogai, kuriuos nurodo " -rpath-link" parinktys.

2.

Bet kurie katalogai, nurodyti pagal -rpath parinktis. Skirtumas tarp -rpath ir -rpath-link yra tai, kad katalogai, nurodyti -rpath parinktys yra įtrauktos į vykdomąjį ir naudojamos runtime, o -rpath-link parinktis veikia tik sujungimo metu. Tai tik vietinei linkerei.

3.

Jei naudojate ELF sistemą, jei nebuvo naudojamos "rpath" ir "rpath-link" parinktys, ieškokite aplinkos kintamojo "LD_RUN_PATH" turinio. Tai tik vietinei linkerei.

4.

Jei SunOS nėra, jei -rpath parinktis nebuvo naudojama, ieškokite bet kokių katalogų, nurodytų naudojant -L parinktis.

5.

Vietiniam nuorodiniam elementui aplinkos kintamojo "LD_LIBRARY_PATH" turinys.

6.

Vietiniam ELF linkeriui, bendrinamos bibliotekos "DT_RUNPATH" arba "DT_RPATH" kataloguose ieškoma bendrų bibliotekų, reikalingų jai. Įrašai "DT_RPATH" yra ignoruojami, jei egzistuoja "DT_RUNPATH" įrašai.

7.

Numatytieji katalogai, paprastai / lib ir / usr / lib .

8

Jei vietinis linkeris yra ELF sistemoje, jei failas /etc/ld.so.conf egzistuoja, kataloge, esančių toje byloje.

Jei reikalinga bendrai naudojama biblioteka nerasta, linkeris išleidžia įspėjimą ir tęsia nuorodą.

- bendrai

-Sprendžiama

Sukurkite bendrintą biblioteką. Šiuo metu tai palaikoma tik ELF, XCOFF ir SunOS platformose. "SunOS", linkeris automatiškai sukurs bendrąją biblioteką, jei -e parinktis nebus naudojama ir nuorodoje yra neapibrėžtų simbolių.

--Sort-common

Ši parinktis nurodo ld rūšiuoti bendrus simbolius pagal jų dydį, kai jie pateikiami atitinkamose išvesties sekcijose. Pirma atėjai visi vieno baito simboliai, tada visi du baitai, tada visi keturi baitai, o paskui visa kita. Tai yra užkirsti kelią tarpų tarp simbolių dėl išlyginimo apribojimų.

--Paskirstyta pagal failą [ dydis ]

Panašus į --split-by-reloc, bet sukuria naują išvesties sekciją kiekvienam įvesties failui, kai pasiekiamas dydis . dydis pagal nutylėjimą yra 1 dydis, jei jo nėra.

- pasiskirstymas pagal reloc [ count ]

Bando sukurti papildomų sekcijų išvesties byloje, kad nė vienoje failo išvesties sekcijoje nebūtų daugiau nei skaičių perkėlimų. Tai naudinga generuojant didelius perkeliamus failus, kuriuos galima atsisiųsti į tam tikrus realaus laiko branduolius su COFF objekto failo formatu; nes COFFcannot atstovauja daugiau kaip 65535 perkėlimų į vieną skyrių. Atkreipkite dėmesį, kad tai nepavyks dirbti su objekto failų formatais, kurie nepalaiko savavališkų sekcijų. Linkeris nesiskirstys atskirų įvesties skirsnių perskirstymui, taigi, jei vienoje įvesties dalyje yra daugiau nei skaičiavimo perkėlimų, vienoje išvesties sekcijoje bus toks daug perkėlimų. Numatytasis skaičius yra 32768.

--stats

Apskaičiuokite ir rodykite statistiką apie linkerio veikimą, pvz., Vykdymo laiką ir atminties naudojimą.

- tradicinis formatas

Kai kuriems tikslams, kai kurių esamų nuorodų išvestis kai kuriais atvejais yra skirtinga ld produkcija. Šis jungiklis reikalauja ld naudoti vietoj to tradicinį formatą.

Pavyzdžiui, SunOS, ld derina įrašų dubliavimo simbolių eilutės lentelėje. Tai gali sumažinti išvesties failo dydį ir visą klaidų informaciją daugiau kaip 30 proc. Deja, SunOS "dbx" programa negali perskaityti gautos programos ("gdb" neturi problemų). " Tradicinio formato" jungiklis nurodo ld nepalikti pasikartojančių įrašų.

--Sektoriaus pradžios sekcijos pavadinimas = org

Suraskite skyrių išvesties byloje absoliučiu adresu org . Galite naudoti šią parinktį tiek kartų, kiek reikia, norėdami rasti kelis skyrius komandinėje eilutėje. org turi būti vienas šešioliktainis sveikasis skaičius; dėl suderinamumo su kitais linkeriais galite praleisti pirmaujančią 0x, paprastai susijusią su šešioliktainėmis vertėmis. Pastaba: tarp skirsnio pavadinimo , lygių ženklo (`` = '') ir org neturi būti tarpų.

-Tbss org

-Tada org

-Ttext org

Naudokite org as pradinį adresą --- atitinkamai --- "bss", "data" arba "teksto" segmento išvesties failo. org turi būti vienas šešioliktainis sveikasis skaičius; dėl suderinamumo su kitais linkeriais galite praleisti pirmaujančią 0x, paprastai susijusią su šešioliktainėmis vertėmis.

- dll-verbose

--verbose

Parodykite "ld" versijos numerį ir pateikite palaikomų linkerių emuliacijų sąrašą. Rodoma, kokius įvesties failus galima ir negalima atidaryti. Parodykite linkerio scenarijų, kurį naudoja linkeris.

--version-script = versija-scriptfile

Nurodykite versijos scenarijaus pavadinimą linkeriui. Tai paprastai naudojama kuriant bendras bibliotekas, norint nurodyti papildomą informaciją apie sukurtos bibliotekos versijos heirarchiją. Ši parinktis yra reikšminga tik ELF platformoms, kurios palaiko bendras bibliotekas.

--Svarbu - dažnas

Perspėti, kai bendras simbolis yra derinamas su kitu bendru simboliu arba simboliu. Unix "linkeriai" leidžia tai šiek tiek neapibrėžta praktika, tačiau kai kurių kitų operacinių sistemų nuorodų nėra. Ši parinktis leidžia rasti galimas problemas, susijusias su bendrų simbolių sujungimu. Deja, kai kurios C bibliotekos naudoja šią praktiką, todėl galite gauti įspėjimų apie simbolius bibliotekose ir programose.

Čia yra trys pasauliniai simboliai, iliustruoti čia C pavyzdžiai:

int i = 1;

Apibrėžimas, kuris yra išvesties failo inicijuotų duomenų skyriuje.

extern int i;

Neapibrėžta nuoroda, kuri nesuteikia vietos. Kintamasis kažkur turi būti apibrėžimas arba bendras simbolis.

int i;

Bendras simbolis. Jei kintamasis turi tik vieną (vieną ar daugiau) bendrų simbolių, jis patenka į išvesties failo neinitializuotą duomenų lauką. Linkeris sujungia keletą bendrų tos pačios kintamojo simbolių į vieną simbolį. Jei jie yra skirtingo dydžio, jis pasirenka didžiausią dydį. Linkeris paverčia bendrą simbolį deklaracija, jei yra tas pats kintamasis.

The -warn-common variantas gali sukurti penkių rūšių įspėjimus. Kiekvienas įspėjimas susideda iš eilučių pora: pirmasis apibūdina tik susidurtą simbolį, o antrasis apibūdina ankstesnį simbolį, kuris susiduria su tuo pačiu pavadinimu. Vienas ar abu iš abiejų simbolių bus bendras simbolis.

1.

Bendro simbolio įvedimas į nuorodą, nes simbolis jau yra apibrėžimas.

(
): warning: common of ` 'overridden by definition (
): warning: defined here

2.

Bendrojo simbolio įvedimas į nuorodą, nes susiduriama su vėlesniu simbolio apibrėžimu. Tai yra tas pats kaip ankstesnis atvejis, išskyrus tai, kad simboliai susiduria kitokia tvarka.

(
): warning: apibrėžimas ` 'svarbiausias common (
): warning: common here

3.

Susidaro bendras simbolis su ankstesniu tokio dydžio bendro simboliu.

(
): įspėjimas: kelis dažnius iš ` ' (
): įspėjimas: ankstesnis dažnas čia

4.

Sujungiamas bendras simbolis su ankstesniu didesnio bendro simboliu.

(
): warning: common <`symbol> 'overridden by larger common (
): warning: big common is here

5.

Sujungiamas bendras simbolis su ankstesniu mažesniu bendru simboliu. Tai yra tas pats kaip ankstesnis atvejis, išskyrus tai, kad simboliai susiduria kitokia tvarka.

(
): įspėjimas: dažnas simbolis <> viršesnė mažesnė common (
): įspėjimas: mažesnis dažnas čia

--Įrangos konstruktoriai

Įspėti, jei naudojami visi pasauliniai konstruktoriai. Tai naudinga tik keletą objekto failų formatų. Formatuose, pvz., COFF arba ELF, nuorodų generatorius negali aptikti pasaulinių konstruktorių naudojimo.

--warn-multiple-gp

Įspėti, jei išvesties byloje reikalaujama kelių pasaulinių žymiklių reikšmių. Tai tik prasminga tam tikriems procesoriams, pvz., "Alfa". Konkrečiai, kai kurie procesoriai specialiame skyriuje pateikia didelės vertės konstantas. Specialus registras (pasaulinis žymeklis) nurodo į šio skyriaus vidurį, todėl pastovus efektyvus įkėlimas naudojant bazinį registrą yra santykinis adresavimo režimas. Kadangi santykinis bazinio registro poslinkis yra fiksuotas ir santykinai nedidelis (pvz., 16 bitų), tai riboja maksimalų pastovaus baseino dydį. Taigi didelėse programose dažnai reikia naudoti keletą globalių žymeklių verčių, kad būtų galima spręsti visas galimas konstantas. Pasirinkus šią parinktį įspėjimas bus išduodamas kiekvieną kartą, kai įvyks šis atvejis.

- pakviesk vieną kartą

Tik perspėkite vieną kartą už kiekvieną neapibrėžtą simbolį, o ne vieną kartą per modulį, kuris nurodo jį.

--Sukurtas skyrius -lygiai

Įspėti, jei išvesties sekcijos adresas pasikeitė dėl suderinimo. Paprastai derinimą nustato įvesties skiltis. Adresas bus pakeistas tik tuo atveju, jei jis nėra aiškiai nurodytas; tai yra, jei komanda "SKIRSNIS" nenurodo pradinio adreso skiltyje.

- viskas archyvas

Kiekvienam archyvui, nurodytam komandinėje eilutėje po parinktimi " viskas archyvas" , kiekvienoje objekto byloje įrašykite archyvą nuorodoje, o ne ieškokite reikalingų objektų failų archyvo. Tai paprastai naudojama archyvo failo įjungimui į bendrą biblioteką, priverčiant kiekvieną objektą įtraukti į gautą bendrąją biblioteką. Ši parinktis gali būti naudojama daugiau nei vieną kartą.

Du užrašai, kai naudojate šią parinktį iš gcc: Pirma, gcc nežino apie šią parinktį, taigi turėsite naudoti -Wl, -visus archyvus . Antra, nepamirškite naudoti -Wl, -no-full-archive po savo archyvų sąrašo, nes gcc pridės savo nuorodą į savo archyvų sąrašą ir galbūt nenorite, kad ši vėliavėlė taip pat paveiktų.

- apvyniokite simbolį

Naudokite simbolio apvyniojimo funkciją. Bet kokia neapibrėžta nuoroda į simbolį bus išspręsta į "__wrap_symbol". Bet kuri neapibrėžta nuoroda į "__real_symbol" bus išspręsta simboliu .

Tai gali būti naudojama aprūpinti sistemą funkcija. Įpakavimo funkcija turėtų būti vadinama "__wrap_symbol". Jei jis nori skambinti sistemos funkcija, jis turėtų vadinti "__ real_symbol".

Štai trivialus pavyzdys:

void * __wrap_malloc (int c) {printf ("malloc paragino su% ld \ n", c); grįžti __real_malloc (c); }

Jei į šį failą susiesite kitą kodą naudodami --wrap malloc , visi skambučiai į "malloc" pavadins funkciją "__wrap_malloc". Kvietimas "__real_malloc" į "__wrap_malloc" paskambins į tikrąją "malloc" funkciją.

Galbūt norėsite pateikti "__real_malloc" funkciją taip, kad nuorodos be " wrap" galimybės būtų sėkmingos. Jei tai padarysite, neturėtumėte įdėti "__ real_malloc" apibrėžimo toje pačioje byloje kaip "__wrap_malloc"; Jei tai padarysite, surinkėjas gali išspręsti skambutį, kol linkeris galės sukomponuoti jį į "malloc".

--enable-new-dtags

--Disable-new-dtags

Šis linkeris gali sukurti naujas dinamines žymes ELF. Bet senesnės ELF sistemos gali jų nesuprasti. Jei nurodysite - enable-new-dtags , dinaminės žymos bus sukurtos pagal poreikį. Jei nurodysite --disable-new-dtags , naujos dinaminės žymos nebus sukurtos. Pagal numatytuosius nustatymus naujos dinaminės žymos nėra sukurtos. Atminkite, kad šios parinktys yra prieinamos tik FORF sistemoms.

"I386 PE linker" palaiko " shared option", o tai reiškia, kad išvestis yra dinamiškai susieta biblioteka (DLL), o ne įprasta vykdomoji programa. Jei naudosite šią parinktį, turėtumėte pavadinti išvestį "* .dll". Be to, linkeris visiškai palaiko standartinius "* .def" failus, kurie gali būti nurodyti komandinėje eilutėje kaip objekto failas (iš tikrųjų, jis turėtų būti pateiktas archyvuose, iš kurių jis eksportuoja simbolius, siekiant užtikrinti, kad jie susieja, tiesiog kaip normalus objekto failas).

Be parinkčių, naudojamų visiems tikslams, "i386 PE linker" palaiko papildomas komandinės eilutės parinktis, kurios būdingos tikslui i386 PE. Parinktys, kuriose yra verčių, gali būti atskirtos nuo jų reikšmių arba tarpu arba lygiaverčiu ženklu.

--add-stdcall-slapyvardis

Jei nurodomas, simboliai su "stdcall" priesaga (@ nn ) bus eksportuojami kaip yra, taip pat su sufiksu.

- pagrindinio failo failas

Naudokite failą kaip failo pavadinimą, kuriame norite išsaugoti visų perkėlimų pagrindinius adresus, reikalingus generuoti DLL su dlltool .

- dll

Sukurkite DLL vietoj įprasto vykdomojo failo. Taip pat galite naudoti "bendrai" arba nurodyti "BIBLIOTEKA" tam tikrame ".def" faile.

--enable-stdcall-fixup

--disable-stdcall-fixup

Jei nuoroda ras simbolį, kurio jis negali išspręsti, jis bandys atlikti "neaiškų susiejimą", ieškodamas kito apibrėžto simbolio, kuris skiriasi tik simbolio pavadinimo formatu (cdecl vs stdcall) ir išspręs šį simbolį susiejant į rungtynes. Pavyzdžiui, neapibrėžtas simbolis "_foo" gali būti susietas su funkcija "_foo @ 12", arba neapibrėžtas simbolis "_bar @ 16" gali būti susietas su funkcija "_bar". Kai linkeris tai daro, jis spausdina įspėjimą, nes paprastai jis neturėtų susieti, bet kartais importuojant iš trečiųjų šalių DLL sukurtas bibliotekas gali reikėti naudoti šią funkciją. Jei nurodysite - enable-stdcall-fixup , ši funkcija bus visiškai įjungta, o įspėjimai nebus atspausdinti. Jei nurodysite --disable-stdcall-fixup , ši funkcija yra išjungta ir tokie neatitikimai laikomi klaidomis.

--export-visi simboliai

Jei nurodoma, visi DLL kūrimo objektų globalūs simboliai bus eksportuojami DLL. Atminkite, kad tai yra numatytoji nuostata, jei kitu atveju nebūtų eksportuotų simbolių. Kai simboliai yra aiškiai eksportuojami per DEF failus arba netiesiogiai eksportuojami per funkcijų atributus, pagal numatytuosius nustatymus neeksportuojama nieko kito, nebent ši parinktis būtų pateikta. Atminkite, kad simboliai "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" ir "impure_ptr" nebus eksportuojami automatiškai. Be to, simboliai, importuoti iš kitų DLL, nebus reeksportuojami, taip pat nebus simboliai, nurodantys DLL vidinį išdėstymą, pvz., Tas, kuris prasideda "_head_" arba baigiasi "_iname". Be to, nebus eksportuojami jokie "libgcc", "libstd ++", "libmingw32" ar "crtX.o" simboliai. Simboliai, kurių pavadinimai prasideda "__rtti_" arba "__builtin_", nebus eksportuojami, norint padėti C ++ DLL. Galiausiai pateikiamas išsamus cygwin-private simbolių, kurie nėra eksportuojami, sąrašas (žinoma, tai taikoma tada, kai kuriamos DLL, skirtos Cygwin tikslams).

Šie "cygwin-excludes" yra: "_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" "ir" environ ".

--exclude-simbolių simbolis , simbolis , ...

Nurodo simbolių sąrašą, kuris neturėtų būti automatiškai eksportuojamas. Simbolių pavadinimai gali būti apriboti kableliais ar dvitaškiais.

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

Nurodo archyvinių bibliotekų, iš kurių simboliai neturėtų būti automatiškai eksportuojami, sąrašas. Bibliotekų pavadinimai gali būti apriboti kableliais ar dvitaškiais. Nurodant "--exclude-libs ALL" visose archyvų bibliotekose neįtraukiami simboliai iš automatinio eksporto. Visiškai eksportuojami simboliai, aiškiai išvardyti .def failo versijoje, nepriklausomai nuo šios parinkties.

--file-alignment

Nurodykite failo derinimą. Failo sekcijos visuomet prasideda failų sujungimais, kurie yra šio skaičiaus kartotiniai. Šis numatytasis skaičius yra 512.

- rezervinis rezervas

--Keisti rezervą , įsipareigoti

Nurodykite atminties kiekį, kurį norite rezervuoti (ir pasirinktinai įsipareigoti), kad būtų naudojamas kaip šios programos krūtinė. Numatytasis yra rezervuotas 1 MB, 4K priskirtas.

- simbolinė bazinė vertė

Naudokite vertę kaip pagrindinę jūsų programos ar DLL adresą. Tai žemiausia atminties vieta, kuri bus naudojama, kai įkeliama jūsų programa ar DLL. Siekiant sumažinti poreikį perkelti ir pagerinti DLL veikimą, kiekvienas turėtų turėti unikalų pagrindinį adresą, o ne sutapti su kitais DLL. Numatytasis yra 0x400000 vykdomiesiems failams, o 0x10000000 - DLL.

--Kill-at

Jei jis bus pateiktas, prieš juos eksportuojant bus pašalinti simboliai "stdcall" (@ nn ).

--major-image-version vertė

Nustato pagrindinį skaičių "` image version ''. Numatyta 1.

--major-os-version vertė

Nustato pagrindinį "os versijos" skaičių. Pagal numatytuosius nustatymus - 4.

- didžioji-posistemio versijos vertė

Nustato pagrindinį "" posistemio versijos "skaičių. Pagal numatytuosius nustatymus - 4.

--minor-image-version vertė

Nustato nedidelį "" vaizdo versijos "skaičių". Numatyta 0.

--minor-os-version vertė

Nustato nedidelį "os versijos" skaičių. Numatyta 0.

--minor-subsystem-version vertė

Nustato nedidelį "" posistemio versijos "skaičių. Numatyta 0.

- failas išvesties-def

Linkeris sukurs failo failą, kuriame bus DEF failas, atitinkantis DLL, kurį generuoja linkeris. Ši DEF byla (kuri turėtų būti vadinama "* .def") gali būti naudojama importo bibliotekai su "dlltool" sukurti arba gali būti naudojama kaip nuoroda į automatiškai arba netiesiogiai eksportuotus simbolius.

- "out-implib" failas

Linkeris sukurs failo failą, kuriame bus importo lib, atitinkantis DLL, kurį generuoja linkeris. Ši importo lib (kuri turėtų būti vadinama "* .dll.a" arba "* .a", gali būti naudojama, kad susieti klientus su sukurta DLL; ši elgesys leidžia praleisti atskirą "dlltool" importo bibliotekos kūrimo veiksmą.

--enable-auto-image-base

Automatiškai parinkti DLL atvaizdų bazę, jei nenurodyta, naudojant argumentą "--image-base". Naudodamiesi dllname sukurtu maišu, sukuria unikalią kiekvieno DLL vaizdo bazę, išvengiama susidūrimų ir perkėlimų į atmintį, dėl kurių programos vykdymas gali būti atidėtas.

--Disable-auto-image-base

Negalima automatiškai generuoti unikalaus vaizdo bazės. Jei nėra vartotojo nurodytos vaizdo bazės ("--image-base"), tada naudokite numatytąją platformą.

--dll-paieškos prefikso eilutė

Jei dinamiškai susiejate dll be importo bibliotekos, ieškokite " .dll", o ne "lib .dll". Toks elgesys leidžia lengvai atskirti DLL, sukurtus įvairiems "platformos formoms": vietinėms, cygwin, uwin, pw ir tt Pavyzdžiui, cygwin DLL paprastai naudoja "-dll-search-prefix = cyg".

--enable-auto-import

Ar sudėtingą nuorodą "_symbol" į "__imp__symbol" DATA importuoti iš DLL, ir sukurti reikalingus thunking simbolius kuriant importo bibliotekos su tais DATAexports. Tai apskritai bus "tiesiog dirbti" --- bet kartais jūs galite pamatyti šį pranešimą:

"kintamasis " negali būti automatiškai importuotas. Norėdami sužinoti daugiau, skaitykite ld's "--enable-auto-import" dokumentus. "

Ši žinutė atsiranda, kai kai (sub) išraiškos kreipiasi į adresą, kurį galiausiai duoda dviejų konstantų suma (Win32 importo lentelės leidžia tai padaryti tik vieną). Egzistinėse situacijose, kuriose tai gali atsirasti, yra prieigos prie DLL importuotų struktūrinių kintamųjų narių, taip pat pastovaus indekso į masyvo kintamąjį, importuotą iš DLL. Bet koks daugkartinis kintamasis (masyvai, struktūros, ilgas tęsinys ir tt) gali sukelti šią klaidos būklę. Tačiau, neatsižvelgiant į tikslią eksportuojamo kintamojo tipo duomenų tipą, ld visada jį aptiks, išduos įspėjimą ir išeis.

Yra keletas būdų, kaip įveikti šį sunkumą, nepriklausomai nuo eksportuojamo kintamojo duomenų tipo:

Vienas iš būdų yra naudoti "switch-run-run-time-pseudo-reloc". Tai palieka užduotis pritaikyti nuorodas į jūsų kliento kodą runtime aplinkai, todėl šis metodas veikia tik tada, kai vykdymo aplinka palaiko šią funkciją.

Antrasis sprendimas yra priversti vieną iš "konstantų" būti kintamuoju, tai yra, nežinomas ir ne optimizuojamas kompiliavimo metu. Masyvams yra dvi galimybės: a) sudaryti indekso (masyvo adresą) kintamąjį arba b) padaryti "nuolatinį" indeksą kintamu. Taigi:

extern tipas extern_array []; extern_array [1] -> {lakiųjų tipas * t = extern_array; t [1]}

arba

extern tipas extern_array []; extern_array [1] -> (lakieji int t = 1; extern_array [t]}

Struktūrai (ir daugeliui kitų daugiažodžių duomenų tipų) vienintelis variantas yra sukurti struktūrą (arba ilgalaikį, arba ...) kintamąjį:

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

arba

extern long long extern_ll; extern_ll -> {lakios ilgos ilgos * local_ll = & extern_ll; * local_ll)

Trečias būdas spręsti šį sunkumą yra atsisakyti "auto-import" už pažeidžiamą simbolį ir pažymėti jį "__declspec (dllimport)". Tačiau praktikoje reikia naudoti "compile time" #defines, kad būtų nurodyta, ar kuriate DLL, kuriate kliento kodą, kuris susies nuorodą į DLL, ar tik statys / susiejamas su statine biblioteka. Pasirinkdami "tiesioginio adreso su nuolatine kompensacija" problemą sprendimus, turėtumėte apsvarstyti tipišką realaus pasaulio naudojimo būdą:

Originalas:

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

1 sprendimas:

--foo.h extern int arr []; --foo.c #include "foo.h" negaliojantis pagrindinis (int argc, char ** argv) (/ * Šis sprendimas skirtas win32 ir cygwin; ne "optimizuoti" * / nepastovi int * parr = arr; printf ("% d \ n", parr [1]); }

2 sprendimas:

--foo.h / * Pastaba: yra numatytas automatinis eksportas (ne __declspec (dllexport)) * / #if (apibrėžta (_WIN32) || apibrėžta (__ CYGWIN__)) && \! (apibrėžta (FOO_BUILD_DLL) || apibrėžta (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c #include "foo.h" negaliojantis pagrindinis (int argc, char ** argv) (printf ("% d \ n", arr [1]); }

Ketvirtas būdas išvengti šios problemos yra pakartotinai koduoti biblioteką, kad naudotų funkcinę sąsają, o ne duomenų sąsają pažeidžiantiems kintamiesiems (pvz., Set_foo () ir get_foo () prieigos funkcijoms).

--Disable-auto-import

Nebandykite daryti sophisticalted nuorodų "_symbol" į "__imp__symbol" DATAimports iš DLL.

--enable-runtime-pseudo-reloc

Jei jūsų kodekso yra išraiškos, aprašytos skyriuje --enable-auto-import, tai yra, DATAimportuoja iš DLL su ne nuliniu poslinkiu, šis jungiklis sukurs "runtime pseudo relocations" vektorių, kuris gali būti naudojamas runtime aplinkoje norint koreguoti nuorodas. tokius duomenis savo kliento kodu.

--Disable-runtime-pseudo-reloc

Negalima kurti pseudo perkėlimų, kad DLL iš DLL nebūtų nulinis iš DLL. Tai pagal nutylėjimą.

--enable-extra-pe-debug

Rodyti papildomą debuginę informaciją, susijusią su automatinio importo simboliu "thunking".

- poslinkio derinimas

Nustato segmento derinimą. Atminties sekcijos visuomet prasideda adresais, kurie yra šio skaičiaus kartotiniai. Numatyta 0x1000.

- stack rezervas

- stack rezervas , įsipareigoti

Nurodykite atminties kiekį rezervuoti (ir pasirinktinai įsipareigoti), kuris bus naudojamas kaip šios programos krūvis. Numatyta 2 MB rezervuota, įvykdyta 4K.

- sub sistema, kuri

- sub sistema, kuri : pagrindinė

- sub sistema, kuri : pagrindinė . nepilnametis

Nurodo posistemį, kuriame bus vykdoma jūsų programa. Teisinės vertės yra "gimtoji", "langai", "konsolė" ir "posix". Galite pasirinktinai nustatyti posistemio versiją.

Svarbu: naudokite komandą man ( % man ), kad pamatytumėte, kaip komanda naudojama jūsų konkrečiame kompiuteryje.