Comando Linux / Unix: Id

NOM

ld - Utilitzant LD , el vinculador GNU

SINOPSI

ld [ options ] objfile ...

DESCRIPCIÓ

ld combina diversos fitxers d'objectes i fitxers , trasllada les seves dades i lliga les referències de símbols. En general, l'últim pas en la compilació d'un programa és executar ld .

ld accepta fitxers de Llenguatge d' ordres del vinculador escrits en un superset de la sintaxi del llenguatge d'ordres de l'editor d'enllaç de AT & T, per proporcionar un control explícit i total del procés d'enllaç.

Aquesta pàgina d'home no descriu el llenguatge d'ordres; vegeu l'entrada ld a "info" o el manual ld: el vinculador GNU , per obtenir informació completa sobre el llenguatge de comandaments i sobre altres aspectes del vinculant de GNU.

Aquesta versió de ld utilitza les biblioteques BFD de propòsit general per operar en fitxers d'objectes. Això permet a ld llegir, combinar i escriure fitxers d'objectes en molts formats diferents (per exemple, COFF o "a.out"). Es poden enllaçar diferents formats per produir qualsevol tipus d'arxiu d'objecte disponible.

A part de la seva flexibilitat, l'enllaçador de GNU és més útil que altres enllaços en proporcionar informació de diagnòstic. Molts enllaçadors abandonen l'execució immediatament després de trobar un error; sempre que sigui possible, ld continua executant, cosa que us permet identificar altres errors (o, en alguns casos, obtenir un fitxer de sortida malgrat l'error).

El connector GNU ld està pensat per cobrir una àmplia gamma de situacions, i per ser el més compatible possible amb altres enllaços. Com a resultat, teniu moltes opcions per controlar el seu comportament.

OPCIONS

El enllaçador admet una infinitat d' opcions de línia de comandaments , però en la pràctica real, pocs d'ells s'utilitzen en qualsevol context particular. Per exemple, un ús freqüent de ld és vincular fitxers d'objectes Unix estàndard en un sistema Unix estàndard i compatible. En aquest sistema, vincular un fitxer "hello.o":

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

Això indica a ld que produeixi un fitxer anomenat sortida com a resultat de l'enllaç del fitxer "/lib/crt0.o" amb "hello.o" i la biblioteca "libc.a", que provindrà dels directoris de cerca estàndard. (Vegeu la discussió sobre l'opció- l a continuació).

Algunes de les opcions de la línia d'ordres a ld es poden especificar en qualsevol punt de la línia d'ordres. Tanmateix, les opcions que fan referència a fitxers, com -l o -T , fan que el fitxer es llegeixi en el punt en què apareix l'opció a la línia d'ordres, en relació amb els fitxers d'objectes i altres opcions de fitxer. La repetició d'opcions que no siguin de fitxers amb un argument diferent no tindran cap efecte addicional, o anul·laran les aparicions anteriors (aquelles més a l'esquerra de la línia d'ordres) d'aquesta opció. Les opcions que es puguin especificar de forma significativa més d'una vegada s'indiquen a les descripcions següents.

Els arguments no opcionals són fitxers d'objectes o fitxers que s'han de connectar. Poden seguir-se, precedir-se o barrejar-se amb opcions de la línia d'ordres, excepte que no es pot col · locar un argument d'arxiu d'objecte entre una opció i el seu argument.

En general, el vinculador s'invoca amb almenys un fitxer d'objecte, però podeu especificar altres formes d'arxius d'entrada binaris utilitzant -l , -R , i el llenguatge d'ordres del script. Si no s'especifiquen fitxers d'entrada binària, l'enllaçador no produeix cap sortida i emet el missatge Sense fitxers d'entrada .

Si el vinculador no pot reconèixer el format d'un fitxer d'objectes, suposarà que és un script d'enllaçador. Un script especificat d'aquesta manera augmenta la seqüència de vincles principal utilitzada per al vincle (ja sigui l'script per enllaçar per defecte o el especificat usant -T ). Aquesta característica permet que el vinculador es vinculi amb un fitxer que sembla ser un objecte o un arxiu, però en realitat només defineix alguns valors de símbols o utilitza "INPUT" o "GROUP" per carregar altres objectes. Tingueu en compte que especificar un script d'aquesta manera només augmenta l'script principal del vinculador; utilitzeu l'opció -T per reemplaçar totalment l'script d'enllaç per defecte.

Per a les opcions els noms són una sola lletra, els arguments d'opcions han de seguir la lletra de l'opció sense intervenir en espais en blanc, o ser donats com a arguments separats immediatament després de l'opció que els requereixi.

Per a les opcions els noms dels quals són lletres múltiples, ja sigui un tauler o dos pot precedir el nom de l'opció; per exemple, -trace-symbol i --trace-symbol són equivalents. Nota: hi ha una excepció a aquesta regla. Les opcions de lletra múltiple que comencen amb una casella inferior 'o' només poden ser precedides per dos guions. Això és per reduir la confusió amb l'opció -o . Per exemple, -màgic estableix el nom del fitxer de sortida a màgia, mentre que -omagic estableix l'indicador NMAGIC a la sortida.

Els arguments a les opcions de lletra múltiple han d'estar separats del nom de l'opció amb un signe igual, o ser donats com a arguments separats immediatament després de l'opció que els requereixi. Per exemple, --trace-symbol foo i --trace-symbol = foo són equivalents. S'admeten les abreviatures úniques dels noms de les opcions de lletres múltiples.

Nota: si el connector està sent invocat de manera indirecta, a través d'un controlador del compilador (p. Ex. Gcc ), totes les opcions de la línia d'ordres del vinculador han de ser prefixades per -Wl (o el que sigui apropiat per al controlador del compilador en particular) d'aquesta manera:

gcc -Wl, - start group foo.o bar.o -Wl, - endgroup

Això és important, perquè en cas contrari, el programa del controlador del compilador pot deixar anar silenciosament les opcions del vinculador, resultant en un enllaç erroni.

Aquí teniu una taula dels switches genèrics de la línia de comandaments acceptats pel connector GNU:

-una paraula clau

Aquesta opció és compatible amb la compatibilitat HP / UX. L'argument de paraules clau ha de ser un dels arxius de cadenes , compartits o predeterminats . -archive és funcionalment equivalent a -Bstatic , i les altres dues paraules clau són funcionalment equivalents a -Bynamic . Aquesta opció es pot utilitzar en diverses ocasions.

- Una arquitectura

--architecture = architecture

En l'actual versió de ld , aquesta opció només és útil per a la família d'arquitectures Intel 960. En aquesta configuració ld , l'argument d' arquitectura identifica l'arquitectura particular de la família 960, permetent algunes salvaguardes i modificant la ruta de cerca de la biblioteca d'arxius.

Els llançaments futurs de ld poden suportar funcions similars per a altres famílies d'arquitectura.

-b format d'entrada

--format = input-format

ld pot estar configurat per suportar més d'un tipus d'arxiu d'objectes. Si el vostre ld està configurat d'aquesta manera, podeu utilitzar l'opció -b per especificar el format binari dels fitxers d'objectes d'entrada que segueixen aquesta opció a la línia d'ordres. Fins i tot quan ld està configurat per suportar formats d'objectes alternatius, normalment no cal especificar-ho, ja que ld s'hauria de configurar per esperar com a format d'entrada predeterminat el format més habitual en cada màquina. El format d'entrada és una cadena de text, el nom d'un format concret suportat per les biblioteques BFD. (Podeu llistar els formats binaris disponibles amb objdump -i ).

Podeu utilitzar aquesta opció si esteu enllaçant fitxers amb un format binari inusual. També podeu utilitzar -b per canviar els formats de forma explícita (en enllaçar fitxers d'objectes de diferents formats), incloent -b format d'entrada abans de cada grup d'arxius d'objectes en un format concret.

El format per defecte es pren de la variable d'entorn "GNUTARGET".

També podeu definir el format d'entrada d'un script, utilitzant l'ordre "TARGET";

-c MRI-fitxer de comandaments

--mri-script = MRI-commandfile

Per compatibilitat amb enllaçadors produïts per MRI, ld accepta fitxers script escrits en un llenguatge de comandaments alternatiu i restringit, descrit a la secció de fitxers de scripts compatible amb MRI de la documentació GNU ld. Introduïu fitxers de seqüència de MRI amb l'opció -c ; utilitzeu l'opció -T per executar scripts d'enllaços escrits en l'idioma de seqüència de comandaments de propòsit general. Si MRI-cmdfile no existeix, ld la busca en els directoris especificats per qualsevol opció -L .

-d

-dc

-dp

Aquestes tres opcions són equivalents; Es permeten múltiples formularis per a la compatibilitat amb altres enllaços. Assignen espai als símbols comuns, fins i tot si s'especifica un fitxer de sortida relocable (amb -r ). La seqüència de comandaments "FORCE_COMMON_ALLOCATION" té el mateix efecte.

-e entrada

--entrada = entrada

Utilitzeu l' entrada com a símbol explícit per iniciar la execució del vostre programa, en comptes del punt d'entrada predeterminat. Si no hi ha un símbol anomenat entrada , el vinculador intentarà analitzar l' entrada com un número i utilitzar-lo com a adreça d'entrada (el número s'interpretarà a la base 10, podeu utilitzar un 0x líder per a la base 16 o un 0 principal per a la base 8).

-E

--export-dynamic

Quan creeu un executable enllaçat dinàmicament, afegiu tots els símbols a la taula de símbols dinàmics. La taula de símbols dinàmics és el conjunt de símbols que són visibles des d'objectes dinàmics en temps d'execució.

Si no utilitzeu aquesta opció, normalment la taula de símbols dinàmics contindrà només aquells símbols referenciats per algun objecte dinàmic esmentat a l'enllaç.

Si utilitzeu "dlopen" per carregar un objecte dinàmic que necessita referir-se als símbols definits pel programa, en lloc d'un altre objecte dinàmic, probablement haurà d'utilitzar aquesta opció quan vinculi el propi programa.

També podeu utilitzar l'script de versió per controlar quins símbols s'han d'afegir a la taula de símbols dinàmics si el format de sortida ho admet. Vegeu la descripció de --version-script a @ ref {VERSION}.

-EB

Enllaça els objectes big-endian. Això afecta el format de sortida predeterminat.

-EL

Vincular els objectes de little-endian. Això afecta el format de sortida predeterminat.

-f

- nom nom inicial

Quan creeu un objecte compartit ELF, configureu el camp DT_AUXILIARY intern al nom especificat. Això indica al vinculador dinàmic que la taula de símbols de l'objecte compartit s'ha d'utilitzar com a filtre auxiliar a la taula de símbols del nom de l'objecte compartit.

Si més tard vinculi un programa contra aquest objecte de filtre, llavors, quan executeu el programa, l'enllaçador dinàmic visualitzarà el camp DT_AUXILIARY. Si el vinculador dinàmic resol qualsevol símbol de l'objecte del filtre, primer comprovarà si hi ha una definició en el nom de l' objecte compartit. Si n'hi ha, s'utilitzarà en comptes de la definició de l'objecte de filtre. El nom de l' objecte compartit no necessita existir. D'aquesta manera, es pot utilitzar el nom de l' objecte compartit per proporcionar una implementació alternativa de certes funcions, potser per a la depuració o per a un rendiment específic de la màquina.

Aquesta opció es pot especificar més d'una vegada. Les entrades DT_AUXILIARY es crearan en l'ordre en què apareixen a la línia d'ordres.

-F nom

- nom del filtre

Quan creeu un objecte compartit ELF, estableixi el camp DT_FILTER intern al nom especificat. Això indica al vinculador dinàmic que la taula de símbols de l'objecte compartit que s'està creant hauria d'utilitzar-se com a filtre a la taula de símbols del nom de l'objecte compartit.

Si més tard vinculi un programa contra aquest objecte de filtre, llavors, quan executeu el programa, l'enllaçador dinàmic visualitzarà el camp DT_FILTER. L'enllaçador dinàmic resol els símbols d'acord amb la taula de símbols de l'objecte del filtre com és habitual, però en realitat enllaçarà amb les definicions que es troben al nom de l' objecte compartit. D'aquesta manera, l'objecte del filtre es pot utilitzar per seleccionar un subconjunt dels símbols proporcionats pel nom de l'objecte.

Alguns enllaçadors més antics van utilitzar l'opció -F a través d'una cadena d'eines de compilació per especificar el format d'un fitxer d'objectes per als fitxers d'objectes d'entrada i sortida. El vinculador GNU utilitza altres mecanismes per a aquest propòsit: les opcions -b , --format , --oformat , l'ordre "TARGET" en les seqüències d'ordres del vinculador i la variable d'entorn "GNUTARGET". El vinculador GNU ignorarà l'opció -F quan no creeu un objecte compartit ELF.

-el nom de fi

Quan creeu un objecte executable o compartit ELF, truqueu a NAME quan es descarregui l'objecte executable o compartit, establint DT_FINI a l'adreça de la funció. Per defecte, el vinculador utilitza "_fini" com a funció a trucar.

-g

Ignorat. Proporcionat per compatibilitat amb altres eines.

-G valor

--gpsize = valor

Establiu la mida màxima dels objectes que cal optimitzar usant el registre GP a mida . Això només és significatiu per a formats d'arxiu d'objectes com MIPS ECOFF que suporta posar objectes grans i petits a diferents seccions. Això s'ignora per a altres formats de fitxer d'objectes.

-h nom

-soname = nom

Quan creeu un objecte compartit ELF, estableixi el camp DT_SONAME intern al nom especificat. Quan un fitxer executable està enllaçat amb un objecte compartit que té un camp DT_SONAME, aleshores quan s'executa l'executable, l'enllaçador dinàmic intentarà carregar l'objecte compartit especificat pel camp DT_SONAME en comptes de fer servir el nom del fitxer donat al vinculador.

-i

Realitzeu un enllaç incremental (igual que l'opció -r ).

-inici de nom

Quan creeu un objecte executable o compartit ELF, truqueu a NAME quan es carregui l'objecte executable o compartit, establint DT_INIT a l'adreça de la funció. Per defecte, el vinculador utilitza "_init" com a funció a trucar.

-l arxiu

--library = arxiu

Afegiu arxiu d' arxiu a la llista de fitxers per enllaçar. Aquesta opció es pot utilitzar en diverses ocasions. Ld cercarà la seva llista de rutes per a les aparicions de "libarchive.a" per cada arxiu especificat.

En sistemes que admeten biblioteques compartides, ld també pot cercar biblioteques amb extensions diferents de ".a". Concretament, en els sistemes ELF i SunOS, buscarà un directori per a una biblioteca amb una extensió de ".so" abans de buscar-ne una amb una extensió de ".a". Per convenció, l'extensió ".so" indica una biblioteca compartida.

El vinculador buscarà un arxiu només una vegada, a la ubicació on s'especifica a la línia d'ordres. Si l'arxiu defineix un símbol que no s'ha definit en un objecte que apareix abans de l'arxiu a la línia d'ordres, el vinculador inclourà els arxius apropiats de l'arxiu. Tanmateix, un símbol indefinit d'un objecte que apareix més endavant a la línia d'ordres no farà que el vinculador torni a cercar l'arxiu.

Vegeu la opció - ( opció per obligar el vinculador a cercar arxius diverses vegades).

Podeu llistar el mateix arxiu diverses vegades a la línia d'ordres.

Aquest tipus de cerca d'arxius és estàndard per als enllaços Unix. Tanmateix, si esteu utilitzant ld onAIX, tingueu en compte que és diferent del comportament de l'enllaçador AIX.

-L cercadir

--library-path = searchdir

Afegiu ruta a la llista de rutes que busquen biblioteques d'arxius i scripts de control ld . Podeu utilitzar aquesta opció cada nombre de vegades. Els directoris es busquen en l'ordre en què s'especifiquen a la línia d'ordres. Els directoris especificats a la línia d'ordres es busquen abans que els directoris predeterminats. Totes les opcions de L s'apliquen a totes les opcions -l , independentment de l'ordre en què apareguin les opcions.

Si la cerca comença amb "=", el "=" serà reemplaçat pel prefix del sistema , una ruta especificada quan el vinculador estigui configurat.

El conjunt predeterminat de rutes cercades (sense especificar -L ) depèn del mode d'emulació ld que està utilitzant, i en alguns casos també de com es va configurar.

Les rutes també es poden especificar en un script d'enllaç amb l'ordre "SEARCH_DIR". Els directoris especificats d'aquesta manera es busquen en el punt en què apareix l'script d'enllaçador a la línia d'ordres.

-m emulació

Emula l'enllaçador d' emulació . Podeu llistar les emulacions disponibles amb les opcions --verbose o -V .

Si l'opció -m no s'utilitza, l'emulació es pren de la variable d'entorn "LDEMULATION", si es defineix.

En cas contrari, l'emulació predeterminada depèn de com es va configurar el vinculador.

-M

--print-map

Imprimiu un mapa d'enllaç a la sortida estàndard. Un mapa d'enllaç proporciona informació sobre l'enllaç, incloent-hi el següent:

*

On es col·loquen mapes i fitxers d'objectes a la memòria.

*

Com s'assignen els símbols comuns.

*

Tots els membres de l'arxiu inclosos a l'enllaç, amb una menció del símbol que va provocar la incorporació del membre de l'arxiu.

-n

--nmagic

Desactiveu l'alineació de pàgines de les seccions i marqueu la sortida com a "NMAGIC" si és possible.

-N

- màgic

Estableix les seccions de text i de dades per a ser llegibles i escriure. A més, no alineeu la pàgina amb el segment de dades i desactiveu la vinculació amb les biblioteques compartides. Si el format de sortida admet nombres màgics d'estil Unix, marqueu la sortida com a "OMAGIC".

--no-omagic

Aquesta opció nega la majoria dels efectes de l'opció -N . Estableix la secció de text com a només lectura, i obliga al segment de dades a estar alineat a la pàgina. Nota: aquesta opció no permet la vinculació de biblioteques compartides. Utilitzeu -Bynamic per a això.

-o sortida

--output = sortida

Utilitzeu la sortida com a nom del programa produït per ld ; si aquesta opció no s'especifica, el nom a.out s'utilitza per defecte. La comanda script "OUTPUT" també pot especificar el nom del fitxer de sortida.

-O nivell

Si el nivell és un valor numèric superior a zero ld optimitza la sortida. Això pot trigar molt més temps i, per tant, probablement només s'hauria d'activar per al binari final.

-q

--emit-relocs

Deixeu les seccions i els continguts de la reubicació en exececutables totalment enllaçats. Les eines d'anàlisi i optimització d'enllaços de correu poden necessitar aquesta informació per tal de realitzar modificacions correctes d'executables. Això es tradueix en executables més grans.

Aquesta opció només és compatible amb les plataformes ELF.

-r

--relocable

Genereu sortida relocatable --- és a dir, generi un fitxer de sortida que, al seu torn, serveixi d'entrada a ld . Això se sol anomenar enllaços parcials . Com a efecte secundari, en entorns que admeten números de màgia estàndard de Unix, aquesta opció també estableix el número màgic del fitxer de sortida a "OMAGIC". Si no s'especifica aquesta opció, es produeix un fitxer absolut. Al vincular programes C + +, aquesta opció no resoldrà referències als constructors; Per fer-ho, utilitzeu -Ur .

Quan un fitxer d'entrada no té el mateix format que el fitxer de sortida, només es permet l'enllaç parcial si aquest fitxer d'entrada no conté cap tipus de reubicació. Els diferents formats de sortida poden tenir restriccions addicionals; per exemple, alguns formats basats en "a.out" no admeten enllaços parcials amb fitxers d'entrada en altres formats.

Aquesta opció fa el mateix que -i .

-R filename

--just-symbols = nom del fitxer

Llegeix els noms de símbols i les seves adreces del nom del fitxer , però no el trasllleu ni el incloeu a la sortida. Això permet que el fitxer de sortida es faci referència simbòlicament a ubicacions absolutes de memòria definides en altres programes. Podeu utilitzar aquesta opció més d'una vegada.

Per compatibilitat amb altres enllaçadors ELF, si l'opció -R és seguida d'un nom de directori, en lloc d'un nom de fitxer, es tracta com l'opció -rpath .

-s

--queu-tot

Omet tota la informació del símbol del fitxer de sortida.

-S

--Strip-debug

Omet la informació del símbol del depurador (però no tots els símbols) del fitxer de sortida.

-t

--trace

Imprimiu els noms dels fitxers d'entrada mentre els processa.

-T fitxer de seqüència

--script = fitxer de guions

Utilitzeu el fitxer de seqüència com a script d'enllaçador. Aquest script substitueix l'script per a enllaços predeterminat de ld (en lloc d'afegir-hi), de manera que el fitxer de comandaments ha d'especificar tot el necessari per descriure el fitxer de sortida. Si el fitxer d'script no existeix en el directori actual, "ld" ho busca en els directoris especificats per qualsevol opció anterior -L . Es acumulen diverses opcions T.

-u símbol

- Undefined = símbol

S'ha d'introduir el símbol de força en el fitxer de sortida com a símbol no definit. Fer això pot, per exemple, activar l'enllaç de mòduls addicionals a les biblioteques estàndard. -u es pot repetir amb diferents arguments d'opció per introduir símbols addicionals indefinits. Aquesta opció és equivalent a la comanda del scanner de l'enllaç "EXTERN".

-Ur

Per a qualsevol altra cosa que els programes de C + +, aquesta opció és equivalent a -r : genera sortida relocable, és a dir, un fitxer de sortida que, al seu torn, pot servir d'entrada a ld . Quan vinculi programes C + +, -Ur soluciona referències als constructors, a diferència de -r . No funciona per utilitzar -Ur en fitxers que es van enllaçar amb -Ur ; una vegada que s'ha construït la taula de constructors, no es pot afegir. Utilitzeu - Només per a l'últim enllaç parcial i -r per als altres.

--unique [= SECCIÓ ]

Crea una secció de sortida independent per a cada entrada que coincideixi amb SECCIÓ , o si falta l'argument de SECCIÓ comodí opcional, per a cada apartat d'entrada orfe. Una secció orfe és una que no s'especifica específicament en un script d'enllaçador. Podeu utilitzar aquesta opció diverses vegades a la línia d'ordres; Impedeix la fusió normal de les seccions d'entrada amb el mateix nom, substituint les assignacions de seccions de sortida en un script d'enllaçador.

-v

--version

-V

Mostra el número de versió de ld . L'opció- V també enumera les emulacions compatibles.

-x

- descàrrega-tot

Suprimeix tots els símbols locals.

-X

- disciscadors-locals

Suprimeix tots els símbols locals temporals. Per a la majoria dels objectius, tots són símbols locals els noms comencen amb L.

-i símbol

--trace-symbol = símbol

Imprimiu el nom de cada fitxer enllaçat en què apareix el símbol . Aquesta opció es pot donar diverses vegades. En molts sistemes és necessari prependar un guió baix.

Aquesta opció és útil quan teniu un símbol indefinit al vostre enllaç, però no sé d'on prové la referència.

-I camí

Afegeix camí a la ruta de cerca predeterminada de la biblioteca. Aquesta opció existeix per a la compatibilitat amb Solaris.

-z paraula clau

Les paraules clau reconegudes són "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" i "nocopyreloc" ". Les altres paraules clau s'ignoren per a la compatibilitat amb Solaris. "initfirst" marca l'objecte que s'ha d'inicialitzar primer en temps d'execució abans que altres objectes. "interpose" marca l'objecte que la taula de símbols s'interposa abans que tots els símbols, però l'executable principal. "loadfltr" marca l'objecte que els seus fitxers es processen immediatament en temps d'execució. "nodefaultlib" marca l'objecte que la recerca de dependències d'aquest objecte ignorarà Totes les rutes de cerca predeterminades de la biblioteca. "nodelete" indica que l'objecte no s'ha de descarregar en temps d'execució. "nodlopen" marca l'objecte no disponible per "dlopen". "nodump" indica que l'objecte "dldump" no pot ser objecte d'eliminació. "ara" marca l'objecte amb l'enllaç de temps d'execució no perezoso. "origen" marca que l'objecte pot contenir $ ORIGIN. "defs" no permet els símbols no definits. "muldefs" permet definicions múltiples. "combreloc" combina diverses seccions de reloc i ordena-les perquè la memòria cau de cerca de símbols dinàmics sigui possible.

"nocombreloc" desactiva múltiples combinacions de reloc. "nocopyreloc" desactiva la producció de còpies relocs.

- ( arxius -)

--Instart-group archives - en grup

Els arxius han de ser una llista d' arxius . Poden ser noms de fitxer explícits, o opcions -l .

Els arxius especificats es busquen repetidament fins que no es creen referències no definides noves. Normalment, un arxiu es busca només una vegada en l'ordre que s'especifica a la línia d'ordres. Si es necessita un símbol en aquest arxiu per resoldre un símbol indefinit referit per un objecte en un arxiu que apareix més endavant a la línia d'ordres, el vinculador no podria resoldre aquesta referència. En agrupar els arxius, tots es busquen en diverses ocasions fins que es resolguin totes les referències possibles.

L'ús d'aquesta opció té un cost de rendiment important. El millor és utilitzar-ho només quan hi hagi referències circulars inevitables entre dos o més arxius.

--accept-unknown-input-arch

--no-accept-unknown-input-arch

Indica al vinculador que accepti fitxers d'entrada l'arquitectura no es pugui reconèixer. La suposició és que l'usuari sap el que està fent i deliberadament vol enllaçar en aquests fitxers d'entrada desconeguts. Aquest va ser el comportament predeterminat del vinculador, abans de l'alliberament 2.14. El comportament predeterminat de la versió 2.14 en endavant és rebutjar aquests fitxers d'entrada i, per tant, s'ha afegit l'opció --accept-unknown-input-arch per restablir el comportament anterior.

- paraula clau d' assaig

Aquesta opció s'ignora per a la compatibilitat de SunOS .

-Bynamic

-dy

-call_shared

Enllaç contra biblioteques dinàmiques. Això només és significatiu en plataformes per a les quals es permeten biblioteques compartides . Aquesta opció normalment és la predeterminada en aquestes plataformes. Les diferents variants d'aquesta opció són compatibles amb diversos sistemes. Podeu utilitzar aquesta opció diverses vegades a la línia d'ordres: afecta la cerca de la biblioteca per a -l opcions que la segueixen.

-B grup

Establiu l'indicador "DF_1_GROUP" a l'entrada "DT_FLAGS_1" a la secció dinàmica. Això fa que l'enllaçador en temps d'execució gestioni les cerques d'aquest objecte i les seves dependències es realitzin només dins del grup. --no-undefined està implicat. Aquesta opció només té sentit en les plataformes ELF que admeten les biblioteques compartides .

-Bàsic

-dn

-no s'ha compartit

-estàtic

No es vinculi amb les biblioteques compartides. Això només és significatiu en plataformes per a les quals es permeten biblioteques compartides. Les diferents variants d'aquesta opció són compatibles amb diversos sistemes. Podeu utilitzar aquesta opció diverses vegades a la línia d'ordres: afecta la cerca de la biblioteca per a -l opcions que la segueixen.

-Bsymbolic

Quan creeu una biblioteca compartida, uniu referències a símbols globals a la definició de la biblioteca compartida, si n'hi ha. Normalment, és possible que un programa vinculat a una biblioteca compartida anul·li la definició dins de la biblioteca compartida. Aquesta opció només té sentit en ELFplatforms que admeten biblioteques compartides.

--check-sections

--no-check-sections

Demana al vinculador que no comproveu les adreces de la secció després d'haver estat assignades per veure si hi ha superposicions. Normalment, el vinculador realitzarà aquesta verificació i, si troba cap superposició, produirà missatges d'error adequats. El vinculador sap, i fa subvencions per a les seccions en superposicions. El comportament predeterminat es pot restaurar mitjançant l'opció de línia d'ordres --check-sections .

--ref

Feu una taula de referència creuada. Si s'està generant un fitxer del mapa del vinculador, la taula de referència creuada s'imprimeix al fitxer del mapa. En cas contrari, s'imprimeix a la sortida estàndard.

El format de la taula és intencionalment senzill, de manera que es pot processar fàcilment mitjançant un script, si és necessari. Els símbols s'imprimeixen, ordenats per nom. Per cada símbol, es proporciona una llista de noms de fitxer. Si el símbol està definit, el primer fitxer que es mostra és la ubicació de la definició. Els fitxers restants contenen referències al símbol.

--no-define-common

Aquesta opció inhibeix l'assignació d'adreces als símbols comuns. La comanda script "INHIBIT_COMMON_ALLOCATION" té el mateix efecte.

L'opció --no-define-common permet desacoblar la decisió d'assignar adreces als símbols comuns a partir de l'elecció del tipus de fitxer de sortida; en cas contrari un tipus de sortida no relocatable obliga a assignar adreces als símbols comuns. L'ús de --no-define-common permet que els símbols comuns que es facin referència des d'una biblioteca compartida s'assignin adreces només al programa principal. Això elimina l'espai duplicat no utilitzat a la biblioteca compartida i també evita qualsevol possible confusió sobre la resolució del duplicat equivocat quan hi ha molts mòduls dinàmics amb rutes de cerca especialitzades per a la resolució de símbols d'execució.

--defsym symbol = expression

Creeu un símbol global al fitxer de sortida, que contingui l'adreça absoluta donada per expressió . Podeu utilitzar aquesta opció tantes vegades com sigui necessari per definir diversos símbols a la línia d'ordres. Una forma limitada d'aritmètica és compatible amb l' expressió en aquest context: podeu donar una constant hexadecimal o el nom d'un símbol existent, o usar "+" i "-" per afegir o restar constants o símbols hexadecimals. Si necessiteu expressions més elaborades, considereu utilitzar l'idioma d'ordres del vinculador d'un script. Nota: no hi hauria espai blanc entre el símbol , el signe igual (`` = '') i l' expressió .

--demanxe [= estil ]

--no-demangle

Aquestes opcions controlen si es demana noms de símbols en missatges d'error i altres resultats. Quan el vinculador es diu que demangle, intenta presentar noms de símbols de manera llegible: elimina els guions baixos principals si són utilitzats pel format d'arxiu d'objecte i converteix noms de símbols manejats de C + + en noms llegibles pels usuaris. Els diferents compiladors tenen diferents estils de mangle. L'argument opcional d'estil diferenciador es pot utilitzar per triar un estil demangling adequat per al vostre compilador. El vinculador es desenvolupa de manera predeterminada a menys que la variable d'entorn COLLECT_NO_DEMANGLE estigui establerta. Aquestes opcions es poden utilitzar per substituir el valor predeterminat.

- Fitxer d'enllaç dinàmic

Estableix el nom de l'enllaçador dinàmic. Això només té sentit quan es generen executables ELF enllaçats dinàmicament. L'enllaçador dinàmic predeterminat normalment és correcte; No utilitzeu això a menys que sàpigues el que estàs fent.

- relocats-relocs

Aquesta opció només té sentit quan es vincula el codi PIC incrustat de MIPS, generat per l'opció -membedded-pic al compilador i assemblador GNU. Fa que el vinculador creï una taula que es pugui utilitzar en temps d'execució per reubicar qualsevol dada inicialitzada estàticament als valors de punter. Vegeu el codi en testsuite / ld-empic per obtenir-ne més detalls.

- avisos fatals

Tractar totes les advertències com a errors .

--force-exe-suffix

Assegureu-vos que un fitxer de sortida tingui un sufix .exe.

Si un fitxer de sortida totalment enllaçat amb èxit no té el sufix " .exe " o " .dll ", aquesta opció obliga al vinculador a copiar el fitxer de sortida a un del mateix nom amb un sufix ".exe". Aquesta opció és útil quan s'utilitzen fitxers de fitxers Unix modificats en un host de Microsoft Windows, ja que algunes versions de Windows no executaran una imatge tret que acabi en un sufix ".exe".

--no-gc-sections

- seccions-gc

Activa la recollida d'elements no utilitzats de les seccions d'entrada no utilitzades. S'ignora els objectius que no admet aquesta opció. Aquesta opció no és compatible amb -r , ni s'hauria d'utilitzar amb enllaços dinàmics. El comportament predeterminat (de no realitzar aquesta recopilació de deixalles ) es pot restaurar especificant --no-gc-seccions a la línia d'ordres.

- ajuda

Imprimiu un resum de les opcions de la línia d'ordres a la sortida estàndard i surti.

--target-help

Imprimiu un resum de totes les opcions específiques de destinació a la sortida estàndard i surti.

-Formar fitxer de mapa

Imprimiu un mapa d'enllaç al fitxer de fitxers del fitxer . Vegeu la descripció de l'opció -M , a dalt.

--no-keep-memory

ld normalment optimitza la velocitat de l'ús de la memòria mitjançant l'emmagatzematge en memòria cau de les taules de símbols dels fitxers d'entrada. Aquesta opció indica a ld que optimitzi l'ús de memòria, relecturant les taules de símbols segons sigui necessari. Això pot ser necessari si ld s'esgota de l'espai de memòria mentre es vincula un gran executable.

--no-indefinit

-z defs

Normalment, quan es crea una biblioteca compartida no simbòlica, els símbols no definits estan permesos i deixats de ser resolts pel carregador de temps d'execució. Aquestes opcions no permeten els símbols no definits.

--allow-multiple-definition

-z muldefs

Normalment, quan un símbol es defineix diverses vegades, el vinculador informarà d'un error fatal. Aquestes opcions permeten definicions múltiples i s'utilitzarà la primera definició.

--allow-shlib-undefined

Permet els símbols no definits en els objectes compartits fins i tot quan --no-undefined s'estableix. El resultat net serà que els símbols no definits en objectes regulars encara activaran un error, però s'ignoraran els símbols indefinits en els objectes compartits. La implementació de no_undefined fa que s'assumeixi que el vinculador de temps d'execució s'ocuparà de símbols indefinits. Tanmateix, hi ha almenys un sistema (BeOS) on símbols indefinits a les biblioteques compartides són normals ja que el nucli els fa un parell de temps de càrrega per seleccionar quina funció és la més adequada per a l'arquitectura actual. IE selecciona dinàmicament una funció de memset apropiada. Pel que sembla, també és normal que les biblioteques compartides d'HPPA tinguin símbols indefinits.

--no-undefined-version

Normalment, quan un símbol té una versió no definida, el vinculador ho ignorarà. Aquesta opció no permet els símbols amb una versió no definida i s'emetrà un error greu.

--no-warn-mismatch

Normalment, ld donarà un error si intenteu enllaçar fitxers d'entrada que no coincideixen per alguna raó, potser perquè s'han compilat per a diferents processadors o per a diferents versions. Aquesta opció indica que ha de permetre silenciosos possibles errors. Aquesta opció només s'ha d'utilitzar amb cura, en els casos en què hagi pres mesures especials que garanteixin que els errors del vinculador no siguin adequats.

--no-whole-archive

Desactiveu l'efecte de l'opció --whole-archive per a fitxers de fitxers posteriors.

--noinhibit-exec

Conserveu el fitxer de sortida executable sempre que es pugui utilitzar. Normalment, el vinculador no produirà un fitxer de sortida si troba errors durant el procés d'enllaç; surt sense escriure un fitxer de sortida quan emeti cap error.

-nostdlib

Només cerqueu directoris de biblioteca especificats explícitament a la línia d'ordres. Els directoris de biblioteca especificats en les seqüències d'ordres del vinculador (incloses les seqüències d'enllaços especificades a la línia d'ordres) s'ignoren.

- format de sortida de format

ld pot estar configurat per suportar més d'un tipus d'arxiu d'objectes. Si el vostre ld està configurat d'aquesta manera, podeu utilitzar l'opció --oformat per especificar el format binari del fitxer d'objectes de sortida. Fins i tot quan ld està configurat per suportar formats d'objectes alternatius, normalment no cal especificar-ho, ja que s'hauria de configurar ld per produir com a format de sortida predeterminat el format més habitual en cada màquina. El format de sortida és una cadena de text, el nom d'un format particular compatible amb les biblioteques BFD. (Podeu llistar els formats binaris disponibles amb objdump -i ). L'ordre script "OUTPUT_FORMAT" també pot especificar el format de sortida, però aquesta opció l'anul·la.

-qmagic

Aquesta opció s'ignora per a la compatibilitat de Linux.

-Qy

Aquesta opció s'ignora per a la compatibilitat SVR4.

--relax

Una opció amb efectes dependents de la màquina. Aquesta opció només és compatible amb uns quants objectius.

En algunes plataformes, l'opció --relax realitza optimitzacions globals que es fan possibles quan el vinculador resol adreçar-se al programa, com ara modes de direcció relaxants i sintetitzant noves instruccions al fitxer d'objectes de sortida.

En algunes plataformes, aquestes optimitzacions globals de temps d'enllaç poden fer impossible la depuració simbòlica de l'executable resultant. Aquest és el cas de la família de processadors Matsushita MN10200 i MN10300.

En plataformes on no s'admet, --relax s'accepta, però s'ignoren.

- retain-symbols-file filename

Conserveu només els símbols que figuren en el nom del fitxer , descartant-ne la resta. El nom del fitxer és simplement un fitxer pla, amb un nom de símbol per línia. Aquesta opció és especialment útil en entorns (com VxWorks), on una gran taula de símbols global s'acumula gradualment, per conservar la memòria en temps d'execució.

- retain-symbols-file no descarta símbols indefinits, ni símbols necessaris per a les reubicacions.

Només podeu especificar el fitxer de reenviament-símbols-un cop a la línia d'ordres. Invalida -s i -S .

-rpath dir

Afegiu un directori a la ruta de cerca de la biblioteca d'execució. Això s'utilitza quan es vincula un ELFexecutable amb objectes compartits. Tots els arguments de rpath es concatenen i passen a l'enllaç de temps d'execució, que els utilitza per localitzar objectes compartits en temps d'execució. L'opció -rpath també s'utilitza quan es localitzen objectes compartits que són necessaris per objectes compartits inclosos explícitament en l'enllaç; vegeu la descripció de l'opció -rpath-link . Si -rpath no s'utilitza quan es vincula un executable ELF, s'utilitzarà el contingut de la variable d'entorn "LD_RUN_PATH" si es defineix.

L'opció -rpath també es pot utilitzar a SunOS. Per defecte, a SunOS, el vinculador formarà un pedaç de cerca en temps d'execució de totes les opcions -L que es dóna. Si s'utilitza una opció -rpath , la ruta de cerca de temps d'execució es crearà exclusivament utilitzant les opcions -rpath , ignorant les opcions -L . Això pot ser útil quan s'utilitza gcc, que afegeix moltes opcions de L que poden ser sistemes de fitxers muntats a NFS.

Per compatibilitat amb altres enllaçadors ELF, si l'opció -R és seguida d'un nom de directori, en lloc d'un nom de fitxer, es tracta com l'opció -rpath .

-rpath-link DIR

En utilitzar ELF o SunOS, una biblioteca compartida pot requerir una altra. Això succeeix quan un enllaç "ld-shared" inclou una biblioteca compartida com un dels fitxers d'entrada.

Quan el vinculador troba aquesta dependència quan fa un enllaç no compartit i no relocatable, intentarà localitzar automàticament la biblioteca compartida requerida i incloure'l al'enllaç, si no s'inclou explícitament. En aquest cas, l'opció -rpath-link especifica el primer conjunt de directoris a cercar. L'opció -rpath-link pot especificar una seqüència de noms de directori especificant una llista de noms separats per colons o apareixent diverses vegades.

Aquesta opció s'ha d'utilitzar amb precaució, ja que invalida la ruta de cerca que potser s'ha compilat dur a una biblioteca compartida. En aquest cas, és possible utilitzar involuntàriament una ruta de cerca diferent de la que farà el vinculat en temps d'execució.

El vinculador utilitza les següents rutes de cerca per localitzar les biblioteques compartides requerides.

1.

Qualsevol directori especificat per les opcions -rpath-link .

2.

Qualsevol directori especificat per les opcions -rpath . La diferència entre -rpath i -rpath-link és que els directoris especificats per les opcions -rpath s'inclouen a l'executable i s'utilitzen en temps d'execució, mentre que l'opció -rpath-link només és efectiva en el moment de l'enllaç. Només és per al vinculador natiu.

3.

En un sistema ELF, si no s'utilitzaven les opcions -rpath i "rpath-link", cerqueu el contingut de la variable d'entorn "LD_RUN_PATH". Només és per al vinculador natiu.

4.

A SunOS, si no s'utilitzava l'opció -rpath , cerqueu els directoris especificats amb les opcions -L .

5.

Per a un enllaçador natiu, el contingut de la variable d'entorn "LD_LIBRARY_PATH".

6.

Per a un enllaç natiu ELF, es busquen les biblioteques compartides que necessiten els directoris de "DT_RUNPATH" o "DT_RPATH" d'una biblioteca compartida. Les entrades "DT_RPATH" s'ignoren si hi ha entrades "DT_RUNPATH".

7.

Els directoris predeterminats, normalment / lib i / usr / lib .

8.

Per a un enllaçador natiu en un sistema ELF, si el fitxer /etc/ld.so.conf existeix, la llista de directoris trobats en aquest fitxer.

Si no es troba la biblioteca compartida necessària, el vinculador emetrà un avís i continuarà amb l'enllaç.

-shared

-Bs comprensible

Crea una biblioteca compartida. Actualment només s'admet en plataformes ELF, XCOFF i SunOS. A SunOS, el vinculador crearà automàticament una biblioteca compartida si l'opció -e no s'utilitza i hi ha símbols indefinits a l'enllaç.

--sort-comú

Aquesta opció indica a ld que ordeni els símbols comuns per mida quan els col·loqui a les seccions de sortida adequades. Primer vénen tots els símbols d'un byte, tots dos bytes, després tots els quatre bytes, i després tota la resta. Això és per prevenir llacunes entre símbols a causa de restriccions d'alineació.

--split-by-file [ size ]

Similar a --split-by-reloc però crea una nova secció de sortida per a cada fitxer d'entrada quan s'aconsegueix una mida . La mida de la mida és predeterminada a una mida de 1 si no es dóna.

--split-by-reloc [ comptar ]

Intenta crear seccions addicionals en el fitxer de sortida perquè cap apartat de sortida individual en el fitxer contingui més que deslocalitzacions de comptes . Això és útil quan es generen fitxers relocables enormes per a la seva descàrrega en certs nuclis en temps real amb el format del fitxer de l'objecte COFF; ja que COFFcannot representa més de 65535 reubicacions en una única secció. Tingueu en compte que això no funcionarà amb formats d'arxiu d'objectes que no admeten seccions arbitràries. El vinculador no dividirà les seccions d'entrada individuals per a la redistribució, de manera que si una sola secció d'entrada conté més relacions de recompte , una secció de sortida contindrà moltes reubicacions. el valor predeterminat és de 32768.

- Estats

Comproveu i mostreu estadístiques sobre el funcionament del vinculador, com ara el temps d'execució i l'ús de la memòria.

- format tradicional

Per a alguns objectius, la sortida de ld és diferent en certa manera de la sortida d'algun enllaçador existent. Aquest canvi sol · licita ld per utilitzar el format tradicional.

Per exemple, a SunOS, ld combina entrades duplicades a la taula de cadenes de símbols. Això pot reduir la mida d'un fitxer de sortida amb informació completa de depuració en un 30 per cent. Malauradament, el programa "dbx" de SunOS no pot llegir el programa resultant ("gdb" no té problemes). L' interruptor de format tradicional indica que no es combinen les entrades duplicades.

--section-start sectionname = org

Localitzeu una secció en el fitxer de sortida a l'adreça absoluta proporcionada per org . Podeu utilitzar aquesta opció tantes vegades com sigui necessari per ubicar diverses seccions a la línia d'ordres. org ha de ser un enter sencer hexadecimal; Per compatibilitat amb altres enllaços, podeu ometre els principals 0x associats normalment amb valors hexadecimals. Nota: no hi hauria d'haver espai en blanc entre el nom de la secció , el signe igual (`` = '') i org .

-Tbss org

-Tdata org

-Txt org

Utilitzeu org com a adreça d'inici per ---, respectivament: "bss", "dades" o el segment "text" del fitxer de sortida. org ha de ser un enter sencer hexadecimal; Per compatibilitat amb altres enllaços, podeu ometre els principals 0x associats normalment amb valors hexadecimals.

--dll-verbose

--verbose

Mostra el número de versió per a ld i llista les emulacions del vinculador compatibles. Mostra quins fitxers d'entrada es poden o no poden obrir. Mostra el script del vinculador que utilitza el vinculador.

--version-script = version-script file

Especifiqueu el nom d'una seqüència de comandaments de versió al vinculador. Normalment, s'utilitza quan es creen biblioteques compartides per especificar informació addicional sobre la jerarquia de la versió per crear la biblioteca. Aquesta opció només té sentit en les plataformes ELF que admeten les biblioteques compartides.

-un comú

Avisar quan un símbol comú es combina amb un altre símbol comú o amb una definició de símbol. Els enllaços Unix permeten aquesta pràctica una mica descuidada, però els enllaçadors d'altres sistemes operatius no ho fan. Aquesta opció us permet trobar possibles problemes per combinar símbols globals. Malauradament, algunes biblioteques C utilitzen aquesta pràctica, de manera que pot obtenir algunes advertències sobre símbols a les biblioteques, així com als vostres programes.

Hi ha tres tipus de símbols globals, il·lustrats aquí per exemples de C:

int i = 1;

Una definició, que es troba a la secció de dades inicialitzada del fitxer de sortida.

extern int i;

Una referència indefinida, que no assigna espai. Hi ha d'haver una definició o un símbol comú per a la variable en algun lloc.

int i;

Un símbol comú. Si només hi ha (un o més) símbols comuns per a una variable, es passa a l'àrea de dades no inicialitzada del fitxer de sortida. El vinculador combina diversos símbols comuns per a la mateixa variable en un sol símbol. Si són de mides diferents, tria la mida més gran. El vinculador converteix un símbol comú en una declaració, si hi ha una definició de la mateixa variable.

L'opció "opció general" pot produir cinc tipus d'advertències. Cada advertència consisteix en un parell de línies: el primer descriu el símbol que acabem de trobar, i el segon descriu el símbol anterior trobat amb el mateix nom. Un o dos dels dos símbols serà un símbol comú.

1.

Convertint un símbol comú en una referència, ja que ja hi ha una definició del símbol.

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

2.

Convertint un símbol comú en una referència, perquè es troba una definició posterior del símbol. Això és el mateix que el cas anterior, excepte que els símbols es troben en un ordre diferent.

(
): warning: definition of ` 'overriding common (
): warning: common is here

3.

Fusionar un símbol comú amb un símbol comú anterior anterior.

(
): warning: common multiple of ` ' (
): warning: previous common is here

4.

Combinant un símbol comú amb un símbol comú anterior anterior.

(
): warning: common of ` 'reemplaçat per (
) comú més gran: warning: larger common is here

5.

Fusionar un símbol comú amb un símbol comú anterior anterior. Això és el mateix que el cas anterior, excepte que els símbols es troben en un ordre diferent.

(
): warning: common of ` 'overriding smaller common (
): warning: smaller common is here

constructors

Adverteu si s'utilitzen els constructors globals. Això només és útil per a alguns formats d'arxiu d'objectes. Per a formats com COFF o ELF, el vinculador no pot detectar l'ús de constructors globals.

--warn-multiple-gp

Aviseu si es requereixen múltiples valors de punter global al fitxer de sortida . Això només és significatiu per a alguns processadors, com ara l'Alpha. En concret, alguns processadors posen constants de gran valor en una secció especial. Un registre especial (el punter global) s'inscriu en el centre d'aquesta secció, de manera que les constants es poden carregar de manera eficient a través d'un mode de direcció relatiu de registre base. Atès que el desplaçament en el mode relatiu de registre base està fixat i relativament petit (per exemple, 16 bits), això limita la mida màxima del grup constant. Per tant, en grans programes, sovint és necessari utilitzar múltiples valors de punter global per poder abordar totes les constants possibles. Aquesta opció fa que s'emeti una advertència quan es produeixi aquest cas.

- una vegada

Només s'adverteix una vegada per cada símbol indefinit, en comptes d'una vegada per cada mòdul al que es refereix.

--warn-section-align

Avisa si l'adreça d'una secció de sortida es canvia a causa de l'alineació. Normalment, l'alineació s'establirà mitjançant una secció d'entrada. L'adreça només es canviarà si no s'especifica explícitament; és a dir, si la comanda "SECCIONS" no especifica una adreça d'inici per a la secció.

- tot l'arxiu

Per a cada arxiu esmentat a la línia d'ordres després de l'opció --whole-archive , incloeu tots els fitxers d'objectes a l'arxiu de l'enllaç, en lloc de cercar l'arxiu dels fitxers d'objectes necessaris. Normalment s'utilitza per convertir un arxiu en una biblioteca compartida, obligant a incloure tots els objectes a la biblioteca compartida resultant. Aquesta opció es pot utilitzar més d'una vegada.

Dues notes quan s'utilitza aquesta opció de gcc: En primer lloc, gcc no sap sobre aquesta opció, de manera que haureu d'usar -Wl, -whole-archive . En segon lloc, no us oblideu d'utilitzar -Wl, -no-whole-archive després de la vostra llista d'arxius, ja que gcc afegirà la seva pròpia llista d'arxius al vostre enllaç i és possible que no vulgueu que aquesta bandera també els afecti.

- símbol d' embolcall

Utilitzeu una funció d'embolcall per al símbol . Qualsevol referència no definida del símbol es resoldrà a "__ wrap_symbol". Qualsevol referència indefinida a "__real_symbol" es resoldrà al símbol .

Això es pot utilitzar per proporcionar un contenidor per a una funció del sistema. La funció de contenidor s'ha de cridar "__wrap_symbol". Si voleu trucar a la funció del sistema, ha de cridar "__ real_symbol".

Aquí teniu un exemple trivial:

buit * __wrap_malloc (int c) {printf ("malloc anomenat amb% ld \ n", c); torna __real_malloc (c); }

Si enllaceu un altre codi amb aquest fitxer usant -wrap malloc , llavors totes les trucades a "malloc" cridaran a la funció "__wrap_malloc" al seu lloc. La crida a "__real_malloc" a "__wrap_malloc" cridarà a la funció real "malloc".

També podeu proporcionar una funció "__real_malloc", de manera que els enllaços sense l'opció --wrap tindran èxit. Si ho feu, no heu de posar la definició de "__ real_malloc" en el mateix fitxer que "__wrap_malloc"; si ho feu, l'assemblador pot resoldre la trucada abans que el vinculat tingui la possibilitat d'embolicar-lo a "malloc".

--enable-new-dtags

--disable-new-dtags

Aquest enllaçador pot crear les noves etiquetes dinàmiques a ELF. Però els sistemes ELF més antics poden no comprendre'ls. Si especifiqueu --enable-new-dtags , es crearan les etiquetes dinàmiques segons calgui. Si especifiqueu --disable-new-dtags , no es crearan noves etiquetes dinàmiques. De manera predeterminada, no es creen les noves etiquetes dinàmiques. Tingueu en compte que aquestes opcions només estan disponibles per als sistemes de qualitat.

L'enllaç i386 PE admet l'opció compartida , que fa que la sortida sigui una biblioteca (DLL) enllaçada dinàmicament en comptes d'un executable normal. Heu d'indicar la sortida "* .dll" quan feu servir aquesta opció. A més, el vinculador és totalment compatible amb els fitxers estàndard "* .def", que es poden especificar a la línia d'ordres del vinculador com un fitxer d'objecte (de fet, ha de precedir els arxius que exporta els símbols de, per assegurar-se que es connecten, igual que un fitxer d'objectes normal).

A més de les opcions comunes a tots els objectius, l'enllaç i386 PE admet opcions de línia d'ordres addicionals específiques del PE PE i386. Les opcions que prenen valors es poden separar dels seus valors mitjançant un signe d'espai o igual.

--add-stdcall-alias

Si s'ofereix, símbols amb sufix estdcall (@ nn ) s'exportaran de la mateixa manera i també amb el sufix desposseït.

- fitxer de fitxer de base

Utilitzeu el fitxer com el nom d'un fitxer en el qual guardar les adreces base de totes les deslocalitzacions necessàries per generar fitxers DLL amb dlltool .

--dll

Creeu una DLL en lloc d'un executable normal. També podeu utilitzar -sharar o especificar una "BIBLIOTECA" en un fitxer ".def" determinat.

--enable-stdcall-fixup

--disable-stdcall-fixup

Si el vincle troba un símbol que no es pot resoldre, intentarà fer una "enllaçació difusa" buscant un altre símbol definit que difereix només en el format del nom del símbol (cdecl vs stdcall) i resoldrà aquest símbol enllaçant al partit. Per exemple, el símbol "_foo" no definit pot estar vinculat a la funció "_foo @ 12", o el símbol "_bar @ 16" no definit pot estar vinculat a la funció "_bar". Quan el vinculador ho fa, imprimeix una advertència, ja que normalment no s'hauria d'enllaçar, però de vegades importar biblioteques generades a partir de dll de tercers potser necessitareu que aquesta funció sigui usable. Si especifiqueu --enable-stdcall-fixup , aquesta funció està completament habilitada i les advertències no s'imprimeixen. Si especifiqueu --disable-stdcall-fixup , aquesta característica està deshabilitada i es consideren errors aquests incompatibilitats.

--export-all-symbols

Si s'ofereix, el DLL exportarà tots els símbols globals dels objectes utilitzats per generar una DLL. Tingueu en compte que això és el valor predeterminat si, d'altra manera, no hi hauria cap símbol exportat. Quan els símbols s'exporten explícitament a través d'arxius DEF o exportats implícitament a través dels atributs de la funció, el valor predeterminat és no exportar res més a menys que aquesta opció es proporcioni. Tingueu en compte que els símbols "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" i "impure_ptr" no s'exportaran automàticament. A més, els símbols importats d'altres fitxers DLL no seran reexportados, ni símbols que especifiquin el disseny intern de la DLL, com els que comencen per "_head_" o que acaben amb "_iname". A més, no s'exportaran símbols de "libgcc", "libstd ++", "libmingw32" o "crtX.o". Els símbols els noms comencen amb "__rtti_" o "__builtin_" no s'exportaran, per ajudar-vos amb DLL de C + +. Finalment, hi ha una extensa llista de símbols privats cygwin que no s'exporten (òbviament, això s'aplica a l'hora de crear DLL per als objectius de cygwin).

Aquests exclou cygwin són: "_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 "i" environ ".

--exclou-símbols símbol , símbol , ...

Especifica una llista de símbols que no s'han d'exportar automàticament. Els noms dels símbols poden estar delimitats per comes o per colons.

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

Especifica una llista de biblioteques d'arxiu a partir de les quals els símbols no s'han d'exportar automàticament. Els noms de les biblioteques poden estar delimitats per comes o per colons. Si especifiqueu "--exclude-libs ALL" exclou símbols a totes les biblioteques d'arxiu d'exportació automàtica. Els símbols que s'enumeren explícitament en un fitxer .def encara s'exporten, independentment d'aquesta opció.

- Alineació de fitxers

Especifiqueu l'alineació del fitxer. Les seccions del fitxer sempre començaran a compensar fitxers que són múltiples d'aquest número. Aquest valor per defecte és de 512.

- reserva de xecs

- reserva , comprometre's

Especifiqueu la quantitat de memòria que voleu reservar (i, opcionalment, comanda) per utilitzar-se com a pila d'aquest programa. El valor predeterminat és 1Mb reservat, 4K compromès.

- valor de la imatge-base

Utilitzeu el valor com a adreça base del vostre programa o dll. Aquesta és la ubicació de memòria més baixa que s'utilitzarà quan es carregui el programa o el dll. Per reduir la necessitat de reubicar i millorar el rendiment dels vostres dll, cadascun hauria de tenir una adreça base única i no superposar-se a cap altre dll. El valor predeterminat és 0x400000 per a executables i 0x10000000 per a dlls.

--kill-at

Si s'ofereix, els sufixos de stdcall (@ nn ) seran eliminats dels símbols abans que s'exportin.

--major-image-version value

Estableix el major nombre de `` versió d'imatge ''. Per defecte a 1.

--major-os- valor de la versió

Estableix el major nombre de la versió `` os ''. Valors per defecte a 4.

--major-subsystem-version value

Estableix el major nombre de la `` subsistema de versió ''. Valors per defecte a 4.

--minor-image-version value

Estableix el menor nombre de la `` versió d'imatge ''. Per defecte a 0.

--minor-os-version value

Estableix el menor nombre de la versió `` os ''. Per defecte a 0.

--minor-subsistema- valor de versió

Estableix el menor nombre de la `` subsistema versió ''. Per defecte a 0.

--putput-def file

El vinculador crearà el fitxer que contindrà un fitxer DEF corresponent al DLL que genera el vinculador. Aquest fitxer DEF (que s'hauria d'anomenar "* .def") es pot utilitzar per crear una biblioteca d'importació amb "dlltool" o pot utilitzar-se com a referència als símbols exportats automàticament o implícitament.

--out-implib file

El vinculador crearà el fitxer que contindrà una lib d'importació corresponent a la DLL que genera el vinculador. Aquesta lib d'importació (que s'hauria d'anomenar "* .dll.a" o "* .a" es pot utilitzar per vincular clients contra la DLL generada; aquest comportament permet saltar un pas de creació de la biblioteca d'importació "dlltool" per separat.

--enable-auto-image-base

Seleccioneu automàticament la base d'imatges per DLL, tret que s'especifiqui mitjançant l'argument "--image-base". Mitjançant l'ús d'un hash generat a partir del dllname per crear bases d'imatges úniques per a cada DLL, es eviten les col·lisions en memòria i les relocacions que poden retardar la execució del programa.

--disable-auto-image-base

No generi automàticament una base d'imatge única. Si no hi ha cap base d'imatge especificada per l'usuari ("--image-base"), utilitzeu la plataforma per defecte.

--dll-search-prefix string

En enllaçar dinàmicament a un dll sense una biblioteca d'importació, cerqueu " .dll" en lloc de "lib .dll". Aquest comportament permet una fàcil distinció entre les DLL construïdes per a les diverses `` subplatforms '': natiu, cygwin, uwin, pw, etc. Per exemple, les DLL de cygwin normalment utilitzen "--dll-search-prefix = cyg".

--enable-auto-import

Feu un enllaç sofisticat de "_symbol" a "__imp__symbol" per a importacions de dades des de DLL i creeu els símbols de processament necessaris al crear les biblioteques d'importació amb aquests DATAexports. En general, "funcionarà", però de vegades pot veure aquest missatge:

"variable" "no es pot importar automàticament. Llegeix la documentació de" --enable-auto-import "de ld per obtenir més informació."

Aquest missatge es produeix quan una expressió (sub) accedeix a una adreça que finalment dóna la suma de dues constants (les taules d'importació Win32 només permeten una). Les instàncies en què això es pot produir inclouen els accessos als camps de membres de les variables d'estructura importats d'una DLL, així com l'ús d'un índex constant en una variable de matriu importada d'un fitxer DLL. Qualsevol variable de paraules múltiples (matrius, estructures, llargues llargues, etc.) pot desencadenar aquesta condició d'error. Tanmateix, independentment del tipus de dades exactes de la variable exportadora infractora, ld sempre la detecta, emetrà l'avís i sortirà.

Hi ha diverses maneres d'abordar aquesta dificultat, independentment del tipus de dades de la variable exportada:

Una manera és utilitzar el commutador -enable-runtime-pseudo-reloc. Això deixa la tasca d'ajustar referències al codi del client per a l'entorn d'execució, de manera que aquest mètode només funciona quan l'entorn d'execució admet aquesta característica.

Una segona solució és forçar una de les "constants" a ser una variable --- que és, desconeguda i no optimitzable en temps de compilació. Per a les matrius, hi ha dues possibilitats: a) fer que l'indexee (adreça de la matriu) sigui una variable, o b) fer que l'índex "constant" sigui una variable. Així:

extern tipus extern_array []; extern_array [1] -> {tipus volàtil * t = exterior_array; t [1]}

o

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

Per a les estructures (i la majoria dels altres tipus de dades de paraules múltiples), l'única opció és fer que la pròpia estructura (o la variable llarga, o la ...)

external struct s extern_struct; extern_struct.field -> {struct volatile s * t = & extern_struct; t-> camp}

o

extern llarg llarg extern_ll; extern_ll -> {volatile long long * local_ll = & extern_ll; * local_ll)

Un tercer mètode per tractar aquesta dificultat és abandonar la "importació automàtica" del símbol ofensiu i marcar-lo amb "__declspec (dllimport)". Tanmateix, a la pràctica, que requereix l'ús de compilació #defines per indicar si està construint una DLL, crear codi de client que enllaçarà amb la DLL o simplement crear / enllaçar a una biblioteca estàtica. A l'hora d'escollir entre els diferents mètodes per resoldre el problema de "direcció directa amb compensació constant", hauríeu de considerar l'ús típic del món real:

Original:

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

Solució 1:

--foo.h extern int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Aquesta solució és per win32 i cygwin; no "optimitzar" * / volatile int * parr = arr; printf ("% d \ n", parr [1]); }

Solució 2:

--foo.h / * Nota: s'assumeix l'autoexportació (no __declspec (dllexport)) * / #if (definida (_WIN32) || definida (__ CYGWIN__)) && (closed (FOO_BUILD_DLL) || definida (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]); }

Una quarta manera d'evitar aquest problema és tornar a codificar la vostra biblioteca per utilitzar una interfície funcional en comptes d'una interfície de dades per a les variables ofensives (p . Ex., Set_foo () i get_foo ( ).

--disable-auto-import

No intenteu fer enllaços sofisticats de "_symbol" a "__imp__symbol" per DATAimports des de DLL.

--enable-runtime-pseudo-reloc

Si el vostre codi conté expressions descrites a la secció --enable-auto-import, és a dir, DATAimports de DLL amb compensació sense zero, aquest commutador crearà un vector de pseudo relocacions de temps d'execució que pot utilitzar l'entorn de temps d'execució per ajustar les referències. a aquestes dades al codi del vostre client.

--disable-runtime-pseudo-reloc

No creeu pseudo deslocalitzacions per importacions de DATA sense compensar sense zero, des de DLL. Aquest és el valor predeterminat.

--enable-extra-pe-debug

Mostra informació de depuració addicional relacionada amb el processament de símbols d'importació automàtica.

- secció-alineació

Estableix l'alineació de la secció. Les seccions de la memòria sempre començaran a les adreces que són múltiples d'aquest número. Per defecte a 0x1000.

- reserva d' estació

- reserva de plaça , comprometre's

Especifiqueu la quantitat de memòria que voleu reservar (i opcionalment es compromet) per utilitzar-la com a pila d'aquest programa. El valor predeterminat és 2Mb reservat, 4K compromès.

--subsistema que

--subsistema que : major

--subsistema que : major . menor

Especifica el subsistema sota el qual s'executarà el programa. Els valors legals per als quals són "natius", "finestres", "consola" i "posix". També podeu configurar la versió del subsistema també.

Important: utilitzeu l'ordre man ( % home ) per veure com s'utilitza una comanda a l'ordinador en particular.