Linux / Unix kommando: Id

NAMME

ld - LD brûke , de GNU- linker

SYNOPSIS

ld [ opsjes ] objfile ...

BESKRIUWING

ld kombinearret in oantal objekt en argyftriemmen, ferliedt har gegevens en tekenet symboalen referinsjes. Meastentiids is de lêste stap yn it kompilearjen fan in programma om ld te rinnen.

ld akseptearren Linker Command Language-bestannen skreaun yn in superset fan AT & T's Link Editor Command Language Syntaks, om eksplisite en total kontrôle oer it ferbiningsproses te leverjen.

Dizze man-side beskriuwt gjin kommando-taal; Sjoch it ld- yngong yn "info", of de hantlieding ld: de GNU- linker, foar folsleine details oer de kommando-taal en oer oare aspekten fan de GNU-linker.

Dizze ferzje fan ld brûkt de algemiene doelen fan BFD-biblioteken om te operearjen op objecttriemmen. Dit ld ld liede, kombinearje en skriuwtriem yn in protte ferskillende formaten --- bygelyks COFF of "a.out". Different formats may be combined together to produce any available kind of object file.

Utsein fan syn fleksibiliteit is de linker fan GNU mear brûke as oare linkers by it jaan fan diagnostyske ynformaasje. In soad linkers ferlitte fuortendaliks de útfiering fan in flater; Wannear't it mooglik is, ld fierder útfiere, wêrtroch jo oare fouten identifisearje (of, yn guon gefallen, in útfierbestân trouwens fan 'e flater).

De GNU- linker ld is bedoeld om in breed oanbod fan situaasjes te dekkenjen en as mooglik te kompatibel as mei oare linkers. As gefolch hawwe jo in soad karren om har gedrach te kontrolearjen.

OPTIONS

De linker stipet in pletora fan kommando-line-opsjes , mar yn 'e eigentlike praktyk wurde in pear fan harren brûkt yn in bepaald kontekst. Bygelyks, in feitlik gebrûk fan ld is om standert standert Unix object files op in standert, stipe Unix systeem . Op sa'n systeem, in keppeling te keppeljen "hello.o":

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

Dit liedt ld om in bestân út te fieren as resultaat fan it keppeling fan it bestân "/lib/crt0.o" mei "hello.o" en de biblioteek "libc.a", dy't komme sil fan 'e standert sykopdracht. (Sjoch de diskusje fan 'e -l opsje ûnder.)

Guon fan 'e kommando-rigel-opsjes ld kinne op ien fan' e kommando-rigels oantsjutte wurde. Opsjes lykwols dy't ferwize nei triemmen, lykas -l of -T , sille de triem lêze wurde op it punt wêryn't de opsje yn 'e kommandorigel ferskynt, relatyf oan de objekttriemmen en oare triemopties. It werheljen fan net-triem-opsjes mei in oare argumint sil no gjin eftergrûn hawwe, of foarôfgeand oanfallen (dizze fierder nei de lieding yn 'e kommandorigel) fan dizze opsje. Opsjes dy't meifere wurde kinne as ien kear wurde bepaald yn 'e beskriuwingen hjirûnder.

Net-opsjes-arguminten binne objekttriemmen of argiven dy't tegearre meiinoar keppele wurde. Se kinne folgje, foarôfgeane, of mei gemiddelde-opsjes mingd wurde, útsein dat in argumentaak foar object file net tusken in opsje en har argumint pleatst wurde.

Meastentiids wurdt de linker opnommen mei at least one object file, mar jo kinne oare foarmen fan binêre ynput bestannen brûke mei -l , -R , en de skriuwbehearstaal. As der gjin binêre ynfier bestannen op 't oantsjutte wurdt, sil de linker gjin output bringt en it berjocht ûntfange Gjin input-triemmen .

As de linker it formaat fan in objektfile net erkennen kin, sille jo der fan út wêze dat it in linker skript is. In skript dat op dizze manier oanjûn is, fergruttet it haad linker skript dat brûkt wurdt foar de link (of it standert linker skript of de ien oantsjutte mei -t ). Dizze funksje jout de linker te ferwiderjen tsjin in bestân dat in objekt of in argyf ferskynt, mar falt krekt wat symboalwearden, of brûkt "INPUT" of "GROUP" om oare objekten te laden. Tink derom dat it oanjaan fan in skript op dizze manier allinich it haad linker skript; brûke de -T option om it standert linker skript folslein te ferfangen.

Foar opsjes hokker nammen in inkelde letter binne, kinne opsjeopsjes de opsjeopsje folgje sûnder yntervende webspace, of as getulearre arguminten fuortdaliks nei de opsje dy't se freget.

Foar opsjes hokker nammen meardere letters binne, kinne ien of twa prestaasjes of de opsje beneame; bygelyks -trace-symboal en --trace-symboal binne lykweardich. Notysje - der is ien útsûndering foar dizze regel. Mearfâldige lettertypen dy't begjinne mei in leger saak 'o' kinne allinich troch twa stappen foardield wurde. Dit is om skeakeljen te ferleegjen mei de -o- opsje. Sa is bygelyks -omagic de útfier bestânnamme yn magie, wylst --omagic de NMAGIC flagge op 'e útfier set.

Arguminten foar meardere-letter-opsjes moatte ôfdekt wurde fan 'e opsje-namme troch in lykweardich teken, of wurde as apart arguminten fuortdaliks negearre neist de opsje dy't se freget. Foarbyld, --trace-symfo foo en --trace-symbol = foo binne lykweardich. Unike ôfkoartingen fan de nammen fan meardere letteropsjes wurde akseptearre.

Tink derom - as de linker yndirekt yndirekt is, fia in kompileardertreiber (bgl. Gcc ) dan moatte alle linker kommando- rigelopsjes foarkomme troch -Wl, (of wat is foar de spesifike kompiler-bestjoerder) sa as:

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

Dit is wichtich, om't oars kin it kompiler-bestjoerprogramma de linker-opsjes stil stean, sadat jo in minne keppeling krije.

Hjir is in tafel fan de generike kommando-rigelschepen akseptearre troch de GNU-linker:

-a keyword

Dizze opsje is stipe foar HP / UX-kompatibiliteit. It argumint fan 'e kaaiwurd moat ien fan it strings- argyf wêze , dielde of standert . -A-argyf is funksjoneel as BTW , en de oare twa kaaiwurden binne funksjoneel as bdynamik . Dizze opsje kin elke oantal kearen brûkt wurde.

- In arsjitekt

--architecture = arsjitektuer

Yn 'e aktive release fan ld is dizze opsje allinich brûke foar de Intel 960 famylje fan architecten. Yn dizze ld- konfiguraasje identifisearret it arsjitekt argumint de bepaalde arsjitektuer yn 'e famylje fan' e 960, wêrtroch guon safeguarders en feroaringen fan it argyf-biblioteek sykpaad binne.

Future releases fan ld kinne in relatyf funksjonaliteit foar oare arsjitekt famyljes stypje.

-b- ynfier-formaat

--format = ynfierformaat

ld kin konfigurearre wurde om mear as ien soarte fan triemtriem te stypjen. As jo ​​dizze lingte konfigurearje, dan kinne jo de -b- opsje brûke om it binêre formaat te jaan foar ynput- objektdialoarten dy't dizze opsje folgje op 'e kommandorigel. Ek as ld konfigurearre is om alternatyf objektfoarmfoarmen te stipe, moatte jo normaal net spesifike sille nedich wêze, omdat it ljeppe moat wurde as standertynfierformaat it meast gewoane formaat op elk machine. Ynfier-formaat is in tekststreek, de namme fan in bepaald formaat dat stipe wurdt troch de BFD-biblioteken. (Jo kinne de beskikbere binêre formaten opnimme mei objdump -i .)

Jo kinne dizze opsje brûke as jo keppele wurde mei triemmen mei in unusual flatbedriuw. Jo kinne ek brûke -b om formaten útslutend te wiskjen (as jo keppele objekttriemmen fan ferskillende formaten keppelje), troch ynbêde -b- ynfier-formaat foar elke groep fan object-bestannen yn in bepaalde formaat.

It standertfoarm is nommen fan 'e omjouwingsfariabele "GNUTARGET".

Jo kinne ek it ynfierformaat fan in skript definiearje, mei it kommando "TARGET";

-c MRI-kommandofile

- mri-script = MRI-kommandofile

Foar kompatibiliteit mei linkers makke troch MRI, aksepte skriptdateken skreaun yn in alternatyf begrypende kommandopsjet, beskreaun yn it MRI Kompatibel Skripttriem fan siden fan GNU ld dokumintaasje. MRI-skript-bestannen printe mei de opsje -c ; Brûk de -T- opsje om linker-skripts út te fieren dy't skreaun binne yn 't alfabet- ld- scripting-taal. As MRI-cmdfile net bestiet, sykje it ljocht yn 'e mappen dy' t oantsjutte binne op -L- opsjes.

-d

-dc

-dp

Dizze trije opsjes binne lykweardich; Meardere foarmen wurde stipe foar kompatibiliteit mei oare linkers. Se sille romte jaan oan mienskiplike symboalen, sels as in keppele werklike triem opjûn is (mei -r ). It skriptbefeiliging "FORCE_COMMON_ALLOCATION" hat deselde effekt.

-e yngong

--entry = ynkommens

Brûk ynfeksje as it explicit symboal foar it begjin útfieren fan jo programma, yn stee fan 'e standert yngongspunt. As der gjin symboalyske titel is, dan sil de linker besykje de yngong as in nûmer te ferwurkjen, en brûk dan as it ynfieradres (it getal wurdt yn basearre ynterpretearre; jo kinne in liedende 0x foar basis 16 brûke, of in liede 0 foar basis 8).

-E

- eksport-dynamysk

As jo ​​in dynamysk keppele effektyf meitsje, foegje alle symboalen ta oan de dynamyske symboalstafel. De dynamyske symboalstafel is de opset fan symboalen dy't sichtber binne fan dynamyske objekten op rige tiid.

As jo ​​dizze opsje net brûke, dan sil de dynamyske symboalstafel allinich allinich symboalen befetsje dy't ferwidere wurde troch wat dynamysk objekt dat neamd yn 'e keppeling.

As jo ​​"dlopen" brûke om in dynamysk objektsje te laden dy 't weromkommt nei de symboalen dy't it programma definiearre is, dan in oare dynamyske objekt, dan moatte jo dizze opsje wierskynlik brûke as jo it programma ferbine.

Jo kinne ek it ferzjen skript brûke om te kontrolearjen hokker symboalen tafoegje moatte oan 'e dynamyske symboalstafel as it útfierformaat it stipet. Sjoch de beskriuwing fan --versionskript yn @ref {VERSION}.

-EB

Link grutte endyen objekten. Dit beynfloedet it standertútfierformaat.

-EL

Link bitindige objekten. Dit beynfloedet it standertútfierformaat.

-f

- skaaimerke namme

As jo ​​in shared object ELF meitsje, set jo it ynterne DT_AUXILIARY fjild nei de opjûne namme. Dit fertelt de dynamyske linker dat de symboalstafel fan it dielde objekthús as in auxiliary filter brûkt wurde sil op 'e symboalstafel fan' e dielde objeknum.

As jo ​​letter in programma tsjin dit filter-objekt keppelje, dan sil it dynamysk linker as it programma útfiere, it fjild DT_AUXILIARY. As de dynamyske linker elke symboalen befestiget fan it filterobjekt, sil it earst kontrolearje oft der in definysje is yn de dielde objeknum. As der ien is, sil it plak brûkt wurde ynstee fan de definysje yn it filterobjekt. De dielde objektennamme moatte net bestean. Sa kin de dielde objeknamme brûkt wurde om in alternative útfiering fan beskate funksjes te jaan, miskien foar debuggen of foar spesifike spesifike prestaasjes.

Dizze opsje kin mear as ien kear opjûn wurde. De yntree's DT_AUXILIARY wurde yn 'e oarder makke, wêryn't se op' e kommandorigel ferskine.

-F namme

- filternamme

As jo ​​in shared object ELF meitsje, set jo it ynterne DT_FILTER fjild nei de opjûne namme. Dit fertelt de dynamyske linker dat de symboalstafel fan it dielde objekthod dat kreëarre wurdt brûkt wurde as filter op 'e symboalstafel fan' e dielde objeknum.

As jo ​​letter in programma tsjin dit filter-objekt keppelje, dan sil it dynamysk linker as it programma útfiere, it fjild DT_FILTER. De dynamyske linker sil symboalen liede neffens de symboalstafel fan it filterobjekt lykas gewoanlik, mar hy sille oeral keppele wurde oan de definysjes dy't fûn binne yn de dielde objeknum. Sa kin it filterobjekt brûkt wurde om in subset te selektearjen fan de symboalen dy 't troch de objektenamme levere wurde.

Guon âldere linkers brûke de -F- opsje yn in kompilaasje toolchain foar it beëinigjen fan objektdatei-formaat foar sawol inpute- en útfierobjektdateken. De GNU-linker brûkt oare meganismen foar dit doel: de -b , -format , -oformat- opsjes, it kommando "TARGET" yn linkerkripten, en de omjouwingsfariabele "GNUTARGET". De GNU-linker ignores de -F- opsje as jo gjin dielde objektsje meitsje.

-fini namme

By it meitsjen fan in ELF-útfierber of dielde objektsje, nim dan NAME as it útfiert of dielde objekt is ûntlitten, troch DT_FINI yn te stellen oan it adres fan de funksje. Standert stiet de linker "_fini" as de funksje om te neamen.

-g

Ignored. Provided for compatibility with other tools.

-G wearde

--gpsize = wearde

Set de maksimale grutte fan objekten om te optimearjen mei help fan it GP-register om te grutte . Dit is allinich betsjuttend foar objekttriemformaten lykas MIPS ECOFF dy't stipe fan grutte en lytse objekten yn ferskate dielen. Dit wurdt negeard foar oare triemfoarmformaten.

-h namme

-soname = namme

By it meitsjen fan in shared shared object ELF set it ynterne DT_SONAME fjild nei de opjûne namme. As in útfierber ferbûn is mei in dielde objekt dat in fjild DT_SONAME hat, dan as de útfierber útfiert is, sil de dynamyske linker probearje om it dielde objek op te laden, fêstlein troch it fjild DT_SONAME, mar it brûken fan de namme fan de triemnamme oan de linker.

-ik

In ynkrementaal keppeling dwaan (lykas opsje -r ).

-init namme

By it meitsjen fan in ELF-útfierber of dielde objektsje, nim dan NAME as it útfierbere of dielde objekt is laden, troch DT_INIT yn te stellen nei it adres fan de funksje. Standert stiet de linker "_init" as de funksje om te neamen.

-l- argyf

--library = argyf

Arkive triem- argyf taheakje oan de list mei bestannen om te keppelen. Dizze opsje kin elke oantal kearen brûkt wurde. ld sil syn paadlist sykje foar foarkommen fan "libarchive.a" foar elke argyf oantsjutte.

Op systemen dy't dielde biblioteken stypje, kin ld ek sykje foar biblioteken mei oare útwikselings as ".a". Specifically, on ELF and SunOS systems, ld will search a directory for a library with a extension of ".so" before searching for one with a extension of ".a". Troch konvinsje wurdt in ".so" útwreiding oanjûn in dielde bibleteek.

De linker sil allinich ien argyf sykje op 'e lokaasje dêr't it opjûn wurdt op' e kommandorigel. As it argyf in symboal definiearret dat ûnfoldwaande is yn in wat foarwerp dat foar it argyf op 'e kommandorigel ferskynt, sil de linker de passende triemmen ynstelle fan it argyf. In net-definiearre symboal yn in foarwerp dat op 'e kommando-rigel ferskynt, sil de linker net om it argyf opnij sykje.

Sjoch de - ( opsje foar in manier om de linker te heljen om meardere kearnen argiven te sykjen.

Jo kinne itselde argyf meardere kearen op'e kommando-rigel opnimme.

Dizze soarte argyf sykje is standert foar Unix linkers. As jo ​​lD onAIX brûke, besjen, dat it oars is fan it gedrach fan 'e AIX linker.

-L searchdir

--library-path = searchdir

Foegje paadwizigje nei de list mei paden dy't ld socht nei argyfbiblioteken en ld- kontrole-skripts. Jo kinne dizze opsje elke tiden brûke. De mappen wurde socht yn 'e oarder wêryn't se oanjûn binne op de kommandorigel. De gegevens op 'e kommando-rigel binne befeilige foardat de standerttriemmen binne. Alle -L- opsjes tapasse op alle- l- opsjes, sûnder de opdracht wêryn't de opsjes ferskine.

As syk begjint mei "=", dan sil de "=" ferfangen wurde troch it sysroot-prefix , in paad dat as jo de linker ynsteld is.

De standert opset fan paden (sûnder spesifisearre mei -L ) hinget ôf fan hokker emulaasjemodus ld brûkt, en yn guon gefallen ek oer hoe't it ynsteld is.

De paden kinne ek yn in keppel skript oanjûn wurde mei it kommando "SEARCH_DIR". Dizze opsjes op dizze manier binne socht op it punt wêryn it linker skript yn 'e kommandorigel ferskynt.

-m emulation

Emulearje de emulator- linker. Jo kinne de beskikbere emulaasjes oanmeitsje mei de --verbose- of -V- opsjes.

As de -m- opsje net brûkt wurdt, wurdt de emulaasje nommen fan 'e omjouwingsfariabele "LDEMULATION", as dat definieare is.

Oars is de standert emulation heger as hoe't de linker ynsteld is.

-M

--print-map

Print in keppelingkaart nei de standertútfier. In linkkaart jout ynformaasje oer de link, ynklusyf de folgjende:

*

Wêr't triemtypen en symboalen yn map beskreaun binne.

*

Hoe mienskiplike symboalen wurde allocearre.

*

Alle argyfmiddels binne yn 'e ferwizings ynnommen, mei in ferwachting fan it symboal dat de argyfslid feroarsake hat.

-n

--nmagic

Sesje de ôfstekking fan ôfdielingen ôf, en markearje de útfier as "NMAGIC" as mooglik.

-N

--omagic

Set de tekst en gegevens te lêzen en skriuwber te wêzen. Brûk ek it gegevensaksje net side-opnij, en keppeling te ferbinen tsjin dielde biblioteken. As it útfiertfoarm stipet Unix styl magyske nûmers, markearje de útfier as "OMAGIC".

--no-omagysk

Dizze opsje ferlytset de measte fan 'e effekten fan' e -N opsje. It stelt de tekst sekere om allinich lêzen te litten, en draacht it gegevensmiddel om side-op te rjochtsjen. Taljochting - dizze opsje lit gjin ferbining meitsje tsjin dielde biblioteken. Brûk dit -dynamyk foar dit.

-o output

--útput = útfier

Brûk output as namme foar it programma dat ld ; As dizze opsje net bepale is, wurdt de namme a.out standert brûkt. It skriptbefeiliging "OUTPUT" kin ek de útfier bestânnamme opjaan.

-O nivo

As nivo in numeryske wearden grutter dan nul ld optimearret de útfier. Dit kin wichtiger duorje en dêrtroch moat wierskynlik allinich ynskeakele wurde foar de finale binary.

-q

--emit-relocs

Ferjit de ôfdielings en ynhâld yn folslein keppele eksekesseklubs. Post-link-analyses en optimisaasjemiddels kinne dizze ynformaasje nedich wêze om korrekte modifikaasjes fan útfierbaren út te fieren. Dit resultaat in gruttere útfierber.

Dizze opsje is op it stuit allinich stipe op ELF-platfoarms.

-r

- ferwiderje

Generearje werknopbere útfier --- dus, generearje in útfier bestân dat kin wurde as ynfier oan ld tsjinje. Dit wurdt faak ferneamd. As side-effekt, yn omjouwingen dy't standert Unix magyske nûmers stypje, set dizze opsje ek it magyske nûmer fan 'e útfierdialte op "OMAGIC". As dizze opsje net bepale is, wurdt in absolute triem makke. By it ferbinen fan C ++-programma's, sil dizze opsje gjin ferwizings nei konstruksjes oplosse; dit dwaan, brûke -Ur .

As in ynfier triem net itselde formaat hat as it útfier bestân, wurdt partiel-keppeling allinich stipe as dit ynfiertriem gjin beheinings befetsje. Troch ferskate útfierformaten kinne oare beheinings hawwe; Bygelyks guon "a.out" -baasde formaten stypje gjin dielde keppeling mei input-triemmen yn oare formaten.

Dizze opsje docht itselde as -i .

-R filename

--just-symbols = filename

Lês symboalnammen en har adressen fan de triemnamme , mar ferlitte net it of ferpleatse it yn 'e útfier. Dit soarget dat jo útfier bestânsymboalysk ferwize nei absolute lokaasjes fan spultsje, definiearre yn oare programma's. Jo kinne dizze opsje mear as ien kear brûke.

Foar kompatibiliteit mei oare ELF-keppelers, as de -R- opsje folge wurdt troch in mapnamnam , anterste as in triemnamme, wurdt it behannele as -rpath- opsje.

-s

- strip-alles

Ferlieze alle symbolynformaasje fanút it útfier bestân.

-S

--strip-debug

Obefetsje symboalynformaasje fan debugger (mar net alle symboalen) út it útfier bestân.

-t

--trace

Printsje de nammen fan de ynfier bestannen as ld ferwurket.

-T skriptfile

--script = skriptfile

Skriptfile brûke as it linkerkript. Dit skript ferfarskje de standert linker skript fan ld (ynstee fan it taheakjen), dus kommandofile moat alles nedich spesifisearje om it útfier bestân te beskriuwen. As skriptfile bestiet net yn it aktive triemtafel, sykje "ld" foar it yn 'e mappen dy' t oanjûn wurde troch elk foar -L- opsjes. Multiple -T- opsjes sammelje.

-u symboal

--undefined = symboal

Sykresultaat moat ynfierd wurde yn it útfier bestân as in fûnemintele symboal. Dit kin bygelyks it ferbetterjen fan oanfoljende modules út standertbiblioteken útwreidzje. -u kin werhelle wurde mei ferskate opsjearguminaten om mear ûnthâlde symboalen te ynfoljen. Dizze opsje is lykwichtlik as it kommando "EXTERN" skript befetsje.

-Ur

Foar alles wat oars as C ++-programma's, is dizze opsje lykweardich mei -r : it generearret werknopbere útfier --- dat is in útfier bestân dat kin as doel oan ld tsjinje. By it ferbinen fan C ++-programma's, -Or beheare ferwizings nei konstruktueren, oars as -r . It wurket net oan brûke -Ur op bestannen dy't sels ferbûn binne mei -Ur ; Sawol it konstruktor-tafel is boud, kin it net tafoege wurde. Brûk -Id allinich foar de lêste dielsteat, en -r foar de oaren.

--unique [= SECTION ]

Makket in aparte ôfdielingseksje foar elke ynfier sekere dy't oerienkomt mei SECTION , of as it opsjoneel wachtwurden SECTION argument falt, foar elke orphan-ynfier sekere. In orphan-paragraaf is ien dy't net spesifyk yn in linker skript neamd wurdt. Jo kinne dizze opsje meardere kearen brûke op de kommando-rigel; It foarkommen fan it gewoane gearfoegjen fan ynfierbereiden mei deselde namme, it oersetten fan útfieringsadres opnij yn in linkerkript.

-v

--ferzje

-V

Lit it ferzjenûmer foar ld sjen litte . De -V- opsje listet ek de stipe emulationsen.

-x

--discard-all

Alle lokale symboalen wiskje.

-X

--discard-lokale

Alle tydlike lokale symboalen wiskje. Foar de measte doelen is dit alle lokale symboalen wêrfan de nammen begjinne mei L.

-y symboal

--trace-symbol = symboal

Print de namme fan elke keppele triem wêryn it symboal ferskynt. Dizze opsje kin in tal kearen krije. Op in protte systemen is it nedich om in subsydzje te foarkommen.

Dizze opsje is nuttich as jo in ûnfoldige symboal hawwe yn jo link, mar witte net wêr't de referinsje komt.

-Y paad

Foech paad nei it standert biblioteek-sykpaad. Dizze opsje is foar Solaris kompatibiliteit.

-z keyword

De erkende kaaiwurden binne "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" en "nocopyreloc ". De oare kaaiwurden wurde negeard foar Solaris kompatibiliteit. "initfirst" markearret it objekt dat earst op runtime foar elk oare objekten ynitialisearre wurde. "interpose" markt it objekt dat syn symboaletabel foardat alle symboalen mar de primêre útfierber is. "loadfltr" markearret it objekt dat syn filters fuortendaliks op rune ferwurke wurde. "nodefaultlib" markt it objekt dat it sykjen nei ôfwikingen fan dit objekt ignoret alle standertbibliotheekkeitspaden. "nodelete" markearret it objekt net op it runtime ûntlient. "nodlopen" markt it objekt net beskikber foar "dlopen". "nodûp" markt it objekt kin net ôfdrukt wurde troch "dldump". "no" markt it objekt mei de net-lazyende runtime-ferbining. "oarspronklik" markt it objekt dat kin $ ORIGIN. "defs" skriuwt net definieare symboalen. "muldefs" jout meardere definysjes. "combreloc" kombinearret meardere reloc-ôfdielings en soarget se om dynamyske symboalykjen te meitsjen mooglik te meitsjen.

"nocombreloc" útsette meardere reloc-seks kombinearjen. "nocopyreloc" ferwideret de produksje fan kopieplakjes.

- ( argiven -)

- argyf - groep argyf - ein-groep

De argiven moatte in list fan argyftriemmen wêze . Se kinne tagelyk eksplisite triemnammen, of -l- opsjes wêze.

De oantsjutte argiven wurde nettsjinwurdich trochsneare oant der gjin nije net-fereaske referinsjes binne makke. Normaal wurdt in argyf allinich besochte yn 'e folchoarder dat it oanjûn is op' e kommandorigel. As in symboal yn dit argyf needsaaklik is om in net-definiearre symboal te bewarjen dat oantsjutte wurdt troch in objekt yn in argyf dat letter op 'e kommandorigel ferskynt, koe de linker dizze referinsje net beheare kinne. Troch de argiven te groepearjen, wurde allegear werhelle wurde oant alle mooglike ferwizings oplost binne.

Mei dizze opsje hat in wichtige prestaasjekosten. It is it bêste om it allinich te brûken as der gjin ûnferbidlike referinsjes binne tusken twa of mear argiven.

--accept-unknown-input-arch

-no-aksepte-ûnbekende-ynput-arge

Ferwizigje de linker om input-bestannen te akseptearjen wêrfan de arsjitektuer net erkend wurde kin. De oerlevering is dat de brûker wit wat se dogge en bewust wolwêze yn dizze ûnbekende ynput triemmen. Dit wie it standert gedrach fan 'e linker, foar't frijlieder 2.14. It standert gedrach fan útjeften 2.14 ôf is om ôfdrukke triemen yn te fieren, en dus is de opsje fan 'aksept-ûnbekende-ynput-arge' taheakke om it âlde gedrach te restaurearjen.

-assert stipe

Dizze opsje is negeard foar SunOS-kompatibiliteit .

-Dynamic

-dy

-call_shared

Link tsjin dynamyske biblioteken. Dit is allinich betsjuttend op platfoarmen wêrmei dielde bibleteek stipe wurde. Dizze opsje is normaal de standert op soart platfoarmen. De ferskillende farianten fan dizze opsje binne foar kompatibiliteit mei ferskate systemen. Jo kinne dizze opsje meardere kearen brûke op de kommando-rigel: it beynfloedet de biblioteek op sykjen op -l opsjes dy folgje.

-Bgroup

Set de flagge "DF_1_GROUP" yn 'e "DT_FLAGS_1" ynfier yn' e dynamyske seksje. Dit soarget de runtime linker om sykjen nei dizze objekt te behanneljen en har ôfhinklikens allinich binnen de groep útfierd wurde. -no-undefined is implied . Dizze opsje is allinich sinfol op ELF-platfoarms dy't dielde biblioteken stypje.

- Batis

-dn

-non_shared

-statis

Net keppelje tsjin dielde biblioteken. Dit is allinich betsjuttend op platfoarmen wêrmei dielde bibleteek stipe wurde. De ferskillende farianten fan dizze opsje binne foar kompatibiliteit mei ferskate systemen. Jo kinne dizze opsje meardere kearen brûke op de kommando-rigel: it beynfloedet de biblioteek op sykjen op -l opsjes dy folgje.

-symbolyk

As jo ​​in dielde bibleteek meitsje, ferwize ferwizings nei globale symboalen oan 'e definysje binnen de dielde biblioteek, as der binne. Normaal is it mooglik foar in programma dy't keppele is tsjin in dielde bibleteek om de definysje yn 'e diel te meitsjen. Dizze opsje is allinich sinfol op ELFplatforms dy't dielde biblioteken stypje.

- check-sections

--no-kontrolearje

Freget de linker om sekere adressen te besjen nei't se oantsjutte binne om te sjen oft der in oerlappe is. Normaal sil de linker dizze kontrôle útfiere, en as it in oerlapkes fynt, sil hy passende foutmeldingen meitsje. De linker kin witte oer, en makket betingsten foar siden yn overlays. It standert gedrach kin wersteld wurde troch it gebrûk fan de kommando-rigel- check-seksjes te brûken .

--cref

Utfier in cross referinsje tabel. As in lofterkartriem generearre wurdt, wurdt it cross referinsjetablo oan it map bestiet. Oarspronklik wurdt it printt op 'e standertútfier.

It formaat fan 'e tafel is yntensint ienfâldich, sadat it kin maklik ferwurke wurde troch in skript as dat nedich is. De symboalen wurde útjûn, sorteare troch namme. Foar elke symboal wurdt in list mei triemnammen jûn. As it symboal definiearre is, is de earste opnaam is de lokaasje fan 'e definysje. De oerbleaune bestannen befetsje referinsjes nei it symboal.

-no-define-common

Dizze opsje ynteressearret de opdracht fan adressen nei mienskiplike symboalen. It skriptbefeiliging "INHIBIT_COMMON_ALLOCATION" hat itselde effekt.

De -no-definie-mienskiplike opsje lit it beslút ta ûntjouwing om adressen te jaan oan Wiskige symboalen út 'e kar foar it bestânstype-type; oars kinne in net-Relocatable-útfiertyp krêften oantsjutte oan adressen oan Common Symbols. It brûken fan -no-define-common kinne gebrûklike symboalen dy't wurde ferwiisd út in dielde bibleteek, om adressen allinich yn it haadprogramma te wizen. Dit eliminearret de net brûkte dûbele romte yn 'e dielde bibleteek, en foarkomt alle eventuele mislediging oer oplieding foar de ferkeard duplikaat as der in protte dynamyske modules binne mei spesjale sykpaden foar runtime symboalysjen.

--defsym symbol = ekspresje

Meitsje in globale symboal yn it útfier bestân, mei it absolute adres dat ekspresje wurdt . Jo kinne dizze opsje sa folle kear as nedich brûke om meardere symboalen yn 'e kommandorine te definiearjen. In beheindere foarm fan arithmetyk wurdt stipe foar de útdrukking yn dit kontekst: jo kinne in hexadezimale konstante of de namme fan in besteande symboal jaan, of "+" en "-" brûke om hexadezimale konstanten of symboalen te foegjen of te foarkommen. As jo ​​mear útwurke ekspresje nedich binne, besykje it gebrûk fan 'e linkerbehearstaal fan in skript te brûken. Taljochting: der moat gjin wite romte tusken symboal , it lykweardich teken (`` = ''), en ekspresje .

--demangle [= styl ]

-no-demangle

Dizze opsjes kontrolearje of as symboalnammen yn fereach-berjochten en oare útfier binne. As de linker ferteld wurdt om te ferslaan, besiket er symboalnammen yn in lêsbere modus: dy liedt ûndersteande ûnderwerpen as se brûkt wurde troch it objektmaatma-formaat, en ferpleatse C ++-mangele symboalnammen yn brûkers lêsbere nammen. Ferskillende kompilearders hawwe ferskate mangelingstilen. It opsjoneel fergunning styl argumint kin brûkt wurde om jo passende styl foar jo kompiler te kiezen. De keppeling sil ôfbrekke as standert as de omjouwingsfariabele COLLECT_NO_DEMANGLE ynsteld is. Dizze opsjes kinne brûkt wurde om it standert te feroverjen.

--Dynamic-linker triem

Set de namme fan de dynamyske linker. Dit is allinich betsjuttend by it generearjen fan dynamysk keppele ELF-útfierbaren. De standert dynamyske linker is normaal goed; Brûk dit net as jo net witte wat jo dogge.

--embedded-relocs

Dizze opsje is allinich betsjuttend by it ferbinen fan MIPS-embedded PIC-koade, generearre troch de -membedded-pic-opsje oan de GNU-kompiler en assembler. It feroarsaket de linker om in tabel te meitsjen dy't tagelyk brûkt wurde kin om alle gegevens te feroarjen dy't statysk ynisjalisearre binne foar pointerwearden. Sjoch de koade yn testsuite / ld-empic foar details.

--fatal-warskôgingen

Behannelje alle warskôgingen as fouten .

- foar-ekse-suffix

Soargje derfoar dat in útfier bestân in suffikseks eksemplaar hat.

As in suksesfolle opbouwde folslein keppeleútfier bestân hat gjin " .exe " of " .dll " suffix hat dizze opsje de linker om it útfiertriem oan ien fan deselde namme te kopiearjen mei in ".exe" suffix. Dizze opsje is nuttich by it brûken fan unmodifisearre Unix makefiles op in Microsoft Windows host, om't guon ferzjes fan Windows gjin ôfbylding útfiere, útsein it einiget yn in ".exe" suffix.

--no-gc-seksje

--gc-seksje

Selektearjen fan mûglikken fan ûnnedige ynfierbereiden. It wurdt ignorearre op doelen dy't dizze opsje net stypje. Dizze opsje is net kompatibel mei -r , noch moat it brûkt wurde mei dynamyske keppeling. It standert gedrach (fan dizze digmaasje net útfiere) kin restaurearre wurde troch it spesifisearjen fan -no-gc-seksjeen op 'e kommandorigel.

--help

Druk in gearfetting fan de kommando-line-opsjes op 'e standert output en út.

--target-help

Druk in gearfetting fan alle doelsoarten spesifike opsjes op de standert output en út.

-Map mapfile

Print in keppelingkaart nei it bestân mapfile . Sjoch de beskriuwing fan de -M- opsje, boppe.

-no-keep-memory

ld normale optimisearret foar snelheid oer memory usage troch it caching de symboaltalen fan input-bestannen yn 't ûnthâld. Dizze opsje fertsjintwurdet ld ynstee fan optimaal te brûken foar spesjale gebrûk, troch it symboal tafoegings werjaan as needsaaklik. Dit kin gebrûk wêze as ld ld út 'e ûnthâld romte rint, wylst in grutte programma keppele is.

-no-undefined

-z defs

Normaal by it meitsjen fan in net-symboalyske dielde bibleteek, net-fereaske symboalen binne tastien en litten om te bepalen troch de runtime loader. Dizze opsjes ferlitte soksoarte ûnbeskene symboalen.

--allow-multiple-definysje

-z muldefs

Normaal as in symboal meardere kearen fêstlein wurdt, sil de linker in fatale flater rapportearje. Dizze opsjes jouwe meardere definysjes en de earste definysje wurdt brûkt.

--allow-shlib-undefined

Ljeppe net-define symboalen yn dielde objekten sels as -no-undefined wurdt ynsteld. It netresultaat sil wêze dat net-definiearre symboalen yn reguliere objekten in flater úteinsette, mar net-fereaske symboalen yn dielde objekten wurde negearre. De útfiering fan no_undefined makket de oerjefte dat de runtime linker op net-definiearre symboalen opknapt. It is lykwols op syn minst ien systeem (BeOS) dêr't ûnfoldige symboalen yn dielde biblioteken normaal binne, om't de kernel se lade tiid om te selektearjen hokker funksje de measte funksjes is foar it aktive arsjitekt. IE dynamysk selektearje in passende memsetfunksje. Miskien is it ek gewoanlik foar HPPA dielde libraries om ûnfoldige symboalen te hawwen.

-no-undefined-ferzje

Normaal as in symboal in net-definieare ferzje hat, sil it linker it net misse. Dizze opsje ferleget symboalen mei net-fereaske ferzje en in fatal ûnthâld wurdt ynstelle.

-no-warskôging

Normaal ld sil in flater jaan as jo besykje tegearre keppele ingelten bestannen te keppeljen dy't inkele reden binne miskien, miskien om't se komponearre binne foar ferskate processors of foar ferskillende endiannesses. Dizze opsje fertsjintwurdet ld dat it soene mooglik soarchfâldige fouten fergiftigje moat. Dizze opsje moat allinich brûkt wurde mei soarch, yn gefallen as jo in spesjale aksje besochte hawwe dy't derfoar soarget dat de linkerfouten ûnfoardich binne.

--no-hiel-argyf

Slaen it effekt fan 'e --wole-argyf- opsje foar lettere argyfbestannen.

--noinhibit-exec

Bewarje it útfierbere bestânsdialoarten wannear't it noch brûke kin. Normale wurdt de linker gjin output-bestân meitsje as it misbrûkt mist by de link proses; it ferwachtet sûnder it skriuwen fan in útfier bestân as it allinich flater jout.

-nostdlib

Alle sykbiblioteken-mappen wurde eksplisyt oanjûn op de kommando-rigel. Bibleteektafels oanjûn yn linkerkripten (ynklusyf linker-skripts oanjûn op 'e kommandorigel) wurde ignorearre.

- formaatútfier -formaat

ld kin konfigurearre wurde om mear as ien soarte fan triemtriem te stypjen. As jo ​​dizze lingte ynsteld binne, kinne jo de -format- opsje brûke om it binêre formaat te oanjaan foar it útfierobjektdatei . Ek as ld konfigurearre is om alternatyf objektfoarmfoarmen te stypjen, moatte jo normaal needsaaklik wêze om dit te bepalen, lykas ld konfigurearre wurde as standertútfierformaat it meast gewoane formaat op elk machine. output-formaat is in tekststring, de namme fan in bepaald formaat dat stipe wurdt troch de biblioteken BFD. (Jo kinne de beskikbere binêre formaten opnij mei objdump -i .) It skriptbefeiliging "OUTPUT_FORMAT" kin it útfierformaat ek spesifisearje, mar dizze opsje is it oerskriuwe.

-qmagic

Dizze opsje is negeard foar Linux kompatibiliteit.

-Qy

Dizze opsje is negeard foar SVR4-kompatibiliteit.

--relax

In opsje mei masineôfhinklike effekten. Dizze opsje is allinich stipe op in pear doelen.

Op guon platfoarms wurdt de -relax- opsje globalisearre optimisaasjes útfierd dy't mooglik wurde as de linker it adressearjen yn it programma beheart, lykas relaasjere adressenmodi en it ynstellingen fan nije ynstruksjes yn 'e útfierobjektdatei.

Op guon platfoarm kinne dizze globale optimisaasjes sjen litte mei it symbolyk debugjen fan 'e resultaat útfierbere ûnmooglik meitsje. Dit is bekend om it gefal te wêzen foar de Matsushita MN10200 en MN10300 famylje fan prosessen.

Op platfoarms wêr't dit net stipe wurdt, --relax wurdt akseptearre, mar negearre.

--retain-symbols-triem filename

Hâld allinich de symboalen dy't yn 'e triem- filenamme opnommen wurde , alle oare oardielen te ferwiderjen. Filename is gewoan in flach bestân, mei ien symboal namme per line. Dizze opsje is benammen brûkber yn omjouwingen (lykas VxWorks) wêr't in grut global symboalyske tabel stadichoan opnommen wurdt om de rinnende-tiidûnthâld te behâlden.

--retain-symbols-bestriem bestiet net- fereaske symboalen, of symboalen dy't nedich binne foar relocaasjes.

Jo kinne allinich --retain-symbols-bestân ienigje yn 'e kommandorigel. It oerskriuwt -s en -S .

-rpath dir

Foegje in map ta oan it biblioteek-sykpaad fan runtime. Dit wurdt brûkt as jo in elfekseksibel ferpleatse mei dielde objekten. Alle arguminten fan rpath wurde ferkocht en passe nei de runtime linker, dy't har brûkt om dielde objekten te rinnen op runtime. De opsje- rpath- opsje wurdt ek brûkt om lokale objekten te pleatsen dy't nedich binne troch dielde objekten dy't eksplisyt yn 'e keppeling opnaam binne; Sjoch de beskriuwing fan de -rpath-link- opsje. As -rpath net brûkt wurdt as jo in ELF-útfierber ferbine, sil de ynhâld fan de omjouwingsfariabele "LD_RUN_PATH" brûkt wurde as it definiearre is.

De opsje- rpath kin ek brûkt wurde op SunOS. Standert, op SunOS sil de linker in runtime sykaksje útfiere fan alle -L- opsjes dy 't jo hawwe. As in -rpath- opsje brûkt wurdt, wurdt de runtime sykpaad útsluten makke troch de -rpath- opsjes te brûken, sûnder de -L- opsjes te missen. Dit kin brûkber wêze by it brûken fan gcc, dy't in soad -L- opsjes tafoegd, dy't op NFS opsleine filesystems wêze kinne.

Foar kompatibiliteit mei oare ELF-keppelers, as de -R- opsje folge wurdt troch in mapnamnam , anterste as in triemnamme, wurdt it behannele as -rpath- opsje.

-rpath-link DIR

By it brûken fan ELF of SunOS kin ien dielde biblioteek in oare wêze. Dit bart as in "ld -shared" link in dielde bibleteek hat as ien fan 'e ynput bestannen.

Wannear't de linker sa'n soarte ôfwikseling besiket as jo in net-dielde, net ferwiderjende keppeling dwaan, sil it automatysk besykje de needsaaklike dielbibleteek te finen en yn it keppeling oan te sluten, as it net explicit is opnommen. Yn sa'n gefal bepaalt de -rpath-link- opsje de earste set fan mappen om te sykjen. De opsje-rpath-link- opsje kin in sekere fan triemnammen bepale troch te bepalen fan in list fan nammen, skieden troch kolon, of troch meardere kearen ferskynt.

Dizze opsje moat brûkt wurde mei warskôging, omdat it sykpaad dat foarkommen hurd kompilearre is yn in dielde bibleteek. Yn sa'n gefal is it mooglik untensyf in oare sykpaad te brûken as de runtime linker te dwaan.

De keppeling brûkt de folgjende sykpaden om de ferplichte dielde biblioteken te finen.

1.

Alle mappen oantsjutte troch -rpath-link- opsjes.

2.

Alle mappen dy 't oantsjutte binne troch -rpath- opsjes. It ferskil tusken -rpath en -rpath-link is dat mappen op -rpath- opsjes wurde ynfierd yn 'e útfierber en brûkt yn' e runtime, wylst de -rpath-link- opsje allinich effektyf is op link-tiid. It is allinich foar de memmetaal.

3.

Op in ELF-systeem, as de -rpath- en "rpath-link" opsjes net brûkt wiene, sykje de ynhâld fan it omjouwingsfariabele "LD_RUN_PATH". It is allinich foar de memmetaal.

4.

Op SunOS, as de opsje- rpath net brûkt waard, sykje jo hokker direkteuren oantsjutte mei -L- opsjes.

5.

Foar in memmetaal keppele is de ynhâld fan it omjouwingsfariabele "LD_LIBRARY_PATH".

6.

Foar in native ELF linker wurde de dellûkers yn "DT_RUNPATH" of "DT_RPATH" fan in dielde bibleteek trochsjoen foar dielde libraries dy't nedich binne. De entries "DT_RPATH" wurde negearre as wannear "DT_RUNPATH" befettings bestean.

7.

De standert-mappen, normaal / lib en / usr / lib .

8.

Foar in memmetaal-keppeling op in ELF-systeem, as de triem /etc/ld.so.conf bestiet, is de list mei mappen dy 't yn dit bestân fûn binne.

As de fereaske dielde biblioteek net fûn is, sil de linker in warskôging krije en trochgean mei de link.

-shared

-Bshareable

In dielde bibleteek meitsje. Dit is op it stuit allinich stipe op ELF, XCOFF en SunOS-plattformen. Op SunOS sil de linker automatysk in dielde bibleteek meitsje as de -e- opsje net brûkt is en der binne net-define symboalen yn 'e keppeling.

--sort-common

Dizze opsje fertsjintwurdet ld om de mienskiplike symboalen te bepalen troch de grutte as it se yn 'e passende útfierbere siden pleatst. Earst allegearre ien iets byte symboalen, dan alle beide byte, dan alle fjouwer byte, en dan alles wat oars. Dit is om lytsen tusken symboalen te foarkommen troch opnij begrippen.

- split-by-file [ grutte ]

Fergelykber mei --split-by-reloc makket mar in nije output-seksje foar elke input-bestân as de grutte berikt is. De grutte befetsje in grutte fan 1 as net jûn wurdt.

--split-by-reloc [ count ]

Besiket om ekstra seksjes te meitsjen yn it útfier bestân, sadat gjin ienige útfier yn 't bestân mear as sluten feroare. Dit is handich by it generearjen fan grutte ferfetsjele triemmen foar it ynladen fan bestimmte echte kearne kernels mei it KOFF-objekttriemformat; sûnt COFFcannot fertsjintwurdiget mear as 65535 relocations yn in ienige searje. Tink derom dat dit net slagget om te wurkjen mei objekttriemformaten dy't gjin willekeurige dielen stypje. De linker sil gjin yndividuere yndeksjes splitse foar feroarderingen, dus as in inkele ynfier ûnderdiel befettet mear as ferheging fan tellen ien útgongsdiel sil befetsje dat in protte relaasjes binne. In standert wearde foar 32768.

- staten

Compute and display statistics about the operation of the linker, such as execution time and memory usage.

--tradio-formaat

Foar guon doelen wurdt de útfier fan ld op guon manieren oars ferskille út 'e útfier fan in wat besteande linker. Dizze skeakel freget ld om it tradisjonele formaat yn plak te brûken.

Bygelyks op SunOS, ld kombinearret dûbele yngongen yn it symboalstringtafel. Dit kin de grutte fan in útfier bestân beheine mei folsleine debugging-ynformaasje troch mear as 30 prosint. Spitigernôch kin it programma SunOS "dbx" it resultaat net lêze ("gdb" hat gjin problemen). De --tradio-formaat- skeakel fertelt ld om gjin dûbele yngongen te kombinearjen.

- seksje-start sekere = org

Sykje in seksje yn it útfier bestân op it absolute adres dat oandiet jilde. Jo kinne dizze opsje sa folle foarkommende brûke as nedich om meardere sekonden te finen yn 'e kommandorigel. org moat in ien hexadezimalale integer wêze; Foar kompatibiliteit mei oare linkers kinne jo de liedende 0x besjogge dy't normaal ferbûn is mei hexadezimalwearden. Taljochting: der moat gjin wite romte wêze tusken sifersnamme , it lykweardich teken (`` = ''), en org .

-Tbss org

-Tdata org

-Ttext org

Brûk org as it startadres foar --- respektivelik - de "bss", "data", of it segmint "tekst" fan it útfier bestân. org moat in ien hexadezimalale integer wêze; Foar kompatibiliteit mei oare linkers kinne jo de liedende 0x besjogge dy't normaal ferbûn is mei hexadezimalwearden.

--dll-verbose

--verbose

Lit it ferzjenûmer foar ld sjen en listje de linker-emulaasjes dy't stipe wurde. Lit sjen wat input-triemmen kin en kin net iepene wurde. Lit it linker skript sjen troch de linker.

--version-script = ferzje-scriptfile

Jou de namme fan in ferzje skript oan de linker. Dit wurdt typysk brûkt by it meitsjen fan dielde biblioteken om ekstra ynformaasje oer de ferzje fan hérarchy te meitsjen foar de bibleteek dy't makke is. Dizze opsje is allinich sinfol op ELF-platfoarms dy't dielde biblioteken stypje.

--warn-common

Warskôgje as in mienskiplik symboal kombinearre is mei in oare mienskiplike symboal of mei in symboalysjes. Unix linkers jouwe dit wat sloppich praktyk, mar linkers op inkele oare bestjoeringssysteem net. Dizze opsje jout jo potensjele problemen foar it kombinearjen fan globale symboalen. Spitigernôch brûke guon C-biblioteken dizze praktyk, dus jo kinne gewoan warskôgings krije oer symboalen yn 'e biblioteken as yn jo programma's.

Der binne trije soarten globale symboalen, hjirrebylden fan C illustrearre:

int i = 1;

In definysje, dy't yn 'e initialisearre gegevensdiel fan' e útfier bestân giet.

extern int i;

In net-definiearre referinsje, wêrtroch de romte net spesifisearret. Der moat dan in definysje of in mienskiplik symboal wêze foar de fariant earne.

int i;

In mienskiplik symboal. As der allinich (ien of mear) mienskiplike symboalen foar in fariabele binne, giet it yn it net-ynisjalisearre data-gebiet fan 'e útfier bestân. De linker fusearret meardere mienskiplike symboalen foar deselde fariabele yn ien symboal. As se fan ferskillende dimensjes binne, nimt de grutste grutte. De linker draait in mienskiplik symboal yn in deklaraasje, as der in definysje fan deselde fariabele is.

De -warn-common option kin fjouwer soarten warskôgings meitsje. Elk warskôging bestiet út in linenpaad: de earste beskriuwt it symboal krekt oan 'e oarder, en de twadde beskriuwt it foarige symboal mei deselde namme. Ien of beide fan 'e twa symboalen sil in mienskiplik symboal wêze.

1.

It feroarjen fan in mienskiplik symboal yn in referinsje, om't der al in definysje is foar it symboal.

(
): warskôge: common of ` 'feroare fan definysje (
): warskôging: definiearre hjir

2.

It feroarjen fan in mienskiplik symboal yn in referinsje, om't in lettere definysje foar it symboal opkomt. Dit is itselde as it foarige gefal, útsein dat de symboalen op in oare folchoarder komme.

(
): warning: definition of ` 'overriding common (
): warskôging:

3.

It gearfoegjen fan in mienskiplik symboal mei in foarige selde mienskiplike symboal.

(
): warskôge: multiple common of ` ' (
): warskôging: foarige mienskip is hjir

4.

It gearfoegjen fan in mienskiplik symboal mei in foarige gruttere mienskiplike symboal

(
): warskôge: common of ` 'feroare fan gruttere mienskip (
): warskôging:

5.

It gearfoegen fan in mienskiplik symboal mei in foarige lytsere mienskiplike symboal Dit is itselde as it foarige gefal, útsein dat de symboalen op in oare folchoarder komme.

(
): warskôge: common of ` 'overriding kleiner gewoan (
): warskôging: lytser gewoan is hjir

--warn-constructors

Warskôgje as der in globale konstruktor brûkt wurdt. Dit is allinich brûkber foar in pear objekttriemformaten. Foar formaten lykas COFF of ELF kin de linker it gebrûk fan globale konstruktueren net fêststelle.

--warn-multiple-gp

Warskôgje as meardere globale pointerwearden yn 'e útfier bestân binne nedich. Dit is allinich betsjuttend foar beskate prosessor, lykas it Alpha. Foaral guon prosesjes sette grutte-wearde-konstanten yn in spesjale seksje. In spesjale register (de globale pointer) wiist yn 'e midden fan dizze paragraaf, sadat konstanten effisjearre wurde kinne fia in basisregister relatyf adressearjende modus. Sûnt de offset yn 'e basisregister relatyf modus is fêst en relatyf lyts (bgl. 16 bits), beheine dit maksimale grutte fan' e konstante pomp. Sa binne yn grutte programma's faak nedich om meardere globale pointerwearden te brûken om alle mooglike konstanten op te rjochtsjen. Dizze opsje laket in warskôging dy't útjûn wurdt as jo dit gefal opnimme.

--warn-ien

Allinnich warskôge ien kear foar elk ûnfoldige symboal, yn stee fan ien kear per modul dy't dêrby ferwiist.

--warn-section-align

Warskôgje as it adres fan in útfieringseksje feroare is fanwege ôfstimming. Typysk wurdt de justysje ynsteld troch in ynfierdiel. It adres sil allinich feroare wurde as it net spesifisearre wurdt; Dit is, as it kommando "SECTIONS" gjin startadres foar de seksje bepale.

--whole-argyf

Foar elke argyf neamd op de kommando-rigel nei de --wole-argyf- opsje, befetsje elke objektfile yn it argyf yn 'e keppeling, mar as jo it argyf sykje foar de ferplichte triemtafels. Dit wurdt normaal brûkt om in argyffile te ferpleatsen yn in dielde bibleteek, wêrtroch't elke objekt opnommen wurde yn 'e resultant dielde bibleteek. Dizze opsje kin meer dan ien kear brûkt wurde.

Twa notysjes by it brûken fan dizze opsje út gcc: First, gcc wit net oer dizze opsje, dus moatte jo brûke -Wl, -wole-argyf . Tink derom: ferjit jo net -Wl, -no-hiele-argyf nei jo argyflist, om't gcc in eigen list fan argyfmen oan jo link taheaket en jo miskien net wolle dat dizze flagge ek effekt hat.

- wikselsymbolyk

Brûk in wrapperfunksje foar symboal . Alle net-definiearre referinsjes op symboal wurde bepaald om "__ wrap_symbol". Alle net-definiearre referinsjes op "__real_symbol" wurde opnij selektearre.

Dit kin brûkt wurde om in wrapper te jaan foar in systeemfunksje. De wrapperfunksje moat "__wrap_symbol" neamd wurde. As jo ​​de systeemfunksje neame wolle, dan moat it "__ real_symbol" neame.

Hjir is in triviale foarbyld:

void * __wrap_malloc (int c) {printf ("malloc neamd mei% ld \ n", c); werom __real_malloc (c); }

As jo ​​in oare koade ferpleatse mei dizze bestân brûke - wrap malloc , dan sil alle oprop 'malloc' de funksje "__wrap_malloc" neame. De oprop om "__real_malloc" yn "__wrap_malloc" neamt de echte "malloc" funksje.

Jo kinne ek in funksje "__real_malloc" biede, sadat keppelings sûnder de - wrap- opsje slagje. As jo ​​dit dogge, moatte jo de definysje fan "__ real_malloc" net selektearje yn deselde triem as "__wrap_malloc"; As jo ​​dogge, kin de assembler de oprop beheare foardat de linker in kâns hat om it oan te meitsjen foar "malloc".

- nije-nij-dagels

-disabile-new-dags

Dizze linker kin de nije dynamyske tags yn ELF oanmeitsje. Mar de âldere ELF-systeem kinne har net begripe. As jo --enable-new-dagserken oantsjutte , wurde de dynamyske tags as jo nedich binne makke. As jo ​​spesifike -disable-new-dagserje , wurde gjin nije dynamyske tags makke. Standert binne de nije dynamyske tags net makke. Tink derom dat dizze opsjes allinich foarELF-systemen beskikber binne.

De linker fan de i386 PE stipet de -hale opsje, wêrtroch de útfier in dynamysk keppele bibleteek (DLL) is ynstee fan in normale útfierber. Jo moatte de útfier "*. Dll" neame as jo dizze opsje brûke. Dêrnjonken stipet de linker folslein de standert "* .def" bestannen, dy't op it linker kommando-line as in objektfile oanjûn wurde kin (yn feite moat it argiven wêze, it eksportearjen symboalen út, om te soargjen dat se yn ferbân krije, krekt as in normale objektfile).

Neist de opsjes allinich foar alle doelen, stipe de i386 PE-linker ekstra kommando-rigel-opsjes dy't spesifyk binne foar it i386 PE-doel. Opsjes dy wearden nimme kinne wurde fan har wearden ôflaat troch sawol in romte of in lykweardich teken.

--add-stdcall-alias

As jo ​​opjilde, wurde symboalen mei in stdcall-suffix (@nn) as-eksportearre en ek mei de sifix útdrukt.

--base-bestân bestân

Brûkt de triem as de namme fan in bestân wêryn de basisadressen fan alle relaasjes nedich binne foar it generearjen fan DLLs mei dlltool .

--dll

Meitsje in DLL ynstee fan in reguliere útfierber. Jo kinne ek -ferskate brûke of in "LIBRARY" yn in beskreaune ".def" bestân.

--enable-stdcall-fixup

-disable-stdcall-fixup

As de keppeling in symboal fynt dat it net beheind fynt, sil it probearje om 'fuzzy linking' te dwaan troch te sykjen nei in oar definiearre symboal dat allinich yn it formaat fan 'e symboalnamme ferskilt (cdecl vs stdcall) en sil it symboal oplosse nei de wedstriid. Bygelyks kin it net-definiearre symboal "_foo" keppele wurde mei de funksje "_foo @ 12", of it ûnfoldige symboal "_bar @ 16" kin ferbûn wêze mei de funksje "_bar". As de linker dit docht, printsje jo in warskôging, om't it normaal miskien net keppele wurde moast, mar soms ymportearje biblioteken dy't ûntstiene út tredde partijen dlls kinne dizze funksje nedich wêze. As jo --enable-stdcall-fixup oantsjutte , wurdt dizze funksje folslein ynskeakele en warskôgings net printe. As jo ​​de --disable-stdcall-fixup opjaan , dizze funksje is útskeakele en soksoarte fermogens wurde beskôge as fouten.

- eksport-alle-symboalen

As jo ​​opjûn binne, wurde alle globale symboalen yn 'e objekten brûkt om in DLL te bouwen wurde eksportearre troch de DLL. Taljochting: dit is de standert as der oars gjin eksportearre symboalen binne. As symboalen eksplisyt eksportearre binne fia DEF-bestannen of miskien eksportearre fia funksjes-attributen, is it standert om elke oars net te eksportearjen, as dizze opsje net jûn wurdt. Tink derom dat de symboalen "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12", en "impure_ptr" wurde net automatysk eksportearre. Ek symboalen dy't ymporteare binne fan oare DLLs, wurde net ymportearre, en sil symboalen net oantsjutte foar de yndieling fan 'e DLL lykas dy begjinne mei "_head_" of einigjen mei "_iname". Fierder wurde gjin symboalen fan "libgcc", "libstd ++", "libmingw32" of "crtX.o" eksportearre. Symboalen dy't nammen begjinne mei "__rtti_" of "__builtin_" wurde net eksportearre, om te helpen mei C ++ DLLs. Uteinlik is der in útwreide list fan cygwin-privee symboalen dy't net eksportearre wurde (fansels, dit jildt by it bouwen fan DLLs foar cygwin-doelen).

Dizze cygwin-útsûnderings binne: "_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 "en" omjouwings ".

- eksklusyf symboalen- symboal , symboal , ...

Beskriuwt in list mei symboalen dy't net automatysk eksportearre wurde moatte. De symbo-nammen kinne ôflaat wurde troch komma's of kolon.

- eksimje-libs lib , lib , ...

Beskriuwt in list mei argyfbiblioteken út dêr't symboalen net automatysk eksportearre wurde. De biblioteeknammen kinne ôflaat wurde troch komma's of kolo's. Spesifisearret "--Exclude-libs ALL" tekenrige symboalen yn alle argyfbiblioteken út automatyske eksport. Symbels dy't eksplisyt yn in .def bestân binne neamd binne noch eksportearre, sûnder dizze opsje.

--file-alignment

Jou de triemangeling oan. Seksjes yn 'e triem sille altyd begjinne by triemferbrekken dy't in folslein fan dit getal binne. Dit standert op 512.

--heap reservearje

--heap reservearje , fergeje

Jou it oantal oantinken oan foar reservearje (en as wierskynlik ferwurkje) as gebrûk fan dit programma. De standert is 1Mb reservearre, 4K begrippe.

-image-basiswearde

Brûk wearde as it adresbasis fan jo programma of dll. Dit is de leechste ûnthâld-lokaasje dat brûkt wurdt as jo programma of dll laden is. Om de needsaak om te ferleegjen en te ferbetterjen fan dyn dlls, moatte elk in unyk basisadres hawwe en gjin oare dll's oerlappe. De standert is 0x400000 foar útfierbaren, en 0x10000000 foar dlls.

--kill-at

As it jûn wurdt, sil de stdcall-suffixes (@ nn ) fan symboalen ôfbrekke foardat se eksportearre wurde.

- grutter-image-ferzje wearde

Sets it grutte tal fan 'e imageferzje' '. De standerts oan 1.

--major-os-ferzje wearde

Set it grut tal fan 'e ferzje' '. Standert is op 4.

--major-subsystem-ferzje wearde

Set it wichtichste nûmer fan 'e subsysteemferzje. Standert is op 4.

- minor-image-ferzje wearde

Set it njoggentich nûmer fan 'e imageferzje' '. Defaults nei 0.

- minor-os-ferzje wearde

Sets it minder tal fan 'e ferzje' '. Defaults nei 0.

-minor-subsysteem-ferzje wearde

Set it njoggen tal fan 'e subsystem ferzje' '. Defaults nei 0.

--útput-def triem

De linker sil de triemtriem meitsje dy't in DEF-bestân befetsje dy't oerienkomt mei de DLL de linker generearret. Dit DEF-bestân (dat moat "* .def" neamd wurde) kin brûkt wurde om in ymportbibliotheek mei "dlltool" te meitsjen of kin brûkt wurde as referinsje op automatyske of implicitly eksportearre symboalen.

--out-implib triem

De keppeling sil de triemtriem meitsje dy't in ymportbelied befetsje dy't oerienkomt mei de DLL de linker generearret. Dit ymport lib (dat moat wurde neamd "* .dll.a" of "* .a" kin brûkt wurde om kliïnten tsjin de generearre DLL te keppeljen; dit gedrach makket it mooglik om in apart "dlltool" -ynfierbiblioteekstap te skipen.

- betelje-auto-image-base

Automatysk kieze de ôfbylding foar DLLs, útsein ien wurdt oanjûn mei it argumint "--image-base". Troch gebrûk fan in hân te meitsjen fan 'e dllname om unike byldbyldings foar elke DLL te meitsjen, yn-ûnthâld-kollisions en relaasjes dy't de útfiering fan programma ferfiere kinne wurde ferwidere.

-disabele-auto-image-basis

Net automatysk generearje in unike imagebasis. As der gjin brûker-oantsjutte ôfbyldingsbasis ("-image-base") brûke, brûk dan de standert platfoarm.

- dll-sykjen-prefix- tekenrige

As jo ​​dynamysk ferbine oan in dll sûnder in ymportbibleteek, sykje jo " .dll" yn foarkar foar "lib .dll". Dit gedrach lit maklik ûnderskied meitsje tusken DLLs dy't makke binne foar de ferskate 'subplatforms': native, cygwin, uwin, pw, ensaf. Bygelyks, cygwin DLLs typysk brûke "- dll-search-prefix = cyg".

--enabelen-auto-ymport

Ferplichte keppeling fan "_symbol" nei "__imp__symbol" foar DATA ymportearjen fan DLLs, en meitsje de nedige toanensymbolen by it bouwen fan de ymportbiblioteken mei dy DATAexports. Dit algemien sil 'gewoan wurkje' --- mar somtiden kinne jo dit berjocht sjen:

"variable" 'kin net automatysk ymportearre wurde. Lês de dokumintaasje foar ld's "-enable-auto-import" foar details. "

Dit berjocht fynt as guon (sub) ekspresje tagong jout oan in adres dat úteinlik tawiisd wurdt troch de summa fan twa konstanten (Win32 ymporttabellen allinne ien). Inisjalen wêr't dit foarkomt, kinne tagong tagong krije ta lid fan fjilden fan struktuele fariabelen dy't ymporteare binne fan in DLL, en ek in konstante yndeks yn in arrayfariabele ymporteare út in DLL. Elke multiword-fariabele (arrays, struksjes, lang lang, ensfh.) Kinne dizze flaterstân úthâlde. Hjirtroch, sûnder dat it krekte datatype fan 'e mislearre eksportearre fariabele is, sil it altyd it fêststelle, de warskôging útgean, en útgean.

Der binne ferskate manieren om dit swierrig te bewegen, ûnôfhinklik fan it gegevenstype fan de eksportearre fariabele:

Ien manier is gebrûk fan --enable-runtime-pseudo-reloc switch. Dit lit de taak om ferwizings yn jo client-koade oan te rjochtsjen foar runtime-omjouwing, dus dizze metoade wurket allinich wannear't runtime-útsûndering dizze funksje stipet.

In twadde oplossing is om ien fan 'e "konstanten" te twingen om in fariabele --- dat is, ûnbekend en unoptimisabel by kompilearjen. Foar rigels binne der twa mooglikheden: a) meitsje de indexer (it adres fan 'e array) in fariabele, of b) meitsje de' konstante 'yndeks in fariabele. Dus:

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

of

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

Foar struktueren (en de measte oare typewurden foar meardere data) is de ienige opsje om de struktuer sels te meitsjen (of de lange lang, of de ...) fariabele:

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

of

ekstra lange lange eksterne; extern_ll -> {volatile lang lang * local_ll = & extern_ll; * local_ll}

In tredde metoade om te handen mei dizze swierrigens is om 'auto-ymport' te ferlitten foar it skruten symboal en markearje it mei "__declspec (dllimport)". Yn 'e praktyk freget de kompilaasje-tiid #defines ek te brûken as jo in DLL oanmeitsje, gebrûk fan client-koade dy' t ferbine mei de DLL, of gewoan bouwe / keppelje nei in statyske bibleteek. By it meitsjen fan de kar te meitsjen tusken de ferskate metoaden foar it oplossen fan 'direkte adres mei konstante offset' probleem, moatte jo de karakteristike real-wrâld brûke:

Oarspronklik:

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

Solúsje 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Dizze oplossing is win32 en cygwin; net "optimisearje" * / flaterich int * parr = arr; printf ("% d \ n", parr [1]); }

Solution 2:

--foo.h / * Opmerking: Auto-eksport wurdt oannommen (gjin __declspec (dllexport)) * / #if (definiearre (_WIN32) || definiearre (__ CYGWIN__)) && \! (define (FOO_BUILD_DLL) || definiearre (FOO_STATIC )) #define FOO_IMPORT __declspec (dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {printf ("% d \ n", arr [1]); }

In fjirde manier om dit probleem te foarkommen is om jo bibleteek opnij te meitsjen om in funksjoneel ynterface te brûken as in data-ynterface foar de feroarjende fariabelen (bgl. Set_foo () en get_foo () accessor-funksjes).

-disabele-auto-ymport

Sykje net besykje jo sophistyske keppeling te meitsjen fan "_symbol" nei "__imp__symbol" foar DATA-ymporten fan DLL's.

-enable-runtime-pseudo-reloc

As jo ​​koade eksemplaren befettet yn 'e -enable-auto-import-seksje, dus DATAimports fan DLL mei net-nul-offset, skeakelje dizze skeakel in fektor "runtime pseudo relocations" dy't brûkt wurde troch runtime omjouwings om ferwizings oan te passen oan sokke gegevens yn jo clientkoade.

-disable-runtime-pseudo-reloc

Skeakelje net pseudo-relocations foar non-zero offset DATA-ymporten fan DLLs. Dit is de standert.

--enearje-ekstra-debugel

Lit ekstra debug-info sjen litte relatearre mei auto-ymport symboal thunking.

- sirkens-alinea

Stelt de seksje oan. Spesjale yn 't ûnthâld sil altyd begjinne oan adressen dy't in meardere fan dit getal binne. Standert stiet op 0x1000.

- stappe reservearje

- stappe reservearje , fergees

Jou it oantal oantinken oan om te reservearjen (en as wierskynlik ferwurkje) as stap foar dit programma te brûken. De standert is 2Mb reservearre, 4K begrippe.

--subsystem dy't

--subsystem dat : grutte

--subsystem dat : grutte . min

Beskriuwt it subsysteem wêrûnder jo programma útfiere sil. De juridyske wearden dêr't "natuerlik", "finsters", "konsole" en "posiks" binne. Jo kinne opsje ek de subsystem ferzje ynstelle.

Wichtich: Brûk de manbehearder ( % man ) om te sjen hoe't in kommando brûkt wurdt op jo bepaalde komputer.