Linux / Unix komanda: Id

NAME

ld - Izmantojot LD , GNU linker

SINOPSIS

ld [ opcijas ] objfile ...

APRAKSTS

ld apvieno vairākus objektu un arhīvu failus , pārvieto savus datus un apvieno simbolu atsauces. Parasti pēdējais solis programmas sastādīšanā ir palaist ld .

ld pieņem Linker Command Language failus, kas rakstīti AT & T sējuma redaktora komandu valodas sintakses virsrakstā, lai nodrošinātu skaidru un pilnīgu kontroli pār saistīšanas procesu.

Šajā cilvēka lapā nav aprakstīta komandu valoda; Ld ierakstu skatiet "info" vai rokasgrāmatā ld: GNU linker, lai iegūtu pilnīgu informāciju par komandu valodu un citiem GNU linker aspektiem.

Šī LD versija izmanto vispārējas nozīmes BFD bibliotēkas, lai tās darbotos objektu failos. Tas ļauj ld lasīt, apvienot un rakstīt objekta failus dažādos formātos - piemēram, COFF vai "a.out". Varat sasaistīt dažādus formātus, lai izveidotu jebkuru pieejamo objekta faila veidu.

Papildus tam, ka tā ir elastīga, GNU linker ir noderīgāka nekā citi linkeri diagnostikas informācijas nodrošināšanā. Daudzi linkeri atsakās izpildīt tūlīt pēc kļūdu rašanās; ja vien iespējams, ld turpina izpildīt, ļaujot jums noteikt citas kļūdas (vai dažos gadījumos iegūt izvades failu, neraugoties uz kļūdu).

GNU linker ld ir paredzēts, lai aptvertu plašu situāciju loku, un pēc iespējas būtu saderīgs ar citiem linkeriem. Tā rezultātā jums ir daudz iespēju, lai kontrolētu tā uzvedību.

OPTIONS

Linkeris atbalsta virkni komandrindas opciju , bet reālā praksē daži no tiem tiek izmantoti kādā konkrētā kontekstā. Piemēram, biežs ld lietojums ir saistīt standarta Unix objektu failus ar standarta, atbalstītas Unix sistēmas palīdzību . Šādā sistēmā, lai saistītu failu "hello.o":

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

Tas lādē ld, lai izveidotu failu, ko sauc par produkciju, jo faila "/lib/crt0.o" saites ar "hello.o" un bibliotēku "libc.a", kas tiks iegūti no standarta meklēšanas direktorātiem, rezultāts. (Skatīt diskusiju par -l opciju zemāk.)

Dažas no komandrindas opcijām ld var norādīt jebkurā komandrindas punktā. Tomēr opcijas, kas attiecas uz failiem, piemēram, -l vai -T , liek failam lasīt vietā, kurā opcija parādās komandrindā, salīdzinot ar objekta failiem un citām faila opcijām. Atkārtojot ne-failu opcijas ar citu argumentu, vai nu vairs nebūs efekta, vai ignorēt iepriekš minētās parādības (tās, kas ir tālāk no komandrindas kreisās puses). Iespējas, kuras var būt jēgpilni norādītas vairāk nekā vienu reizi, ir aprakstītas zemāk.

Neparādības argumenti ir objektu faili vai arhīvi, kas ir jāsaista kopā. Tie var sekot, ieiet vai sajaukt ar komandrindas opcijām, izņemot to, ka starp opciju un tā argumentu objektu faila arguments nevar tikt novietots.

Parasti linker tiek aktivizēts ar vismaz vienu objekta failu, bet varat norādīt citus ievadīto failu formas, izmantojot -l , -R un skripta komandu valodu. Ja vispār nav norādīti bināro ievades faili, saite nesniedz nekādu izvadi un izdod ziņojumu Nr ievades faili .

Ja saite nespēj atpazīt objekta faila formātu, tā pieņems, ka tas ir saišu skripts. Šādā veidā norādītais skripts papildina saiti izmantoto galveno saišu skriptu (vai nu noklusējuma sasaistes skriptu, vai arī to, kas norādīts, izmantojot -T ). Šī funkcija ļauj saitei saistities ar failu, kas, šķiet, ir objekts vai arhīvs, bet faktiski tikai nosaka dažas simbolu vērtības vai izmanto "INPUT" vai "GROUP", lai ielādētu citus objektus. Ņemiet vērā, ka šādā veidā norādot skriptu, tiek vienkārši palielināts galvenais sasaistes skripts; izmantojiet opciju -T, lai pilnībā aizstātu noklusējuma linker skriptu.

Attiecībā uz opcijām, kuru nosaukumi ir viena burta, opciju argumentos jābūt vai nu pēc izvēles burta, neiejaucoties atstarpei, vai arī kā atsevišķus argumentus uzreiz pēc izvēles, kas tiem ir nepieciešama.

Opcijām, kuru nosaukumi ir vairāki burti, pirms opcijas nosaukuma var būt vai nu viena domuzīme vai divi; piemēram, -traide-simbols un -trace-simbols ir līdzvērtīgi. Piezīme - šim noteikumam ir viens izņēmums. Vairāku burtu opcijas, kas sākas ar mazo burtu "o", var priekšlaicīgi veikt tikai ar divām domām. Tas ir, lai mazinātu neskaidrības ar opciju -o . Piemēram, -omagic nosaka izejas faila nosaukumu burvju, savukārt --omagic nosaka izejas NMAGIC karogu.

Vairāku burtu opciju argumentus vajadzētu vai nu atdalīt no opcijas nosaukuma ar vienādmalu simbolu, vai arī sniegt kā atsevišķus argumentus tūlīt pēc opcijas, kas viņiem pieprasa. Piemēram, --trace-simbols foo un --trace-symbol = foo ir līdzvērtīgi. Ir pieņemti daudzkārtēju burtu nosaukumu unikālas saīsinājumi.

Piezīme. Ja linker tiek izmantots netieši, izmantojot kompilatora draiveri (piemēram, gcc ), tad visas saites komandrindas opcijas ir jāpievieno -Wl (vai jebkuram, kas ir piemērots konkrētajam kompilatora draiverim), piemēram:

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

Tas ir svarīgi, jo pretējā gadījumā kompilatora draivera programma var klusējot samazināt saišu opcijas, kā rezultātā rodas slikta saite.

Šeit ir tabula par vispārīgajiem komandrindas slēdžiem, kurus pieņēmusi GNU saite:

-a atslēgvārds

Šī iespēja tiek atbalstīta HP / UX saderībai. Atslēgvārdu argumentam jābūt vienai no virknes arhīvu , kopīgota vai noklusējuma . -Aarchive ir funkcionāli līdzvērtīgs -Bstatic , un pārējie divi atslēgvārdi funkcionāli ir ekvivalenti -Bdynamic . Šo iespēju var izmantot vairākos reizēs.

- arhitektūra

- arhitektūra = arhitektūra

Pašreizējā Ld versijā šī opcija ir noderīga tikai Intel 960 arhitektūras saimei. Šajā ld konfigurācijā arhitektūras arguments identificē 960 ģimenes īpašo arhitektūru, ļaujot veikt dažus aizsardzības pasākumus un mainīt arhīva un bibliotēkas meklēšanas ceļu.

Ld nākotnes izlaidumi var atbalstīt līdzīgu funkcionalitāti citām arhitektūras ēkām.

-b ievades formāts

--format = ievades formāts

ld var konfigurēt, lai atbalstītu vairāk nekā vienu objektu faila veidu. Ja jūsu ld ir konfigurēts šādā veidā, varat izmantot opciju -b, lai norādītu bināro formātu ievades objektu failiem, kas pēc šīs opcijas paliek komandrindā. Pat tad, ja ld ir konfigurēts, lai atbalstītu alternatīvus objektu formātus, parasti tas nav jānorāda, jo ld ir jākonfigurē, lai noklusējuma ievades formāts būtu visizplatītākais formāts katrā datorā. ievades formāts ir teksta virkne, konkrēta formāta nosaukums, ko atbalsta BFD bibliotēkas. (Jūs varat norādīt pieejamos binārus formātus ar objdump -i .)

Iespējams, vēlēsities izmantot šo opciju, ja jūs saistāt failus ar neparastu bināro formātu. Varat arī izmantot -b, lai skaidri izslēgtu formātus (sasaistot dažādu formātu objektu failus), iekļaujot -b ievades formātu pirms katras objektu failu grupas konkrētā formātā.

Noklusējuma formāts tiek ņemts no vides mainīgā "GNUTARGET".

Varat arī definēt ievades formātu no skripta, izmantojot komandu "TARGET";

-c MRI-commandfile

- mri-script = MRI-komandfails

Lai nodrošinātu saderību ar MRI radītajiem saišu veidotājiem, ld pieņem skripta failus, kas rakstīti alternatīvā, ierobežotā komandu valodā, kas aprakstīta GNU ld dokumentācijas sadaļas MRI saderīgu skriptu failos. Ieviest MRI skriptu failus ar opciju -c ; izmantojiet -T opciju, lai palaistu linker skriptus, kas rakstīti vispārējas nozīmes ld skriptu valodā. Ja MRI-cmdfile nepastāv, ld to meklē katalogos, kas norādīti ar jebkuru -L iespēju.

-d

-dc

-dp

Šīs trīs iespējas ir līdzvērtīgas; vairāku veidņu atbalsta saderību ar citiem linkeriem. Viņi piešķir vietu parastajiem simboliem pat tad, ja ir norādīts pārvietojamais izvades fails (ar -r ). Skripta komandai "FORCE_COMMON_ALLOCATION" ir tāds pats efekts.

-e ieraksts

- centrs = ieraksts

Izmantojiet ierakstu kā skaidru simbolu, lai sāktu programmas izpildi, nevis noklusējuma ievades punktu. Ja nav simbolu ar nosaukumu ierakstu , saite mēģinās parsēt ierakstu kā numuru un izmantot to kā ievades adresi (numurs tiks interpretēts bāzē 10, jūs varat izmantot vadošo 0x bāzei 16 vai vadošajam 0 bāzei 8).

-E

--eksporta dinamika

Veidojot dinamiski saistīto izpildāmo failu, pievienojiet visus simbolus dinamisko simbolu tabulai. Dinamisko simbolu tabula ir simbolu kopums, kas ir redzams no dinamiskajiem objektiem izpildes laikā.

Ja neizmantojat šo opciju, dinamiskā simbola tabula parasti satur tikai tos simbolus, uz kuriem atsaucas kāds dinamisks objekts, kas minēts saitē.

Ja jūs izmantojat "dlopen", lai ielādētu dinamisks objekts, kuram jāatgriežas programmā noteiktie simboli, nevis kāds cits dinamisks objekts, tad, iespējams, būs jāizmanto šī opcija, saista pati programma.

Varat arī izmantot versijas skriptu, lai kontrolētu, kādi simboli jāpievieno dinamisko simbolu tabulai, ja to atbalsta izvades formāts. Skatiet aprakstu --versijas skriptu vietnē @ ref {VERSION}.

-EB

Saite lielu endian objektus. Tas ietekmē noklusējuma izvades formātu.

-EL

Saite mazo endian objektus. Tas ietekmē noklusējuma izvades formātu.

-f

- lietvārds

Veidojot ELF koplietojamo objektu, iestatiet iekšējo DT_AUXILIARY lauku norādītajam nosaukumam. Tas norāda dinamiskai saitei, ka koplietojamā objekta simbola tabulā koplietojamā objekta simbolu tabula jāizmanto kā papildu filtrs.

Ja jūs vēlāk piesaistīsiet programmu pret šo filtra objektu, tad, palaižot programmu, dinamiskā saite redzēs lauku DT_AUXILIARY. Ja dinamiskā linker atdala visus filtra objekta simbolus, vispirms pārbauda, ​​vai koplietojamā objekta nosaukumā ir definīcija. Ja tas ir viens, tas tiks izmantots definīcijas vietā filtra objektā. Koplietojamā objekta nosaukums nav nepieciešams. Tādējādi koplietojamā objekta nosaukumu var izmantot, lai nodrošinātu alternatīvu noteiktu funkciju ieviešanu, varbūt, lai novērstu atkļūdošanu vai mašīnai raksturīgu darbību.

Šo iespēju var norādīt vairāk nekā vienu reizi. DT_AUXILIARY ieraksti tiks izveidoti tādā secībā, kādā tie parādās komandrindā.

-F nosaukums

--filtra nosaukums

Veidojot ELF koplietojamo objektu, norādiet iekšējo lauku DT_FILTER uz norādīto nosaukumu. Tas norāda dinamisko saišu veidotāju, ka izveidotā kopīgā objekta simbolu tabula kopīgā objekta nosaukuma simbolu tabulā ir jāizmanto kā filtru.

Ja jūs vēlāk piesaistīsiet programmu pret šo filtra objektu, tad, palaižot programmu, dinamiskā linker redzēs lauku DT_FILTER. Dinamiskais liksētājs atrisinās simbolus atbilstoši filtra objekta simbolu tabulai kā parasti, taču tas tiešām saista ar definīcijām, kas atrastas kopīgā objekta nosaukumā . Tādējādi filtra objektu var izmantot, lai izvēlētos objekta nosaukumā sniegto simbolu apakškopu.

Daži vecāki linkeri izmantoja -F opciju kompilēšanas rīkjoslā, lai precizētu objekta faila formātu gan ievades, gan izvades objektu failiem. GNU linker šim nolūkam izmanto citus mehānismus: -b , --format , --oformat opcijas, komandu "TARGET" saišu skriptos un vides mainīgo "GNUTARGET". GNU saite ignorēs -F opciju, ja netiks izveidots ELF koplietojamais objekts.

-fini vārds

Veidojot ELF izpildāmo vai koplietoto objektu, zvaniet NAME, kad izpildāmā vai koplietojamais objekts ir izlaists, iestatot DT_FINI uz funkcijas adresi. Pēc noklusējuma saucējs izmanto funkciju "_fini" kā zvanīšanas funkciju.

-g

Ignorēts Paredzēts saderībai ar citiem rīkiem.

-G vērtība

--gpsize = vērtība

Iestatiet maksimālo izmēru objektus, kas jāoptimizē, izmantojot GP reģistrā izmēru . Tas ir tikai nozīmīgs objektu failu formātiem, piemēram, MIPS ECOFF, kas atbalsta lielu un mazu objektu ievietošanu dažādās sadaļās. Tas tiek ignorēts citiem objektu failu formātiem.

-vārds

-someam = nosaukums

Veidojot kopīgu objektu ELF, norādītajam vārdam iestatiet iekšējo lauku DT_SONAME. Kad izpildāmā programma ir saistīta ar koplietojamo objektu, kam ir lauka DT_SONAME, tad, izpildot izpildāmo failu, dinamiskā saite mēģinās ielādēt koplietoto objektu, kas norādīts laukā DT_SONAME, nevis izmantojot linkeram piešķirto faila nosaukumu.

-i

Veiciet elementārā saite (tāpat kā opcija -r ).

-vada nosaukums

Veidojot ELF izpildāmo vai koplietojamo objektu, zvaniet NAME, kad tiek izpildīts izpildāms vai koplietots objekts, nosakot DT_INIT uz funkcijas adresi. Pēc noklusējuma saucējs izmanto funkciju "zvanīt" kā "_init".

-l arhīvs

--library = arhīvs

Pievienojiet arhīvu failu arhīvu saistīto failu sarakstam. Šo iespēju var izmantot vairākos reizēs. ld meklēs tā ceļš sarakstu par notikumiem "libarchive.a" par katru norādīto arhīvu .

Uz sistēmām, kas atbalsta kopīgas bibliotēkas, ld var meklēt arī bibliotēkas ar paplašinājumiem, kas nav ".a". Konkrēti, ELF un SunOS sistēmās ld meklēs bibliotēkas direktoriju ar paplašinājumu ".so", pirms meklēsit vienu ar paplašinājumu ".a". Saskaņā ar vienošanos ".so" paplašinājums norāda kopīgu bibliotēku.

Linkeris meklēs arhīvu tikai vienu reizi vietā, kur tā norādīta komandrindā. Ja arhīvs definē simbolu, kurš kādā objektā bija nenoteikts un kas tika parādīts pirms arhīva komandrindā, saite ietver attiecīgo failu (-s) no arhīva. Tomēr nenoteikts simbols objektā, kas vēlāk tiek parādīts komandrindā, nenozīmē, ka saite vēlāk meklēs arhīvu.

Skatiet - ( opcija veids, kā piespiest saiti meklēt arhīvus vairākas reizes.

Jūs varat vienu un to pašu arhīvu uzskaitīt vairākas reizes komandrindā.

Šāda veida arhīva meklēšana ir Unix linkeru standarts. Tomēr, ja jūs izmantojat ld onAIX, ņemiet vērā, ka tas atšķiras no AIX linker darbības.

-L searchdir

--library-path = searchdir

Pievienot ceļš searchdir uz to ceļu sarakstu, kas ld meklēs arhīvu bibliotēkas un ld kontroles skriptus. Jūs varat izmantot šo opciju neierobežotu skaitu reižu. Katalogi tiek meklēti tādā secībā, kādā tie norādīti komandrindā. Komandrindā norādītās direktorijas tiek meklētas pirms noklusējuma direktorijām. Visas -L iespējas tiek piemērotas visām -l iespējām, neatkarīgi no tā, kādā secībā opcijas parādās.

Ja searchdir sākas ar "=", tad "=" tiks aizstāts ar sysroot prefiksu , norādītais ceļš, kad saite ir konfigurēta.

Noklusētais ceļu ceļš, kas tiek meklēti (bez norādes ar -L ), ir atkarīgs no tā, kāds emulācijas režīms ld , un dažos gadījumos arī par tā konfigurēšanu.

Ceļus var norādīt arī saites skriptā ar komandu "SEARCH_DIR". Šādi norādītie direktoriji tiek meklēti tajā vietā, kurā komandrindā parādās linkera skripts.

-m emulācija

Emulēt emulācijas saiti. Jūs varat uzskaitīt pieejamās emulācijas ar --verbose vai -V opcijām.

Ja opciju -m neizmanto, emulāciju ņem no vides modifikācijas "LDEMULATION", ja tas ir definēts.

Pretējā gadījumā noklusējuma emulācija ir atkarīga no tā, kā saite ir konfigurēta.

-M

- drukas karte

Izdrukājiet saišu karti uz standarta izvadi. Saites karte sniedz informāciju par saiti, tostarp sekojošo:

*

Ja objekta faili un simboli tiek mapēti atmiņā.

*

Kā tiek sadalīti simboli.

*

Visi arhīva dalībnieki, kas iekļauti saitē, ar norādi par simbolu, kas izraisīja arhīva dalībnieka ienākšanu.

-n

-nmagic

Izslēdziet sadaļu lapu izlīdzināšanu un, ja iespējams, atzīmējiet izvadi kā "NMAGIC".

-N

- maģisks

Iestatiet, ka teksta un datu sadaļas ir lasāmas un rakstāmas. Tāpat neizlīdziniet datu segmentu un atspējojiet saiti pret kopīgām bibliotēkām. Ja izvades formāts atbalsta Unix stila burvju numurus, atzīmējiet izvadi kā "OMAGIC".

-no-omagic

Šī opcija novērš lielāko daļu -N opcijas ietekmi. Tas nosaka, ka teksta sadaļa ir tikai lasāma, un liek datu segmentam pielāgot lapu. Piezīme. Šī opcija neļauj saistīt pret kopīgām bibliotēkām. Izmantojiet -Bdynamic šim nolūkam.

-o produkcija

- izeja = izeja

Izmantojiet produkciju kā nosaukumu programmai, ko sagatavojis ld ; ja šī opcija nav norādīta, pēc noklusējuma tiek izmantots nosaukums a.out . Skripta komanda "OUTPUT" var arī norādīt izvades faila nosaukumu.

-O līmenis

Ja līmenis ir ciparu vērtības, kas lielākas par nulli, lv optimizē izvadi. Tas var aizņemt ievērojami ilgākus laikposmus, tāpēc, iespējams, tas ir jāiespēj tikai pēdējam bināram.

-q

- emit-relocs

Atstājiet pārvietošanas sadaļas un saturu pilnībā saistītajos izpildāmjos failos. Lai varētu veikt pareizas izpildāmo failu izmaiņas, var būt nepieciešama šī ziņojuma saišu analīzes un optimizācijas rīku ievietošana. Tas rada lielākas izpildāmās programmas.

Pašlaik šī opcija tiek atbalstīta tikai ELF platformās.

-r

- sasaistāms

Izveidojiet pārvietojamu izvadi --- ti, ģenerējiet izejas failu, kas savukārt var kalpot kā ievades ld . To bieži sauc par daļēju saikni . Kā blakusparādība vidē, kas atbalsta standarta Unix burvju numurus, šī opcija arī nosaka izejas faila burvju numuru "OMAGIC". Ja šī opcija nav norādīta, tiek izveidots absolūtais fails. Saistot C + + programmas, šī iespēja neatrisinās atsauces uz konstruktoriem; Lai to izdarītu, izmantojiet -Ur .

Ja ievades failam nav tāda paša formāta kā izejas failam, daļēju saiti var atbalstīt tikai tad, ja šajā ievades failā nav pārvietošanas vietu. Dažādiem izvades formātiem var būt papildu ierobežojumi; piemēram, daži no "a.out" formāta formātiem neatbalsta daļēju saikni ar ievades failiem citos formātos.

Šī opcija ir tāda pati kā -i .

-R faila nosaukums

- vienkārši simboli = faila nosaukums

Lasīt simbolu nosaukumus un to adreses no faila nosaukuma , bet ne pārvietot to vai iekļaut to izvadā. Tas ļauj jūsu izvades failam simboliski atsaukties uz absolūtām atmiņas vietām, kas definētas citās programmās. Jūs varat izmantot šo opciju vairāk nekā vienu reizi.

Saderībai ar citiem ELF linkeriem, ja -R opcijai seko kataloga nosaukums, nevis faila nosaukums, tas tiek uzskatīts par -rpath opciju.

-s

- striķis-viss

Izlaist visu informāciju par simbolu no izejas faila.

-S

--strāvas noņemšana

Izlaidiet atkļūdotāju simbolu informāciju (bet ne visus simbolus) no izvades faila.

-t

--traide

Izdrukājiet ievades failu nosaukumus, ld tos apstrādājot.

-T skripta fails

- script = scriptfile

Izmantojiet skripta failu kā saišu skriptu. Šis skripts aizstāj ld noklusējuma saistīšanas skriptu (nevis pievienojot to), tādēļ komandfile jānorāda viss nepieciešamais, lai aprakstītu izejas failu. Ja skripta fails pašreizējā direktorijā neeksistē, "ld" meklē to katalogos, kas norādīti kādā no iepriekšējām -L iespējām. Vairākas- T opcijas uzkrājas.

-u simbols

--undefined = simbols

Spēka simbols jāievada izejas failā kā nenoteikts simbols. Piemēram, to var aktivizēt papildu moduļu saites no standarta bibliotēkām. -u var atkārtot ar dažādiem opciju argumentiem, lai ievadītu papildu nenoteiktus simbolus. Šī opcija ir ekvivalenta komandas "EXTERN" linker script.

-Ur

Attiecībā uz neko citu, kas nav C + + programmas, šī opcija ir līdzvērtīga -r : tā rada relocatable izejas --- ti, izejas failu, kas savukārt var kalpot kā ieguldījums ld . Saistot C + + programmas, -Ur atrisina atsauces uz konstruktoriem, atšķirībā no -r . Tas nedarbojas, lai izmantotu -Ur failus, kas paši ir saistīti ar -Ur ; Kad konstruktora tabula ir uzbūvēta, to nevar pievienot. Lietot -Ur tikai pēdējai daļējai saiknei un -r citiem.

--unlikums [= SECTION ]

Izveido atsevišķu izvades sadaļu katrai ieejas sadaļai, kas atbilst SECTION , vai ja katram bāreņu ievadīšanas sadaļā nav izvēles aizstājējzīmes SECTION . Bāreņu sadaļa ir tāda, kas nav īpaši minēta saišu skriptā. Šo opciju varat izmantot vairākas reizes komandrindā; Tas novērš parasto ieejas sadaļu apvienošanu ar tādu pašu nosaukumu, galvenajiem izvades sadaļas uzdevumiem saišu skriptā.

-v

- pārveide

-V

Parādiet ld versijas numuru. Opcija -V arī uzrāda atbalstītās emulācijas.

-x

- atcelt visu

Dzēst visus vietējos simbolus.

-X

- izvairīties no vietējiem iedzīvotājiem

Dzēst visus pagaidu vietējos simbolus. Lielākajai daļai mērķu tas ir visi vietējie simboli, kuru nosaukumi sākas ar L.

-in simbols

- trajektorijas simbols = simbols

Drukājiet katra saistītā faila nosaukumu, kurā parādās simbols . Šo iespēju var piešķirt vairākos reizēs. Daudzās sistēmās ir jāpievieno pasvītras zīme.

Šī opcija ir noderīga, ja jūsu saitē ir nenoteikts simbols, bet nezinu, no kurienes ir atsauce.

-Y ceļš

Pievienot ceļu uz noklusējuma bibliotēkas meklēšanas ceļu. Šī opcija pastāv Solaris saderībai.

-z atslēgvārds

Atzītie atslēgvārdi ir initfirst, interposition, loadfltr, nodefaultlib, nodelete, nodlopen, nodump, now, origin, combreloc, " Pārējos atslēgvārdus Solaris saderību ignorē. "initfirst" atzīmē priekšmetu, kas vispirms tiek inicializēts runtime pirms citiem objektiem. "interpose" apzīmē objektu, ka tā simbola tabula ieslēdzas pirms visiem simboliem, bet gan primārajam izpildāmam failam. "loadfltr" apzīmē objektu, kas tiek apstrādāts nekavējoties runtime laikā. "nodefaultlib" apzīmē objektu, kas ignorē šī objekta atkarību meklēšanu visi noklusētie bibliotēkas meklēšanas ceļi. "nodelete" atzīmē objektu nevajadzētu izkraut runtime. "nodlopen" apzīmē objektu, kas nav pieejams "dlopen". "nodump" atzīmē, ka objektu nevar iznīcināt ar "dldump". "tagad" iezīmē objektu ar ne slinks runtime saistošs. "izcelsmes" zīmes objekts var saturēt $ ORIGIN. "defs" neļauj neapzīmēt simbolus. "muldefs" atļauj vairākas definīcijas. "combreloc" apvieno vairākas reloc sadaļas un tos šķiro, lai dinamiskā simbola uzmeklēšanas caching būtu iespējama.

"nocombreloc" atspējo vairākas reloc sadaļas, kas apvieno. "nocopyreloc" atspējo eksemplāru izgatavošanu.

- ( arhīvi -)

- sākuma grupas arhīvi --end-grupa

Arhīviem vajadzētu būt arhīvu failu sarakstam. Tie var būt vai nu tiešie failu nosaukumi, vai -l opcijas.

Noteiktie arhīvi tiek meklēti atkārtoti, līdz nav izveidotas jaunas nenoteiktas atsauces. Parasti arhīvs tiek meklēts tikai vienreiz tādā secībā, kāds tas norādīts komandrindā. Ja simbols šajā arhīvā ir vajadzīgs, lai atrisinātu nenoteiktu simbolu, uz kuru atsaucas objekts arhīvā, kas vēlāk parādās komandrindā, saite nespētu atrisināt šo atsauci. Grupējot arhīvus, tos visus atkārtoti meklē, līdz tiek atrisinātas visas iespējamās atsauces.

Izmantojot šo opciju, ir ievērojamas veiktspējas izmaksas. Vislabāk to izmantot tikai tad, ja pastāv divu vai vairāku arhīvu nenovēršamās apļveida atsauces.

--pieņemt-nezināma ieeja-arch

- nepieņemams-nezināmais ievade-arh

Norāda linkeram pieņemt ievades failus, kuru arhitektūru nevar atpazīt. Pieņēmums ir tāds, ka lietotājs zina, ko viņi dara, un apzināti vēlas saistīt šos nezināmos ievades failus. Tā bija saite pēc noklusējuma, pirms 2.14 versijas. Noklusējuma darbība no 2.14 versijas ir domāt, lai noraidītu šādus ievades failus, un tāpēc vecās uzvedības atjaunošanai ir pievienota opcija -apstiprināt-nezināma ievade-arch .

apstiprināt atslēgvārdu

Šī iespēja tiek ignorēta SunOS saderībai .

-Bdinamic

-diena

-call_shared

Saikne ar dinamiskajām bibliotēkām. Tas ir nozīmīgs tikai platformām, par kurām tiek atbalstītas dalītās bibliotēkas . Parasti šī opcija parasti ir šādās platformās. Šīs opcijas dažādie varianti ir savietojami ar dažādām sistēmām. Jūs varat izmantot šo opciju vairākas reizes komandrindā: tas ietekmē bibliotēku, meklējot -l opcijas, kas seko tam.

-B grupa

Dinamiskās sadaļas ierakstā "DT_FLAGS_1" iestatiet karodziņu "DF_1_GROUP". Tas izraisa runner linker, kas apstrādā meklēšanu šajā objektā, un tā atkarības tiek veiktas tikai grupas iekšienē. -ne-undefined ir netieši. Šī opcija ir nozīmīga tikai ELF platformām, kas atbalsta kopīgas bibliotēkas .

-Bstatic

-dn

-non_shared

-stats

Neveidojiet saikni ar kopīgām bibliotēkām. Tas ir nozīmīgs tikai platformām, par kurām tiek atbalstītas dalītās bibliotēkas. Šīs opcijas dažādie varianti ir savietojami ar dažādām sistēmām. Jūs varat izmantot šo opciju vairākas reizes komandrindā: tas ietekmē bibliotēku, meklējot -l opcijas, kas seko tam.

-B simbolisks

Izveidojot kopīgu bibliotēku, dalītās bibliotēkas definīcijā saiti uz globāliem simboliem, ja tādi ir. Parasti programmā, kas ir saistīta ar kopīgu bibliotēku, ir iespējams ignorēt definīciju dalītajā bibliotēkā. Šī opcija ir nozīmīga tikai ELFplatforms, kas atbalsta kopīgas bibliotēkas.

--pārbaudes sekcijas

--nekontroles sadaļas

Lūgumraksta iesniedzējs nekontrolē sadaļu adreses pēc to piešķiršanas, lai noskaidrotu, vai pastāv pārklāšanās. Parasti šī saite veic šo pārbaudi, un, ja tā atklāj jebkādu pārklāšanos, tā radīs piemērotus kļūdas ziņojumus. Linkeris zina par to un dara atlīdzību par pārklājumu sadaļām. Noklusēto darbību var atjaunot, izmantojot komandrindas slēdzi - pārbaudiet sekcijas .

--cref

Izvadiet pāri atsauces tabulai. Ja tiek ģenerēts linker kartes fails, mapes fails tiek iespiests krusteniskās atsauces tabula. Pretējā gadījumā tas tiek izdrukāts uz standarta izvades.

Tabulas formāts ir tīši vienkāršs, lai to, ja nepieciešams, varētu viegli apstrādāt ar skriptu. Simboli tiek drukāti, sakārtoti pēc nosaukuma. Par katru simbolu tiek parādīts failu nosaukumu saraksts. Ja simbols ir definēts, pirmais uzskaitītais fails ir definīcijas atrašanās vieta. Pārējie faili satur atsauces uz simbolu.

--no-define-common

Šī opcija apgrūtina adrešu piešķiršanu kopīgajiem simboliem. Skripta komandai "INHIBIT_COMMON_ALLOCATION" ir tāds pats efekts.

Parasti -no-define-common opcija ļauj atsaistīt lēmumu piešķirt adreses Kopējiem simboliem, izvēloties izvades faila tipu; pretējā gadījumā non-Relocatable izejas tips pieprasa adreses Kopējiem simboliem. Izmantojot --no-define-common ļauj Kopīgos simbolus, uz kuriem atsaucas koplietojamā bibliotēka, piešķirt adreses tikai galvenajā programmā. Tas novērš neizmantoto dublēt vietu koplietotajā bibliotēkā, kā arī novērš jebkādu iespējamo neskaidrību par atrisināšanu nepareizā dublikātā, ja ir daudz dinamisko moduļu ar specializētiem meklēšanas ceļiem runtime simbolu izšķirtspējai.

--defsym simbols = izteiksme

Izejas failā izveidojiet globālu simbolu, kurā ir absolūtā adrese, ko norāda izteiksme . Šo opciju varat izmantot tik reižu, cik nepieciešams, lai komandrindā noteiktu vairākus simbolus. Šajā kontekstā izteiksmei tiek atbalstīta ierobežota aritmētiskā forma: jūs varat norādīt heksadecimālo konstanti vai esošā simbola nosaukumu vai arī izmantot "+" un "-", lai pievienotu vai atņemtu heksadecimālās konstantes vai simbolus. Ja jums ir nepieciešamas sarežģītākas izteicienas, apsveriet iespēju izmantot skripta komandu valodu. Piezīme: starp simbolu , vienādības zīmi (`` = '') un izteiksmi nedrīkst būt atstarpes.

--demangle [= stils ]

-ne-demangle

Šīs opcijas kontrolē, vai simbolu nosaukumus demagulēt kļūdas paziņojumos un citos produktos. Kad saite tiek teicis demangle, tā mēģina uzrakstīt simbolu nosaukumus lasāmā veidā: tas nofiksē vadošos pasvītras, ja tie tiek izmantoti objekta faila formātā, un pārveido C ++ pārveidotos simbolu vārdus lietotāja lasāmajos nosaukumos. Dažādiem kompilatoriem ir dažādi mangling stili. Neobligātās atdalīšanas stila argumentu var izmantot, lai izvēlētos atbilstošu kompilatora atdalīšanas stilu. Linkeris demanglāks pēc noklusējuma, ja vien nav iestatīts vides mainīgais COLLECT_NO_DEMANGLE . Šīs opcijas var tikt izmantotas, lai ignorētu noklusējuma iestatījumus.

- dinamic-linker fails

Iestatiet dinamiskās linker nosaukumu. Tas ir tikai nozīmīgi, radot dinamiski saistītus ELF izpildāmos failus. Noklusējuma dinamiskais linkeris parasti ir pareizs; neizmantojiet to, ja vien nezināt, ko jūs darāt.

- embedded-relocs

Šī opcija ir nozīmīga tikai tad, ja saistot MIPS iegulto PIC kodu, ko ģenerējis -membedded-pic opcija GNU kompilatoram un montētājam. Tas liek saitei veidot tabulu, kuru var izmantot izpildes laikā, lai pārvietotu visus datus, kas tika statistiski inicializēti rādītāju vērtībām. Sīkāku informāciju skatiet sadaļā testuite / ld-empic.

--attēlu brīdinājumi

Visus brīdinājumus apstrādājiet kā kļūdas .

- force-exe-sufikss

Pārliecinieties, vai izejas failam ir .exe sufikss.

Ja veiksmīgi izveidotai pilnībā saistītajam izvades failam nav sfs " .exe " vai " .dll ", šī opcija piesaista linkeru kopēt izvades failu uz vienu nosaukumu ar ".exe" sufiksu. Šī opcija ir noderīga, ja tiek izmantotas nemodificētas Unix makefiles Microsoft Windows uzņēmējā, jo dažās Windows versijās netiek palaists attēls, izņemot, ja tas beidzas ar .exe sufiksu.

--no-gc-sekcijas

--gc-sekcijas

Iespējojiet neizmantoto ieejas sadaļu atkritumu savākšanu. Tas tiek ignorēts mērķiem, kas neatbalsta šo iespēju. Šī opcija nav saderīga ar -r , kā arī to nedrīkst izmantot ar dinamisko saikni. Noklusējuma uzvedību (neveicot šo atkritumu savākšanu ) var atjaunot, norādot " -no-gc-sections " komandrindā.

--palīdzība

Izdrukājiet kopsavilkumu par komandrindas opcijām standarta izvadē un izejot.

- Target-help

Izdrukājiet kopsavilkumu par visām mērķa specifiskajām opcijām standarta izvadē un izejot.

-Mape mapfile

Drukāt saišu karti failu mapmapē . Skatiet iepriekš aprakstīto -M opcijas aprakstu.

-ne-keep-atmiņa

Ld parasti optimizē ātrumu, salīdzinot ar atmiņas izmantošanu, atmiņā saglabājot ievadīto failu simbolu tabulas. Šī opcija ld liek domāt, lai optimizētu atmiņas izmantošanu, vajadzības gadījumā no jauna noformējot simbolu tabulas. Tas var būt vajadzīgs, ja ld beigs atmiņas vietu, vienlaikus saistot lielu izpildāmo failu.

- nav definēts

-z defs

Parasti, veidojot nediskoloģisku dalītu bibliotēku, ir atļauti nedefinēti simboli, un tos paliek atrisināt ar runtime loader. Šīs opcijas aizliedz šādus nenoteiktus simbolus.

- atkārtota daudzkārtēja definīcija

-z muldefs

Parasti, ja simbols ir definēts vairākas reizes, saite ziņos par fatālu kļūdu. Šīs opcijas atļauj vairākas definīcijas un tiek izmantota pirmā definīcija.

--allow-shlib-undefined

Ļaujiet neapzīmētus simbolus koplietotajos objektos pat tad, ja ir iestatīts -no-undefined. Tīkla rezultāts būs tāds, ka nenoteiktajos simbolos parastajos objektos joprojām tiek aktivizēta kļūda, bet nevēlamie simboli koplietotajos objektos tiks ignorēti. No_undefined ieviešana pieļauj pieņēmumu, ka runtime linker tiks aizrīties ar nenoteiktiem simboliem. Tomēr ir vismaz viena sistēma (BeOS), kurā dalītu bibliotēku neapzīmēti simboli ir normāli, jo kodols tos ielādes laikā ielīmē, lai izvēlētos, kura funkcija ir vispiemērotākā pašreizējai arhitektūrai. IE dinamiski atlasiet atbilstošu memset funkciju. Acīmredzot ir arī normāli, ka HPPA dalītajām bibliotēkām ir nedefinēti simboli.

- -no-undefined-versija

Parasti, kad simbolam ir nenoteikts variants, saite to ignorēs. Šī opcija neļauj simboliem ar nenoteiktu versiju, un tā vietā tiks izdota fatāla kļūda.

--no-warn-neatbilstība

Parasti ld radīs kļūdu, ja mēģināsit apvienot ievades failus, kas kaut kāda iemesla dēļ neatbilst, iespējams, tāpēc, ka tie ir apkopoti dažādiem procesoriem vai dažādiem endiannesses. Šī opcija ld pasaka, ka tai vajadzētu klusi atļaut šādas iespējamās kļūdas. Šo opciju drīkst lietot tikai uzmanīgi gadījumos, kad esat veicis kādu īpašu darbību, kas nodrošina, ka saišu kļūdas nav piemērotas.

- bez arhīva

Izslēgt opcijas " Viss arhīvs " efektu turpmākajiem arhīva failiem.

--noinhibit-exec

Saglabājiet izpildāmo izvades failu ikreiz, kad tas joprojām ir izmantojams. Parasti saites veidotājs neizveido izvades failu, ja saites procesā rodas kļūdas; tā iziet bez rakstiskas izvades faila, ja tā nekādā gadījumā neizdod nekādu kļūdu.

-nostdlib

Tikai meklējiet bibliotēkas direktorijus, kas ir skaidri norādīti komandrindā. Linkeru skriptos norādītie bibliotēku katalogi (ieskaitot komandrindas norādītos saišu skriptus) tiek ignorēti.

--format izejas formātu

ld var konfigurēt, lai atbalstītu vairāk nekā vienu objektu faila veidu. Ja jūsu ld ir konfigurēts šādā veidā, varat izmantot opciju -oformat, lai norādītu izvades objekta faila bināro formātu. Pat tad, ja ld ir konfigurēts, lai atbalstītu alternatīvus objektu formātus, parasti tas nav jānosaka, jo ld ir jākonfigurē tā, lai noklusējuma izvades formāts būtu visizplatītākais formāts katrā datorā. izejas formāts ir teksta virkne, konkrēta formāta nosaukums, ko atbalsta BFD bibliotēkas. (Jūs varat norādīt pieejamos binārus formātus ar objdump -i .) Skripta komandu "OUTPUT_FORMAT" var arī norādīt izvades formātu, bet šī opcija to ignorē.

-qmagic

Šī opcija tiek ignorēta par Linux savietojamību.

-Qy

Šī opcija tiek ignorēta SVR4 saderībai.

- relaksācija

Iespēja ar mašīnas atkarīgajiem efektiem. Šo iespēju atbalsta tikai daži mērķi.

Dažās platformās opcija -relax veic globālus optimizējumus, kas kļūst iespējami, ja saite atrisina adresi programmā, piemēram, atvieglojot adrešu režīmus un sintezējot jaunus norādījumus izvades objekta failā.

Dažās platformās, kuras saistītas laika globālās optimizēšanas rezultātā, var padarīt iespējamo izpildāmo failu simbolisku atkļūdošanu neiespējamu. Tas ir zināms, ka Matsushita MN10200 un MN10300 procesoru saime.

Platformās, kur tas netiek atbalstīts, --relax ir pieņemts, bet tiek ignorēts.

--retain-simbols-faila faila nosaukums

Saglabāt tikai simbolus, kas uzskaitīti faila faila nosaukumā , atbrīvojot visus pārējos. faila nosaukums ir vienkāršs fails ar vienu simbola nosaukumu katrā rindiņā. Šī opcija ir īpaši noderīga vidēs (piemēram, VxWorks), kur liela mēroga simbolu tabula tiek uzkrāta pakāpeniski, lai saglabātu darbības laiku atmiņu.

- Atlikušais simbolu fails neizdzēš nenoteiktus simbolus vai simbolus, kas nepieciešami pārvietošanai.

Komandrindā var norādīt tikai --retain-symbols-file vienu reizi. Tas ignorē -s un -S .

-rpath dir

Pievienojiet direktoriju runtime bibliotēkas meklēšanas ceļā. To izmanto, savienojot ELFexecutable ar koplietojamo objektu. Visi argumenti -rpath ir apvienoti un nodoti runtime linker, kas izmanto tos, lai atrastu koplietotos objektus runtime. Parametrs -rpath tiek izmantots arī, ja tiek meklēti kopīgoti objekti, kuriem nepieciešami kopīgie objekti, kas ir skaidri norādīti saitē; skatiet aprakstu -rpath-link opcijai. Ja -rpath netiek izmantots, sasaistot izpildāmo ELF, vides mainīgā "LD_RUN_PATH" saturs tiks izmantots, ja tas ir definēts.

Opciju -rpath var izmantot arī SunOS. Pēc noklusējuma, SunOS, linker izveidos izpildlaika meklēt plāksteri no visiem -L iespējas, kas tiek dota. Ja tiek izmantota opcija -rpath , izpildes laika meklēšanas ceļš tiks izveidots, izmantojot tikai -rpath opcijas, ignorējot -L opcijas. Tas var būt noderīgi, ja lietojat GCC, kas pievieno daudzas -L opcijas, kas var būt uz NFS uzstādītajām failu sistēmām.

Saderībai ar citiem ELF linkeriem, ja -R opcijai seko kataloga nosaukums, nevis faila nosaukums, tas tiek uzskatīts par -rpath opciju.

-rpath-link DIR

Izmantojot ELF vai SunOS, vienai kopīgai bibliotēkai var būt nepieciešama cita. Tas notiek, ja saite "ld -shared" ietver kopīgu bibliotēku kā vienu no ievades failiem.

Ja saite saskaras ar šādu atkarību, veicot nedalītu, nemainīgi pārvietojamu saiti, tā automātiski mēģinās atrast nepieciešamo kopīgo bibliotēku un iekļaut to saiti, ja tā nav skaidri norādīta. Šādā gadījumā opcija -rpath-link norāda pirmos meklējamo direktoriju komplektu. Opcija -rpath-link var norādīt direktoriju nosaukumu secību vai nu, norādot nosaukumu sarakstu, kas atdalīti ar kolonām, vai arī parādot vairākas reizes.

Šī opcija jāizmanto piesardzīgi, jo tā ignorē meklēšanas ceļu, kas, iespējams, ir bijis grūti apkopots dalītajā bibliotēkā. Šādā gadījumā ir nejauši iespējams izmantot citu meklēšanas ceļu, nekā to darīs saistītais izpildes laiks.

Linker izmanto šos meklēšanas ceļus, lai atrastu nepieciešamās koplietojamās bibliotēkas.

1

Jebkurš katalogs, ko norāda ar -rpath-link opcijām.

2

Jebkurš direktorijs, ko norāda ar -rpath opcijām. Atšķirība starp -rpath un -rpath-link ir tas, ka direktorijās norādītās -rpath opcijas ir iekļautas izpilddatorā un tiek izmantotas runtime, bet -rpath-link opcija ir efektīva tikai saites laikā. Tas attiecas tikai uz vietējo saiti.

3

Ja ELF sistēma, ja nav izmantoti opcijas -rpath un "rpath-link", meklējiet vides mainīgā "LD_RUN_PATH" saturu. Tas attiecas tikai uz vietējo saiti.

4

Uz SunOS, ja -rpath opcija netika izmantota, meklēt visus katalogus, kas norādīti, izmantojot -L iespējas.

5

Par vietējo saiti, vides mainīgā satura "LD_LIBRARY_PATH" saturu.

6

Vietējam ELF linkeram koplietojamās bibliotēkas "DT_RUNPATH" vai "DT_RPATH" direktorijās tiek meklētas nepieciešamās koplietojamās bibliotēkas. Ieraksti "DT_RPATH" tiek ignorēti, ja ir ieraksti "DT_RUNPATH".

7

Noklusētie direktoriji, parasti / lib un / usr / lib .

8

Ja vietne ir saistīta ar ELF sistēmu, ja failam /etc/ld.so.conf eksistē, šajā failā atrodamo direktoriju saraksts.

Ja nepieciešamā koplietojamā bibliotēka netiek atrasta, saite izdos brīdinājumu un turpinās ar saiti.

-dalīts

-pārdošana

Izveidojiet kopīgu bibliotēku. To patlaban atbalsta tikai ELF, XCOFF un SunOS platformas. SunOS gadījumā saite automātiski izveido koplietojamu bibliotēku, ja -e opcija netiek izmantota, un saitē ir nenoteikti simboli.

-sort-common

Šī opcija ld lv kārtot kopējus simbolus pēc lieluma, kad tos ievieto atbilstošās izvades sadaļās. Vispirms viss viens baits simboli, tad visi divi baits, tad visi četri baitu, un tad viss pārējais. Tas ir, lai izvairītos no atšķirībām starp simboliem sakarā ar pielāgošanas ierobežojumiem.

- sadalīti pēc faila [ izmērs ]

Līdzīgs kā --split-by-reloc, bet ja tiek sasniegts lielums, katram ievades failam tiek izveidota jauna izvades sadaļa. izmērs pēc noklusējuma ir lielāks par 1, ja tas nav norādīts.

- sadalīts pa reloc [ skaits ]

Izmēģinājuma failā mēģina izveidot papildu sadaļas, tādēļ neviena faila izvades sadaļa failā neietilpst vairāk nekā skaita pārvietošana. Tas ir noderīgi, ja ģenerē milzīgus pārvietojamos failus, lai lejupielādētu noteiktos reālā laika kodos ar COFF objekta faila formātu; jo COFFcannot vienā sadaļā ir vairāk nekā 65535 pārvietošanas vietas. Ņemiet vērā, ka tas nedarbosies ar objektu failu formātiem, kas neatbalsta patvaļīgas sadaļas. Saite netiks sadalīta atsevišķām ievades sekcijām pārdalīšanai, tādēļ, ja vienā ievades sadaļā ir vairāk nekā skaitļu pārvietošanas, viena izvades sadaļa saturēs daudzus pārvietošanas gadījumus. Pēc noklusējuma iestatiet vērtību 32768.

--stats

Aprēķināt un parādīt statistiku par linkera darbību, piemēram, izpildes laiku un atmiņas izmantošanu.

- tradicionālais formāts

Dažiem mērķiem, ld produkcija kaut kādā veidā atšķiras no kāda esoša linkera produkcijas. Šis slēdzis ld pieprasa izmantot tradicionālo formātu.

Piemēram, SunOS, ld apvieno dublētus ierakstus simbolu virknes tabulā. Tas var samazināt izvades faila lielumu ar pilnu atkļūdošanas informāciju par vairāk nekā 30 procentiem. Diemžēl SunOS "dbx" programma nevar nolasīt izveidoto programmu ("gdb" nav problēmu). Tradicionālā formāta slēdzis ld liek nesaglabāt ierakstus.

- sekcijas sākuma sadaļa nosaukums = org

Atrodiet sadaļu izejas failā absolūtā adresē, kuru izsniedz org . Šo opciju varat izmantot tik reižu, cik nepieciešams, lai komandrindā atrastu vairākas sadaļas. org jābūt vienam heksadecimālam veselam skaitlim; Lai nodrošinātu saderību ar citiem linkeriem, varat izlaist galveno 0x, kas parasti ir saistīts ar heksadecimālo vērtību. Piezīme: starp sadaļas nosaukumu , vienādības zīmi (`` = '') un orgiem nedrīkst būt atstarpes.

-Tbss org

-Tdata org

-Ttext org

Izmantojiet org kā sākuma adresi --- attiecīgi --- izejas faila segmentam "bss", "data" vai "text". org jābūt vienam heksadecimālam veselam skaitlim; Lai nodrošinātu saderību ar citiem linkeriem, varat izlaist galveno 0x, kas parasti ir saistīts ar heksadecimālo vērtību.

- dll verbose

- verbose

Parādiet ld versijas numuru un uzsakiet atbalstītās linker emulācijas. Parādiet, kurus ievades failus var un nevar atvērt. Parādiet linkera skriptu, ko izmanto saite.

--version-script = versija-scriptfile

Norādiet linkeram versijas skripta nosaukumu. To parasti izmanto, veidojot dalītas bibliotēkas, lai norādītu papildu informāciju par bibliotēkas izveides versiju heirarchiju. Šī opcija ir nozīmīga tikai ELF platformām, kas atbalsta kopīgas bibliotēkas.

--bīstams - bieži

Brīdiniet, ja kopīgais simbols ir apvienots ar citu kopīgu simbolu vai ar simbola definīciju. Unix sasaistes ļauj to nedaudz neskaidra prakse, bet linkeriem uz dažām citām operētājsistēmām nav. Šī opcija ļauj jums atrast potenciālās problēmas, apvienojot globālos simbolus. Diemžēl dažas C bibliotēkas izmanto šo praksi, tāpēc jūs varat saņemt brīdinājumus par simboliem gan bibliotēkās, gan jūsu programmās.

Ir trīs veidu globālie simboli, kas ilustrēti šeit ar C piemēriem:

int i = 1;

Definīcija, kas atrodas izvades faila inicializētajā datu sadaļā.

extern int i;

Neapstiprināta atsauce, kas nepiešķir telpu. Mainīgajam kaut kur ir jābūt definīcijai vai kopējam simbolam.

int i;

Kopējs simbols. Ja mainīgajam ir tikai viens (viens vai vairāki) kopēji simboli, tas nonāk izvades faila neinitializētā datu apgabalā. Linker apvieno vairākus kopējus simbolus vienam un tam pašam mainīgajam vienā simbolā. Ja tie ir dažāda lieluma, tas ievelk lielāko izmēru. Linker apzīmē kopīgu simbolu deklarācijā, ja ir tāda paša mainīgā definīcija.

Parasti -warn-common iespēja var radīt piecu veidu brīdinājumus. Katrs brīdinājums sastāv no līniju pāriem: pirmais apraksta tikko parādīto simbolu, otrajā aprakstīts iepriekšējais simbols, kas sastopams ar tādu pašu nosaukumu. Viens vai abi no abiem simboliem būs kopējs simbols.

1

Kopējā simbola iekļaušana atsaucei, jo simbols jau ir definēts.

(
): brīdinājums: parastais simbols <> ar definīciju ignorēts (
): brīdinājums: definēts šeit

2

Kopējā simbola pārvēršana par atsauci, jo rodas simbola vēlāka definīcija. Tas ir tāds pats kā iepriekšējā gadījumā, izņemot to, ka simboli ir sastopami citā secībā.

(
): brīdinājums: definīcija ` 'galvenā kopējā (
): brīdinājums: bieži ir šeit

3

Apvienojot kopīgu simbolu ar iepriekšējo vienāda izmēra kopējo simbolu.

(
): brīdinājums: vairāki kopīgi ar `` simbolu> (
): brīdinājums: iepriekšējais bieži ir šeit

4

Apvienojot kopīgu simbolu ar iepriekšējo lielāko kopējo simbolu.

(
): brīdinājums: parastais simbols <>, kas tiek ignorēts ar lielāku kopējo (
): brīdinājums:

5

Apvienojot kopīgu simbolu ar iepriekšējo mazāko kopīgo simbolu. Tas ir tāds pats kā iepriekšējā gadījumā, izņemot to, ka simboli ir sastopami citā secībā.

(
): brīdinājums: parastais simbols <> galvenais mazāks kopējais (
): brīdinājums: mazāks bieži ir šeit

--produktu konstruktori

Brīdiniet, ja tiek izmantoti visi globālie konstruktori. Tas ir noderīgs tikai dažiem objektu failu formātiem. Formātā, piemēram, COFF vai ELF, saite nespēj atklāt globālo konstruktoru izmantošanu.

- warn-multiple-gp

Brīdiniet, ja izvades failā ir nepieciešamas vairākas globālās rādītāju vērtības. Tas ir nozīmīgs tikai dažiem pārstrādātājiem, piemēram, Alfa. Konkrēti, daži pārstrādātāji ievieto lielas vērtības konstantes īpašā sadaļā. Šīs sadaļas vidū ir norādīts īpašs reģistrs (globālais rādītājs), lai konstantus varētu efektīvi ielādēt, izmantojot relatīvā adrešu režīma pamatreģistrā. Tā kā relatīvais režīms bāziskajā reģistrā ir fiksēts un salīdzinoši mazs (piemēram, 16 biti), tas ierobežo nemainīgā pults maksimālo izmēru. Tādējādi lielās programmās bieži vien ir nepieciešams izmantot vairākas globālas rādītāju vērtības, lai varētu risināt visas iespējamās konstantes. Šī opcija izraisa brīdinājuma izsniegšanu ikreiz, kad notiek šis gadījums.

- reizi nedēļā

Vienīgi brīdiniet vienu reizi par katru nenoteikto simbolu, nevis vienu reizi modulī, kas attiecas uz to.

--līnija-izliekuma izlīdzināšana

Brīdiniet, ja produkcijas sadaļas adrese ir mainīta saskaņošanas dēļ. Parasti izlīdzināšanu nosaka ievades sadaļa. Adrese tiks mainīta tikai tad, ja tā nav skaidri norādīta; Tas ir, ja komanda "SECTIONS" nenosaka sadaļas sākuma adresi.

- pilnīgi arhīvs

Katram arhīvam, kas minēts komandrindā pēc opcijas "Viss arhīvs ", saites arhīvā iekļaujiet visus objektu failus, nevis meklējiet nepieciešamos objekta failus arhīvā. Tas parasti tiek izmantots, lai izveidotu arhīva failu koplietojamā bibliotēkā, piespiežot katru objektu iekļaut iegūto kopīgo bibliotēku. Šo iespēju var izmantot vairāk nekā vienu reizi.

Divas piezīmes, izmantojot šo opciju no gcc: vispirms gcc nezina par šo opciju, tādēļ jums jāizmanto -Wl, -vispār arhīvs . Otrkārt, neaizmirstiet pēc arhīva saraksta izmantot -Wl, -no-whole-archive , jo gcc pievienos savu arhīvu sarakstu uz jūsu saiti, un jūs, iespējams, nevēlaties, lai šis karogs tos ietekmētu.

- apvilkt simbolu

Izmantojiet iesaiņojuma funkciju simbolam . Jebkura nenoteikta atsauce uz simbolu tiks atrisināta uz "__wrap_symbol". Jebkura nenoteikta atsauce uz "__real_symbol" tiks atrisināta līdz simbolam .

To var izmantot, lai nodrošinātu iesaiņojumu sistēmas funkcijai. Iesaiņojuma funkcijai jābūt nosauktai "__wrap_symbol". Ja tas vēlas izsaukt sistēmas funkciju, tas jālieto kā "__ real_symbol".

Šeit ir niecīgs piemērs:

anulēts * __wrap_malloc (int c) {printf ("malloc sauc ar% ld \ n", c); atgriezties __real_malloc (c); }

Ja jūs saistāt citu kodu ar šo failu, izmantojot --wrap malloc , tad visi zvani uz "malloc" izsauks funkciju "__wrap_malloc". Zvans uz "__real_malloc" ar "__wrap_malloc" izsauks reālo "malloc" funkciju.

Iespējams, vēlēsities arī nodrošināt "__real_malloc" funkciju, lai saites bez " wrap" opcijas gūtu panākumus. Ja jūs to izdarīsit, nevajadzētu ievietot "__ real_malloc" definīciju tajā pašā datnē kā "__wrap_malloc"; ja jūs to izdarīsit, montētājs var atrisināt zvanu, pirms linkeram ir iespēja ietvert to uz "malloc".

--enable-new-dtags

--disable-new-dtags

Šis saites elements var radīt jaunus dinamiskus tagus ELF. Bet vecākās ELF sistēmas, iespējams, tos nesaprot. Ja norādāt --nable-new-dtags , dinamiskās atzīmes tiks izveidotas pēc nepieciešamības. Ja norādāt --disable-new-dtags , netiks izveidoti jauni dinamiskie tagi. Pēc noklusējuma jaunie dinamiskie tagi netiek izveidoti. Ņemiet vērā, ka šīs opcijas ir pieejamas tikai FORF sistēmām.

PE-linker i386 atbalsta koplietojamo opciju, kas izraisa dinamiski saistītu bibliotēku (DLL), nevis normālu izpildāmo failu. Ja izmantojat šo opciju, jums jānorāda izlaide "* .dll". Turklāt saite pilnībā atbalsta standarta "* .def" failus, kurus var norādīt saišu komandrindā, piemēram, objekta failā (faktiski pirms arhīvu izveides tā eksportē no simboliem, lai nodrošinātu, ka tie ir saistīti, tāpat kā parasts objekta fails).

Papildus visiem mērķiem kopīgām opcijām i386 PE saite atbalsta papildu komandrindas opcijas, kas ir raksturīgas i386 PE mērķim. Iespējas, kuras ņem vērtības, var atdalīt no to vērtībām, izmantojot atstarpi vai vienādu zīmi.

- add-stdcall-alias

Ja tiek dota, simboli ar stdcall sufiksu (@ nn ) tiks eksportēti kā tādi, kā arī ar sufiksu noņemšanu.

- bāzes faila fails

Izmantojiet failufaila nosaukumu, kurā visu restaurāciju bāzu adreses saglabāt, lai izveidotu DLL ar dlltool .

- dll

Izveidojiet DLL, nevis regulāru izpildāmo failu. Jūs varat arī izmantot " dalītu" vai norādīt "BIBLIOTĒKU" konkrētā failā .def.

--enable-stdcall-fixup

--disable-stdcall-fixup

Ja saite atrod simbolu, kuru nevar atrisināt, tā centīsies veikt `` izplūdušo saites '', meklējot citu definētu simbolu, kas atšķiras tikai ar simbola nosaukuma formātu (cdecl vs stdcall) un atrisinās šo simbolu, saistot uz maču. Piemēram, nenoteiktais simbols "_foo" var būt saistīts ar funkciju "_foo @ 12", vai nenoteikts simbols "_bar @ 16" var būt saistīts ar funkciju "_bar". Ja saite to dara, tas izdrukā brīdinājumu, jo parasti tam nevajadzēja saistīt, bet dažkārt no trešo personu DLL izveidotajām bibliotēkām var importēt, lai šī funkcija būtu izmantojama. Ja norādāt --nable-stdcall-fixup , šī funkcija ir pilnībā iespējota un brīdinājumi netiek drukāti. Ja norādāt --disable-stdcall-fixup , šī funkcija ir atspējota un šādas neatbilstības tiek uzskatītas par kļūdām.

- Eksportēt visus simbolus

Ja tiek dota, DLL tiek eksportēti visi globālie simboli objektos, ko izmanto, lai izveidotu DLL. Ņemiet vērā, ka šis ir noklusējums, ja citādi nebūtu eksportēto simbolu. Ja simbolus nepārprotami eksportē, izmantojot DEF failus vai netieši eksportē, izmantojot funkciju atribūtus, pēc noklusējuma neeksportē neko citu, ja vien šī opcija nav dota. Ņemiet vērā, ka simboli "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" un "impure_ptr" netiks automātiski eksportēti. Arī no citiem DLL importētiem simboliem netiks atkārtoti eksportēts, kā arī nebūs simboli, kas norādītu DLL iekšējo izkārtojumu, piemēram, tos, kas sākas ar "_head_" vai beidzas ar "_iname". Turklāt netiek eksportēti simboli no libgcc, libstd ++, libmingw32 vai crtX.o. Simboli, kuru nosaukumi sākas ar "__rtti_" vai "__builtin_", netiks eksportēti, lai palīdzētu ar C ++ DLL. Visbeidzot, ir plašs cygwin-privāto simbolu saraksts, kurus neeksportē (protams, tas attiecas uz cigwin mērķu DLL veidošanu).

Šie cigwin-izņēmumi ir šādi: _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 "un" environ ".

--izslēgt simbolu simbolu , simbolu , ...

Norāda simbolu sarakstu, kurus nevajadzētu eksportēt automātiski. Simbolu nosaukumus var norobežot ar komatiem vai kolu.

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

Norāda arhīvu bibliotēku sarakstu, no kuriem simbolus nevajadzētu eksportēt automātiski. Bibliotēkas nosaukumus var norobežot ar komatiem vai kolu. Norādot "--exclude-libs ALL", automātiskās eksporta gadījumā netiek iekļauti simboli visās arhīvu bibliotēkās. Neatkarīgi no šīs opcijas joprojām tiek eksportēti simboli, kas ir skaidri norādīti .def failā.

--file-izlīdzināšana

Norādiet faila saskaņošanu. Faila sadaļas vienmēr sāksies ar faila starpībām, kas ir šī numura daudzkārtnes. Šis noklusējums ir 512.

- rezervuārs

- rezervuārs , izdarīt

Norādiet atmiņas apjomu, ko vēlaties rezervēt (un pēc izvēles izdarīt), lai to izmantotu kā šīs programmas pilni. Noklusējums ir rezervēts 1 MB, 4K izdarīts.

- attēla bāzes vērtība

Izmantojiet vērtību kā savas programmas vai dll pamata adresi. Šī ir viszemākā atmiņas vieta, kas tiks izmantota, kad jūsu programma vai dll tiks ielādēta. Lai samazinātu nepieciešamību pārcelt un uzlabot jūsu DLL veiktspēju, katrai no tām ir jābūt unikālai bāzes adresei, un tā nedrīkst pārklāties ar citām DLL. Noklusējums ir 0x400000 izpildāmajiem failiem un 0x10000000 - dll failiem.

- Kill-at

Ja tiek dota, stdcall sufiksus (@ nn ) tiks noņemti no simboliem pirms to eksportēšanas.

- lielas vērtības attēla versijai

Nosaka lielāko "attēlu versijas" numuru. Noklusējums ir 1.

- major-os-versijas vērtība

Nosaka lielāko daļu `` os versijas ''. Noklusējums ir 4.

- galvenā apakšsistēmas versijas vērtība

Nosaka galveno "apakšsistēmas versijas" numuru. Noklusējums ir 4.

--minor-image-versijas vērtība

Iestata mazo `` attēla versijas numuru ''. Noklusējums ir 0.

--minor-os-versijas vērtība

Iestata mazo "os versijas" numuru. Noklusējums ir 0.

--minor-apakšsistēmas versijas vērtība

Iestata nelielo "apakšsistēmas versijas" numuru. Noklusējums ir 0.

- izejas-def fails

Linker izveidos faila failu, kurā būs DEF fails, kas atbilst DLL, ko linker ģenerē. Šo DEF failu (ko dēvē par "* .def") var izmantot, lai izveidotu importa bibliotēku ar "dlltool" vai arī to var izmantot kā atsauci uz automātiski vai netieši eksportētiem simboliem.

- -out-implib fails

Linker izveidos faila failu, kurā būs importa lib, kas atbilst DLL, ko linker ģenerē. Šo importa lib (kuru dēvē par "* .dll.a" vai "* .a", var izmantot, lai saistītu klientus ar radīto DLL; šī darbība ļauj izlaist atsevišķu importēšanas bibliotēkas izveidošanas soli "dlltool".

--inable-auto-image-base

Automātiski izvēlieties DLL attēlu bāzi, ja vien tas nav norādīts, izmantojot argumentu "--image-base". Izmantojot dllname ģenerētu hash, lai izveidotu unikālu attēlu bāzi katrai DLL, atmiņas sadursmes un pārvietošana, kas var aizkavēt programmas izpildi.

--disable-auto-image-base

Nevar automātiski ģenerēt unikālu attēla bāzi. Ja nav lietotāja norādīta attēla bāzes ("--image-base"), pēc noklusējuma izmantojiet platformu.

--dll meklēšanas prefiksa virkne

Ja dinamiski saistot ar dll bez importa bibliotēkas, meklējiet " .dll", nevis "lib .dll". Šī uzvedība ļauj viegli nošķirt DLL, kas izveidoti dažādiem "platformas veidiem": vietējiem, cygwin, uwin, pw uc Piemēram, cygwin DLL parasti izmanto "--dll-search-prefix = cyg".

--inable-auto-importēt

Vai sarežģīta saišu "_symbol" saistīšana ar "__imp__symbol" DATA importam no DLL, un, izveidojot importa bibliotēkas ar šiem DATAexports, izveido nepieciešamos simbolus thunking. Tas parasti "vienkārši darbosies" --- bet dažkārt jūs varēsit redzēt šo ziņojumu:

"mainīgais" "nevar automātiski importēt. Lai iegūtu detalizētu informāciju, lūdzam izlasīt dokumentāciju ld" --enable-auto-import "."

Šis ziņojums rodas, ja daži (apakš) izteicieni piekļūst adresei, ko galu galā sniedz divu konstanšu summa (Win32 importēšanas tabulas to atļauj tikai). Gadījumi, kad tas var notikt, ietver piekļuvi elementu laukiem no strukturētajiem mainīgajiem, kas importēti no DLL, kā arī izmantojot nemainīgu indeksu masīvu mainīgajā, kas importēts no DLL. Jebkāds daudzmodu mainīgais (masīvi, struktūras, garš utt.) Var izraisīt šo kļūdas stāvokli. Tomēr, neatkarīgi no precīzā eksportētā mainīgā lieluma datu veida, ld vienmēr to atklās, izsniegs brīdinājumu un iziet.

Šo grūtību novēršanai ir vairāki veidi neatkarīgi no eksportētā mainīgā datu veida:

Viens no veidiem ir izmantot --nable-runtime-pseudo-reloc slēdzi. Tas paliek uzdevums koriģēt atsauces savā klienta kodā izpildlaiku vidē, tāpēc šī metode darbojas tikai tad, ja runtime environments atbalsta šo funkciju.

Otrs risinājums ir piespiest vienu no "konstantiem" būt mainīgam - tas ir, nezināms un ne-optimizējams kompilēšanas laikā. Par masīviem ir divas iespējas: a) padarīt indeksu (masīva adresi) mainīgo lielumu vai b) padarīt "konstantu" indeksu mainīgu. Tādējādi:

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

vai

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

Struktūrām (un lielākajai daļai citu multidu vārdu datu tipu) vienīgā iespēja ir padarīt struktūru pati (vai arī garu, vai arī ...) mainīgo:

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

vai

extern long long extern_ll; extern_ll -> {gaistošs ilgi ilgi * local_ll = & extern_ll; * local_ll)

Trešā metode, kā risināt šo grūtību, ir atteikties no "autoimportēšanas" par pārkāpušo simbolu un atzīmēt to ar "__declspec (dllimport)". Tomēr praksē ir nepieciešams izmantot compile time #defines, lai norādītu, vai veidojat DLL, izveidojat klienta kodu, kas piesaistīs DLL, vai vienkārši izveidosit / izveidosit savienojumu ar statisko bibliotēku. Veicot izvēli starp dažādām metodēm, lai atrisinātu problēmu ar tiešu adresi ar pastāvīgu kompensāciju, jums jāapsver tipisks reālās pasaules lietojums:

Oriģināls:

--foo.h extern int arr []; --foo.c # iekļaut "foo.h" anulēt galveno (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

1. risinājums:

--foo.h extern int arr []; --foo.c # iekļaut "foo.h" anulē galveno (int argc, char ** argv) {/ * Šis risinājums ir paredzēts win32 un cygwin; ne "optimizējiet" * / nestabilu int * parr = arr; printf ("% d \ n", parr [1]); }

2. risinājums:

--foo.h / * Piezīme: tiek pieņemts automātiskais eksports (nav __declspec (dllexport)) * / #if (definēts (_WIN32) || noteikts (__ CYGWIN__)) && \! (definēts (FOO_BUILD_DLL) || definēts (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c # iekļaut "foo.h" anulēt galveno (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

Ceturtais veids, kā izvairīties no šīs problēmas, ir atkārtoti kodēt savu bibliotēku, lai izmantotu funkcionālo saskarni, nevis datu saskarni pārkāpēju mainīgajiem (piemēram, set_foo () un get_foo () piekļuves funkcijām).

--disable-auto-importēt

Nemēģiniet veikt sophisticalted saites starp "_symbol" un "__imp__symbol", lai DATA importētu no DLL.

--nable-runtime-pseudo-reloc

Ja jūsu kods satur izteicienus, kas aprakstīti sadaļā "Iespējams automātiskais imports", tas ir, DATAimportē no DLL ar nulles nobīdi, šis slēdzis radīs "runtime pseudo relocations" vektoru, ko runtime vidi var izmantot, lai koriģētu atsauces ar šādiem datiem savā klienta kodā.

-disable-runtime-pseudo-reloc

Neizveidojiet pseidoidālos pārvietojumus DNS importam no DLL bez nulles no DLL. Tas ir noklusējums.

--nable-extra-pe-atkļūdošana

Parādīt papildu atkļūdošanas informāciju, kas saistīta ar automātiskās importēšanas simbolu izsaukšanu.

--Sekciju saskaņošana

Iestata sadaļas izlīdzināšanu. Atmiņas sadaļas vienmēr sāksies no adresēm, kas ir šī skaitļa atkārtojums. Noklusējums ir 0x1000.

- stack rezerves

- stack rezerves , izdarīt

Norādiet atmiņas apjomu, ko rezervēt (un pēc izvēles izdarīt), lai to izmantotu kā šīs programmas krātuvi. Noklusējums ir rezervēts 2 MB, 4K izdarīts.

- apakšsistēma, kas

- apakšsistēma, kas : galvenais

- apakšsistēma, kas : galvenais . nepilngadīgais

Norāda apakšsistēmu, saskaņā ar kuru jūsu programma tiks izpildīta. Tiesiskās vērtības ir "dzimtā", "logi", "console" un "posix". Varat pēc izvēles arī iestatīt apakšsistēmas versiju.

Svarīgi: izmantojiet vīriešu komandu ( % man ), lai redzētu, kā komanda tiek izmantota jūsu konkrētajā datorā.