Comando Linux / Unix: Id

NAME

ld - Usando LD , o vinculador GNU

SINOPSE

ld [ opcións ] ficheiro de obxecto ...

DESCRICIÓN

ld combina varios arquivos de obxectos e arquivos , traslada os seus datos e ataca as referencias de símbolos. Normalmente o último paso na compilación dun programa é executar ld .

ld acepta os ficheiros de idioma do comando do vinculador escritos nun superseto da sintaxe da linguaxe de comandos do editor de enlaces de AT & T, para proporcionar un control explícito e total sobre o proceso de vinculación.

Esta páxina man non describe o idioma do comando; vexa a entrada ld en "info" ou o manual ld: linker GNU , para obter detalles completos sobre o idioma de comandos e sobre outros aspectos do ligador de GNU.

Esta versión de ld usa as bibliotecas BFD de propósito xeral para operar en ficheiros de obxectos. Isto permite que ld lea, combine e escriba ficheiros de obxectos en varios formatos diferentes --- por exemplo, COFF ou "a.out". Os diferentes formatos poden conectarse entre si para producir calquera tipo de ficheiro de obxecto dispoñible.

Separadamente da súa flexibilidade, o enlace do GNU é máis útil que outros enlaces ao proporcionar información de diagnóstico. Moitos enlazadores abandonan a execución inmediatamente despois de atopar un erro; sempre que sexa posible, ld continúa executándose, o que lle permite identificar outros erros (ou, nalgúns casos, obter un ficheiro de saída a pesar do erro).

O enlace GNU ld está destinado a cubrir un amplo abano de situacións e para ser o máis compatible posible con outros enlaces. Como resultado, ten moitas opcións para controlar o seu comportamento.

OPCIÓNS

O enlazador soporta unha infinidade de opcións de liña de comandos , pero na práctica real, poucas delas son utilizadas en calquera contexto particular. Por exemplo, un uso frecuente de ld é vincular ficheiros de obxecto Unix estándar nun sistema Unix compatible e estándar. En tal sistema, ligar un ficheiro "hello.o":

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

Isto indica a Ld que produza un ficheiro chamado saída como resultado de ligar o ficheiro "/lib/crt0.o" con "hello.o" ea biblioteca "libc.a", que virá dos directorios de busca estándar. (Vexa a discusión sobre a opción -l debaixo).

Algunhas das opcións de liña de comandos para ld poden especificarse en calquera punto da liña de comandos. Non obstante, as opcións que fan referencia a ficheiros, como -l ou -T , fan que o ficheiro se lea no punto en que aparece a opción na liña de comandos, en relación aos ficheiros de obxectos e outras opcións de ficheiro. A repetición de opcións non arquivadas cun argumento diferente non terá ningún efecto adicional, ou anular as ocorrencias previas (aquelas máis á esquerda na liña de comandos) desta opción. As opcións que poden especificarse de forma significativa máis dunha vez nótanse nas descricións a continuación.

Os argumentos non opcionais son arquivos de obxectos ou arquivos que se deben vincular. Poden seguir, preceder ou barrear con opcións de liña de comandos, agás que un argumento de ficheiro de obxecto non se poida situar entre unha opción eo seu argumento.

Normalmente, o vinculador é invocado con polo menos un ficheiro de obxecto, pero pode especificar outras formas de ficheiros de entrada binarios usando -l , -R , eo idioma de comandos de script. Se non se especifican arquivos de entrada binarios en todos, o vinculador non produce ningunha saída e emite a mensaxe Non hai ficheiros de entrada .

Se o vinculador non pode recoñecer o formato dun ficheiro de obxecto, suporá que é un script de ligazón. Un script especificado deste xeito aumenta o script de ligazón principal empregado para a ligazón (o script de ligazón predeterminado ou o especificado usando -T ). Esta característica permite que o ligador vincle contra un ficheiro que parece ser un obxecto ou arquivo, pero en realidade simplemente define algúns valores de símbolo, ou usa "INPUT" ou "GROUP" para cargar outros obxectos. Teña en conta que especificar un script deste xeito só aumenta o script principal do ligador; use a opción -T para substituír completamente o script de ligazón predeterminado.

Para as opcións cuxos nomes son unha única letra, os argumentos de opción deben seguir a letra da opción sen intervir nos espazos en branco, ou darse como argumentos separados inmediatamente despois da opción que os require.

Para opcións cuxos nomes son varias letras, un ou dous guións poden preceder ao nome da opción; por exemplo, o símbolo da traza e o símbolo da traza son equivalentes. Nota: hai unha excepción a esta regra. As opcións de varias letras que comezan con unha letra inferior 'o' só poden ser precedidas por dous guións. Isto é para reducir a confusión coa opción -o . Entón, por exemplo, -magic establece o nome do ficheiro de saída á maxia, mentres que -omagic estabelece a marca NMAGIC na saída.

Os argumentos para as opcións de letras múltiples deben estar separadas do nome da opción por un sinal igual, ou ser dadas como argumentos separados inmediatamente despois da opción que os require. Por exemplo, --trace-symbol foo e --trace-symbol = foo son equivalentes. Se aceptan abreviaturas únicas dos nomes das opcións de letras múltiples.

Nota: se o vinculador está a ser invocado de forma indirecta, a través dun controlador de compilador (por exemplo, gcc ), todas as opcións da liña de comando do vinculador deben estar prefixadas por -Wl (ou o que sexa apropiado para o controlador particular do compilador) coma este:

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

Isto é importante, porque se non, o programa do controlador do compilador pode desactivar silenciosamente as opcións do vinculador, obtendo unha ligazón mala.

Aquí ten unha táboa dos modificadores de liña de comandos genéricos aceptados polo conector GNU:

-unha palabra clave

Esta opción é compatíbel coa compatibilidade con HP / UX. O argumento de palabras clave debe ser un arquivo de cadeas , compartido ou predeterminado . -archivo é funcionalmente equivalente a -static , e as outras dúas palabras clave son funcionalmente equivalentes a -Bynamic . Esta opción pódese empregar calquera número de veces.

- Unha arquitectura

--architecture = arquitectura

Na versión actual de ld , esta opción só é útil para a familia de arquitecturas Intel 960. Nesa configuración ld , o argumento de arquitectura identifica a arquitectura particular na familia 960, permitindo algunhas salvagardas e modificando a ruta de busca da biblioteca de arquivos.

Os lanzamentos futuros de ld poden soportar funcións similares para outras familias de arquitectura.

-b formato de entrada

--format = input-format

ld pode estar configurado para soportar máis dun tipo de ficheiro de obxecto. Se o seu ld está configurado deste xeito, pode usar a opción -b para especificar o formato binario dos ficheiros de obxectos de entrada que seguen esta opción na liña de comandos. Mesmo cando ld está configurado para soportar formatos de obxectos alternativos, non adoita ter que especificar isto, xa que ld debería configurarse para esperar como formato de entrada predefinido o formato máis habitual en cada máquina. O formato de entrada é unha cadea de texto, o nome dun formato particular soportado polas bibliotecas BFD. (Podes listar os formatos binarios dispoñibles con objdump -i ).

Pode querer usar esta opción se está ligando ficheiros cun formato binario inusual. Tamén pode usar -b para cambiar os formatos explícitamente (ao vincular ficheiros de obxectos de diferentes formatos), incluíndo -b entrada de formato antes de cada grupo de ficheiros de obxecto nun formato en particular.

O formato predeterminado é tomado da variable de entorno "GNUTARGET".

Tamén pode definir o formato de entrada dun script, empregando o comando "TARGET";

-c MRI-file de comando

--mri-script = MRI-file de comando

Para compatibilidade con ligadores producidos por MRI, ld acepta ficheiros de guións escritos nunha linguaxe de comando restrinxida e restrinxida, descrita na sección de Arquivos de guións compatibles de MRI de GNU ld. Introduce os ficheiros de script MRI coa opción -c ; use a opción -T para executar scripts de ligazóns escritos no idioma de script de uso xeral. Se MRI-cmdfile non existe, ld busca nel os directorios especificados por calquera opción -L .

-d

-dc

-dp

Estas tres opcións son equivalentes; Os múltiples formularios son compatibles con compatibilidade con outros conectores. Eles asignan espazo a símbolos comúns aínda que se especifique un ficheiro de saída reenvocable (con -r ). O comando script "FORCE_COMMON_ALLOCATION" ten o mesmo efecto.

-e entrada

--entrada = entrada

Use a entrada como o símbolo explícito para comezar a execución do programa, no canto do punto de entrada predeterminado. Se non hai un símbolo chamado entrada , o vinculador intentará analizar a entrada como un número e usar isto como enderezo de entrada (o número interpretarase na base 10; pode usar un 0x líder para a base 16 ou un marcador 0 para a base 8).

-E

--export-dinámico

Ao crear un executábel dinámicamente vinculado, engade todos os símbolos á táboa de símbolos dinámicos. A táboa de símbolos dinámicos é o conxunto de símbolos visibles desde obxectos dinámicos en tempo de execución.

Se non usa esta opción, a táboa de símbolos dinámicos normalmente contén só aqueles símbolos aos que se fai referencia algún obxecto dinámico mencionado na ligazón.

Se usa "dlopen" para cargar un obxecto dinámico que debe referirse aos símbolos definidos polo programa, en vez de algún outro obxecto dinámico, entón probablemente necesitará usar esta opción ao vincular o propio programa.

Tamén pode usar o script de versión para controlar que símbolos se engadirán á táboa de símbolos dinámicos se o formato de saída o soporta. Vexa a descrición de --version-script en @ ref {VERSION}.

-EB

Ligazón obxectos big-endian. Isto afecta o formato de saída predeterminado.

-EL

Ligazón obxectos little-endian. Isto afecta o formato de saída predeterminado.

-f

- nome nominal

Ao crear un obxecto compartido de ELF, configure o campo DT_AUXILIARY interno no nome especificado. Isto informa ao vinculador dinámico que a táboa de símbolos do obxecto compartido debería utilizarse como filtro auxiliar na táboa de símbolos do nome do obxecto compartido.

Se máis tarde vincular un programa contra este obxecto de filtro, entón, cando executar o programa, o vinculador dinámico verá o campo DT_AUXILIARY. Se o vinculador dinámico resolve calquera símbolo do obxecto do filtro, primeiro comprobará se existe unha definición no nome do obxecto compartido. Se hai un, empregarase no canto da definición no obxecto do filtro. O nome do obxecto compartido non necesita existir. Así, o nome do obxecto compartido pode usarse para proporcionar unha implementación alternativa de certas funcións, quizais para a depuración ou para o desempeño específico da máquina.

Esta opción pódese especificar máis dunha vez. As entradas DT_AUXILIARY crearanse na orde en que aparecen na liña de comandos.

-F nome

- nome do filtro

Ao crear un obxecto compartido de ELF, configure o campo DT_FILTER interno ao nome especificado. Isto indica ao ligador dinámico que a táboa de símbolos do obxecto compartido que se está a crear debería usarse como filtro na táboa de símbolos do nome do obxecto compartido.

Se máis tarde vincular un programa contra este obxecto de filtro, entón, cando executar o programa, o vinculador dinámico verá o campo DT_FILTER. O vinculador dinámico resolverá os símbolos segundo a táboa de símbolos do obxecto de filtro como de costume, pero en realidade vinculará coas definicións atopadas no nome do obxecto compartido. Deste xeito, o obxecto do filtro pode usarse para seleccionar un subconxunto dos símbolos fornecidos polo nome do obxecto.

Algúns encaixadores máis antigos usaron a opción -F a través dunha cadea de ferramentas de compilación para especificar o formato de ficheiro de obxecto para os ficheiros de obxectos de entrada e saída. O vinculador de GNU usa outros mecanismos para este propósito: as opcións -b , --format , --oformat , o comando "TARGET" nas secuencias de comandos do vinculador e a variable de entorno "GNUTARGET". O enlace do GNU ignorará a opción -F cando non se crea un obxecto compartido de ELF.

nome fino

Ao crear un obxecto executable ou compartido de ELF, chame a NAME cando se descargue o obxecto executable ou compartido, establecendo DT_FINI na dirección da función. Por defecto, o vinculador usa "_fini" como a función a chamar.

-g

Ignorado. Proporcionado a compatibilidade con outras ferramentas.

-G valor

--gpsize = valor

Estableza o tamaño máximo dos obxectos a optimizar empregando o rexistro de GP ao tamaño . Isto só é significativo para formatos de ficheiros de obxectos como MIPS ECOFF que admite poñer obxectos grandes e pequenos en diferentes seccións. Isto ignórase para outros formatos de ficheiro de obxectos.

-h nome

-sónimo = nome

Ao crear un obxecto compartido de ELF, configure o campo DT_SONAME interno no nome especificado. Cando un executable está ligado a un obxecto compartido que ten un campo DT_SONAME, entón cando se executa o executable, o vinculador dinámico tentará cargar o obxecto compartido especificado polo campo DT_SONAME en lugar de usar o nome do ficheiro que se fornece ao ligador.

-i

Realiza unha ligazón incremental (igual que a opción -r ).

-inicio nome

Ao crear un obxecto executable ou compartido de ELF, chame a NAME cando se cargue o obxecto executable ou compartido, establecendo DT_INIT na dirección da función. Por defecto, o vinculador usa "_init" como a función a chamar.

-l arquivo

--library = arquivo

Engadir arquivo de arquivo de arquivo á lista de ficheiros para ligar. Esta opción pódese empregar calquera número de veces. ld buscará a súa lista de rutas para as aparicións de "libarchive.a" para cada arquivo especificado.

Nos sistemas que soportan bibliotecas compartidas, ld tamén pode buscar bibliotecas con extensións distintas de ".a". Especificamente, en sistemas ELF e SunOS, buscará un directorio para unha biblioteca cunha extensión de ".so" antes de buscar unha cunha extensión de ".a". Por convención, a extensión ".so" indica unha biblioteca compartida.

O vinculador buscará un arquivo só unha vez, no lugar onde se especifique na liña de comandos. Se o arquivo define un símbolo que non estaba definido nalgún obxecto que apareceu antes do arquivo na liña de comandos, o vinculador incluirá o (s) arquivo (s) apropiado (s) do arquivo. Non obstante, un símbolo indefinido nun obxecto que aparece máis adiante na liña de comandos non fará que o linker busque de novo o arquivo.

Vexa a opción - ( opción para forzar o enlace para buscar arquivos varias veces.

Pode listar o mesmo arquivo varias veces na liña de comandos.

Este tipo de busca de arquivo é estándar para os conectores Unix. Non obstante, se está a usar ld onAIX, teña en conta que é diferente do comportamento do conector AIX.

-L searchdir

--library-path = searchdir

Engada o camiño de busca á lista de camiños que buscarán bibliotecas de arquivos e scripts de control ld . Podes usar esta opción por varias veces. Os directorios son buscados na orde en que se especifican na liña de comandos. Os directorios especificados na liña de comandos procúranse antes dos directorios predeterminados. Todas as opcións -L aplícanse a todas as opcións -l , independentemente da orde na que aparecen as opcións.

Se a busca comeza con "=", entón o "=" será substituído polo prefix do sistema , unha ruta especificada cando o conector está configurado.

O conxunto predeterminado de procuras buscadas (sen que se especifique con -L ) depende do modo de emulación ld que está a empregar, e nalgúns casos tamén sobre como foi configurado.

Os camiños tamén se poden especificar nun script de ligazón co comando "SEARCH_DIR". Os directorios especificados deste xeito son buscados no punto en que aparece o script do vinculador na liña de comandos.

-m emulación

Emula o vinculador de emulación . Pode listar as emulacións dispoñibles coas opcións --verbose ou -V .

Se a opción -m non se usa, a emulación é tomada da variable de entorno "LDEMULATION", se está definida.

En caso contrario, a emulación por defecto depende de como se configurou o vinculador.

-M

--print-map

Imprimir un mapa de ligazón á saída estándar. Un mapa de ligazón proporciona información sobre a ligazón, incluíndo o seguinte:

*

Onde os mapas e os símbolos de obxectos están mapeados na memoria.

*

Como se asignan os símbolos comúns.

*

Todos os membros do arquivo incluídos na ligazón, con mención do símbolo que provocou o ingreso do membro do arquivo.

-n

--nmáxica

Desactive o aliñamento da páxina das seccións e marque a saída como "NMAGIC" se é posible.

-N

--máxico

Establecer as seccións de texto e de datos para ser lexíbeis e escribibles. Ademais, non asine a páxina no segmento de datos e desactive a conexión entre as bibliotecas compartidas. Se o formato de saída admite números máxicos de estilo Unix, marca a saída como "OMAGIC".

--no-omagic

Esta opción anula a maioría dos efectos da opción -N . Establece a sección de texto para ser de só lectura e obriga ao segmento de datos a estar aliñado á páxina. Nota: esta opción non permite a conexión entre bibliotecas compartidas. Use -Bynamic para iso.

-o saída

--output = saída

Use a saída como o nome do programa producido por ld ; se non se especifica esta opción, o nome a.out úsase de forma predeterminada. O comando script "OUTPUT" tamén pode especificar o nome do ficheiro de saída.

-O nivel

Se o nivel é un valor numérico superior a cero, ld optimiza a saída. Isto pode levar moito máis tempo e, polo tanto, probablemente só debería estar habilitado para o binario final.

-q

--emit-relocs

Deixar as seccións e os contidos de reubicación en exececutables totalmente ligados. As ferramentas de análise e optimización das ligazóns de mensaxes poden necesitar esta información para realizar modificacións correctas dos executables. Isto resulta en executables maiores.

Esta opción só é compatible con plataformas ELF.

-r

--relocable

Xerifique a produción relocalizable --- isto é, xerar un ficheiro de saída que, á súa vez, sexa como entrada a ld . Isto chámase a miúdo vinculación parcial . Como efecto secundario, en ambientes que admiten números máxicos estándar de Unix, esta opción tamén configura o número máxico do ficheiro de saída para "OMAGIC". Se non se especifica esta opción, prodúcese un ficheiro absoluto. Ao vincular programas de C ++, esta opción non resolverá referencias aos constructores; para facelo, usa -Ur .

Cando un ficheiro de entrada non ten o mesmo formato que o ficheiro de saída, o enlace parcial só se admite se ese ficheiro de entrada non contén ningunha reubicación. Os diferentes formatos de saída poden ter restricións máis; por exemplo, algúns formatos baseados en "a.out" non admiten enlaces parciais con ficheiros de entrada noutros formatos.

Esta opción fai o mesmo que -i .

-R nome de ficheiro

--just-symbols = nome de ficheiro

Lea os nomes dos símbolos e os seus enderezos do nome do ficheiro , pero non o reenvíe nin o inclúa na saída. Isto permite que o ficheiro de saída faga referencia simbólicamente a localizacións absolutas de memoria definidas noutros programas. Podes usar esta opción máis dunha vez.

Para compatibilidade con outros conectores ELF, se a opción -R é seguida dun nome de directorio, no canto dun nome de ficheiro, trátase como a opción -rpath .

-s

--esprender todo

Omita toda a información de símbolos do ficheiro de saída.

-S

--outra-depuración

Omite a información do símbolo do depurador (pero non todos os símbolos) do ficheiro de saída.

-t

--trace

Imprime os nomes dos ficheiros de entrada como ld os procesa.

Ficheiro de script T

--script = ficheiro de guións

Use o ficheiro de guións como script de ligazón. Este script substitúe o script de ligazón predeterminado de ld (en lugar de engadilo), polo que o ficheiro de comando debe especificar todo o necesario para describir o ficheiro de saída. Se o ficheiro de guións non existe no directorio actual, "ld" busca nel os directorios especificados por calquera opción anterior -L . Múltiples opcións T acumúlanse.

-e símbolo

--undeado = símbolo

O símbolo de forza debe ser inserido no ficheiro de saída como un símbolo indefinido. Facer isto pode, por exemplo, activar a conexión de módulos adicionais de bibliotecas estándar. -u pode repetirse con diferentes argumentos de opción para introducir símbolos indefinidos adicionais. Esta opción é equivalente ao comando de script do vinculador "EXTERN".

-Ur

Para calquera cousa que non sexa C + + programas, esta opción é equivalente a -r : xera saída relocalizable --- isto é, un ficheiro de saída que pode servir como entrada a ld . Ao vincular programas de C ++, -Ur resolve as referencias aos constructores, a diferenza de -r . Non funciona para usar -Ur en ficheiros que estaban vinculados a -Ur ; Unha vez que a táboa do constructor foi construída, non se pode engadir a. Use -Ur só para a última ligazón parcial, e -r para os demais.

--unidade [= SECCIÓN ]

Crea unha sección de saída separada para cada sección de entrada que corresponde a SECCIÓN ou se falta o argumento de sección comodín opcional, para cada sección de entrada de orfo. Unha sección huérfana non é mencionada específicamente nun script con enlaces. Pode empregar esta opción varias veces na liña de comandos; Impide a fusión normal das seccións de entrada co mesmo nome, que reemplazan as atribucións da sección de saída nun script de ligazón.

-v

--versión

-V

Mostrar o número de versión para ld . A opción -V tamén lista as emulacións admitidas.

-x

--discardo todo

Elimina todos os símbolos locais.

-X

- discotecas-locais

Elimine todos os símbolos locais temporais. Para a maioría dos obxectivos, isto é todos os símbolos locais cuxos nomes comezan con L.

-e símbolo

--trace-symbol = símbolo

Imprime o nome de cada ficheiro vinculado no que aparece o símbolo . Esta opción pode ser dada varias veces. En moitos sistemas é necesario premer un guión baixo.

Esta opción é útil cando tes un símbolo indefinido na túa ligazón, pero non sei de onde vén a referencia.

-Y ruta

Engadir ruta ao camiño de busca da biblioteca por defecto. Esta opción existe para a compatibilidade de Solaris.

-z palabra clave

As palabras clave recoñecidas son "initfirst", "interpose", "loadfltr", "nodefaultlib", "nodelete", "nodlopen", "nodump", "now", "origin", "combreloc", "nocombreloc" e "nocopyreloc" ". As outras palabras clave son ignoradas pola compatibilidade con Solaris. "initfirst" marca o obxecto que se inicializa primeiro no tempo de execución antes de calquera outro obxecto. "interpose" marca o obxecto que interponse a táboa de símbolos antes de todos os símbolos, pero o executable primario. "loadfltr" marca o obxecto que os seus filtes procesaranse inmediatamente no tempo de execución. "nodefaultlib" marca o obxecto que a busca de dependencias deste obxecto ignorará. todas as rutas de busca de biblioteca predeterminadas. "nodelete" indica que o obxecto non se debe descargar no tempo de execución. "nodlopen" marca o obxecto non dispoñible para "dlopen". "nodump" marca que o obxecto non pode ser obxecto de dumping por "dldump". "agora" marca o obxecto coa ligazón de tempo de execución non perezosa. "orixe" marca que o obxecto pode conter $ ORIGIN. "defs" non permite os símbolos non definidos. "muldefs" permite varias definicións. "combreloc" combina varias seccións de reenvío e ordena-las para que o caché de busca de símbolos dinámicos sexa posible.

"nocombreloc" desactiva varias combinacións de reloc combinando. "nocopyreloc" desactiva a produción de copy relocs.

- ( arquivos -)

--Instart-group archives - en grupo

Os arquivos deben ser unha lista de arquivos . Poden ser nomes de ficheiros explícitos ou opcións -l .

Os arquivos especificados son buscados varias veces ata que non se crean novas referencias non definidas. Normalmente, só se busca un arquivo unha vez que se especifica na liña de comandos. Se un símbolo nese arquivo é necesario para resolver un símbolo indefinido referido por un obxecto nun arquivo que aparece máis adiante na liña de comandos, o vinculador non podería resolver esa referencia. Ao agrupar os arquivos, todos se buscan repetidamente ata que se solucionen todas as referencias posibles.

O uso desta opción ten un custo de rendemento significativo. É mellor empregar só cando hai referencias circulares forzables entre dous ou máis arquivos.

--accept-unknown-input-arch

--no-accept-unknown-input-arch

Indica ao ligazón que acepta ficheiros de entrada cuxa arquitectura non se pode recoñecer. A suposición é que o usuario sabe o que están facendo e deliberadamente quere vincular nestes ficheiros de entrada descoñecidos. Este foi o comportamento predeterminado do vinculador, antes da versión 2.14. O comportamento predeterminado da versión 2.14 en diante é rexeitar tales ficheiros de entrada e, polo tanto, a opción --accept-unknown-input-arch foi engadida para restaurar o comportamento anterior.

contrasinal de aviso

Esta opción é ignorada pola compatibilidade de SunOS .

-Bynamic

-dy

-call_shared

Ligazón contra bibliotecas dinámicas. Isto só é significativo nas plataformas para as que se admiten bibliotecas compartidas . Esta opción normalmente é o predeterminado en devanditas plataformas. As diferentes variantes desta opción son para a compatibilidade con varios sistemas. Pode empregar esta opción varias veces na liña de comandos: afecta á biblioteca á procura de -l opcións que a seguen.

-Grupo

Establece a marca "DF_1_GROUP" na entrada "DT_FLAGS_1" na sección dinámica. Isto fai que o ligador de tempo de execución poida manexar buscas neste obxecto e as súas dependencias só se executen dentro do grupo. --no-undefined está implícito. Esta opción só ten sentido nas plataformas ELF que soportan bibliotecas compartidas .

-Básica

-dn

-non_shared

-estacionaria

Non vinte contra bibliotecas compartidas. Isto só é significativo nas plataformas para as que se admiten bibliotecas compartidas. As diferentes variantes desta opción son para a compatibilidade con varios sistemas. Pode empregar esta opción varias veces na liña de comandos: afecta á biblioteca á procura de -l opcións que a seguen.

-Bsymbolic

Ao crear unha biblioteca compartida, úne as referencias aos símbolos globais á definición dentro da biblioteca compartida, se hai. Normalmente, é posible que un programa vinculado a unha biblioteca compartida anula a definición dentro da biblioteca compartida. Esta opción só ten sentido en ELFplatforms que admiten bibliotecas compartidas.

--check-sections

--no-check-sections

Solicita ao vinculador que non verifique os enderezos da sección despois de que eles foron asignados para ver se hai solapes. Normalmente, o vinculador realizará esta verificación e, se atopa calquera superposición, producirá mensaxes de erro axeitadas. O enlazador sabe e fai subvencións para as seccións en superposicións. O comportamento predeterminado pódese restaurar empregando o comando switch de liña --check-sections .

--cref

Saia unha táboa de referencia cruzada. Se se está a xerar un ficheiro do mapa do ligazón, a táboa de referencia cruzada imprímese no ficheiro do mapa. Se non, está impreso na saída estándar.

O formato da táboa é intencionalmente sinxelo, polo que pode ser procesado facilmente por un script se é necesario. Os símbolos están impresos, ordenados por nome. Para cada símbolo, aparece unha lista de nomes de ficheiro. Se o símbolo está definido, o primeiro ficheiro listado é a localización da definición. Os ficheiros restantes conteñen referencias ao símbolo.

--no-define-común

Esta opción inhibe a asignación de enderezos a símbolos comúns. O comando script "INHIBIT_COMMON_ALLOCATION" ten o mesmo efecto.

A opción --no-define-common permite desacoplar a decisión de asignar enderezos a símbolos comúns da elección do tipo de ficheiro de saída; Se non, un tipo de saída non reubicable forzas que asignan enderezos a símbolos comúns. O uso de --no-define-common permite que os símbolos comúns que se fan referencia desde unha biblioteca compartida sexan asignados enderezos só no programa principal. Isto elimina o espazo duplicado non usado na biblioteca compartida e tamén impide calquera posible confusión sobre a resolución dos duplicados erróneos cando existen moitos módulos dinámicos con rutas de busca especializadas para a resolución de símbolos de tempo de execución.

--defsym symbol = expresión

Crea un símbolo global no ficheiro de saída, que contén o enderezo absoluto indicado pola expresión . Pode empregar esta opción tantas veces como sexa necesario para definir varios símbolos na liña de comandos. Unha forma limitada de aritmética é compatible coa expresión neste contexto: pode dar unha constante hexadecimal ou o nome dun símbolo existente, ou usar "+" e "-" para engadir ou restar constantes ou símbolos hexadecimales. Se precisa máis expresións elaboradas, considere usar o idioma do comando linker dun script. Nota: non debe haber espazo branco entre o símbolo , o signo igual (`` = '') e expresión .

--demanxo [= estilo ]

--no-demangle

Estas opcións controlan se se demagran os nomes dos símbolos nas mensaxes de erro e outras saídas. Cando o vinculador se di a demangle, intenta presentar os nomes dos símbolos de forma lexible: elimina os guións baixos principais se son utilizados polo formato de ficheiro de obxecto e converte os nomes de símbolos manipulados de C ++ en nomes lexibles para os usuarios. Os diferentes compiladores teñen diferentes estilos de mangle. O argumento de estilo demangling opcional pódese empregar para escoller un estilo demangling apropiado para o seu compilador. O enlazador desdibujará de forma predeterminada se a variable de ambiente COLLECT_NO_DEMANGLE está configurada. Estas opcións poden usarse para substituír o valor predeterminado.

- ficheiro vinculador dinámico

Establece o nome do vinculador dinámico. Isto só é significativo cando se xeran executábeis ELF dinámicamente ligados. O vinculador dinámico por defecto normalmente é correcto; Non use isto a non ser que saiba o que está a facer.

-transmitidos-relocados

Esta opción só ten sentido cando se vincula o código PIC incorporado de MIPS, xerado pola opción -membedded-pic ao compilador e montaxe de GNU. Fai que o vinculador cree unha táboa que se poida usar no tempo de execución para reubicar os datos que se inicializaron estáticamente nos valores do punteiro. Vexa o código en testsuite / ld-empic para obter máis detalles.

- Advertencias fatal

Trata todas as advertencias como erros .

--force-exe-suffix

Asegúrese de que un ficheiro de saída teña un sufixo .exe.

Se un ficheiro de saída totalmente ligado con éxito non ten un sufixo " .exe " ou " .dll ", esta opción obriga ao vinculado a copiar o ficheiro de saída a un mesmo nome cun sufixo ".exe". Esta opción é útil cando se usan os ficheiros makefix Unix modificados nun servidor de Microsoft Windows, xa que algunhas versións de Windows non executarán unha imaxe a menos que acabe nun sufixo .exe.

--non-gc-sections

--gc-seccións

Habilita a recollida de lixo das seccións de entrada non utilizadas. Ignórase en obxectivos que non admiten esta opción. Esta opción non é compatible con -r , nin debería usarse con enlaces dinámicos. O comportamento predeterminado (de non realizar esta recollida de lixo ) pódese restaurar especificando --no-gc-seccións na liña de comandos.

- axuda

Imprimir un resumo das opcións da liña de comandos na saída e saída estándar.

--target-help

Imprimir un resumo de todas as opcións específicas de destino na saída e saída estándar.

-Ficheiro de mapas de mapa

Imprimir un mapa de ligazón no arquivo mapfile . Vexa a descrición da opción -M , arriba.

--no-keep-memory

ld normalmente optimiza a velocidade sobre o uso da memoria almacenando as táboas de símbolos de ficheiros de entrada na memoria. Esta opción dille a ld que optimice o uso da memoria, relectando as táboas de símbolos como sexa necesario. Isto pode ser necesario se ld queda sen espazo de memoria ao vincular un gran executable.

--no-indefinido

-z defs

Normalmente ao crear unha biblioteca compartida non simbólica, os símbolos non definidos están permitidos e deixados para ser resoltos polo cargador de tempo de execución. Estas opcións non permiten tales símbolos indefinidos.

--allow-multiple-definition

-z muldefs

Normalmente cando se define un símbolo varias veces, o vinculador informará dun erro fatal. Estas opcións permiten múltiples definicións e utilizarase a primeira definición.

--allow-shlib-undefined

Permitir símbolos non definidos en obxectos compartidos incluso cando --no-undefined está configurado. O resultado neto será que os símbolos indefinidos en obxectos normais aínda dispararán un erro, pero ignoraranse os símbolos non definidos nos obxectos compartidos. A implementación de no_undefined fai a suposición de que o enlazador de tempo de execución sufocará os símbolos indefinidos. Non obstante, hai polo menos un sistema (BeOS) onde os símbolos non definidos nas bibliotecas compartidas son normais xa que o kernel adxunta-los ao tempo de carga para seleccionar cal é a función máis axeitada para a arquitectura actual. IE selecciona dinámicamente unha función de membset axeitada. Ao parecer, tamén é normal que as bibliotecas compartidas de HPPA teñan símbolos indefinidos.

--no-undefined-version

Normalmente cando un símbolo ten unha versión non definida, o vinculador ignoraráo. Esta opción non permite os símbolos con versión non definida e emitirase un erro fatal.

--no-warn-mismatch

Normalmente ld dará un erro se tentar vincular ficheiros de entrada que non coinciden por algunha razón, quizais porque foron compilados para diferentes procesadores ou para distintas versións. Esta opción indica que debería permitir silenciosamente eses posibles erros. Esta opción só se debe usar con coidado, nos casos en que tomou algunha acción especial que asegure que os erros do vinculante sexan inadecuados.

--no-whole-archive

Desactiva o efecto da opción --archivo en branco para ficheiros de arquivo posteriores.

--noinhibit-exec

Conserva o ficheiro de saída executable sempre que se poida usar. Normalmente, o vinculador non producirá un ficheiro de saída se atopa erros durante o proceso da ligazón; sae sen escribir un ficheiro de saída cando emite ningún erro.

-nostdlib

Só busque os directorios da biblioteca explicitamente especificados na liña de comandos. Os cartafoles de bibliotecas especificados nos scripts de enlaces (incluídos os scripts do ligazón especificados na liña de comando) ignoráronse.

formato de saída de formato

ld pode estar configurado para soportar máis dun tipo de ficheiro de obxecto. Se o seu ld está configurado deste xeito, pode usar a opción --oformato para especificar o formato binario para o ficheiro de obxecto de saída. Mesmo cando ld está configurado para soportar formatos de obxectos alternativos, non adoita ter que especificalo, xa que ld debería configurarse para xerar como formato de saída o formato máis habitual en cada máquina. O formato de saída é unha cadea de texto, o nome dun formato particular soportado polas bibliotecas BFD. (Podes listar os formatos binarios dispoñibles con objdump -i ). O comando de script "OUTPUT_FORMAT" tamén pode especificar o formato de saída, pero esta opción anula-lo.

-máxica

Ignórase esta opción para a compatibilidade con Linux.

-Qy

Esta opción é ignorada pola compatibilidade con SVR4.

--relax

Unha opción con efectos dependentes da máquina. Esta opción só é compatible con algúns obxectivos.

En algunhas plataformas, a opción --relax realiza optimizacións globais que se fan posibles cando o vinculador resolve resolver no programa, como modos de enderezo de relaxación e sintetizando novas instrucións no ficheiro de obxecto de saída.

En algunhas plataformas, estas optimizaciones globais de tempo de ligazón poden facer imposible a depuración simbólica do executable resultante. Este é o caso da familia de procesadores Matsushita MN10200 e MN10300.

Nas plataformas onde non se admite, aceptarase --relax , pero ignorouse.

- retain-symbols-file nome de ficheiro

Manteña os símbolos que se enumeran no nome do ficheiro de arquivo , descartando os demais. O nome do ficheiro é simplemente un ficheiro plano, cun nome de símbolo por liña. Esta opción é especialmente útil en ambientes (como VxWorks) onde unha táboa de símbolos global grande acumúlase gradualmente, para conservar a memoria en tempo de execución.

--retain-symbols-file non descarta os símbolos indefinidos, nin os símbolos necesarios para os traslados.

Só pode especificar - retain-symbols-file unha vez na liña de comandos. Elimina -s e -S .

-rpath dir

Engade un directorio á rota de busca da biblioteca de tempo de execución. Isto úsase ao vincular un ELFexecutable con obxectos compartidos. Todos os argumentos -rpath son concatenados e pasados ​​ao ligazón de tempo de execución, que os usa para localizar obxectos compartidos en tempo de execución. A opción -rpath tamén se usa cando se localizan obxectos compartidos que son necesarios por obxectos compartidos incluídos explicitamente na ligazón; vexa a descrición da opción -rpath-link . Se -rpath non se usa cando se vincula un executábel ELF, empregarase o contido da variable de entorno "LD_RUN_PATH" se está definido.

A opción -rpath tamén se pode usar en SunOS. De forma predeterminada, en SunOS, o vinculador formará un parche de busca en tempo de execución de todas as opcións -L que se outorga. Se se usa unha opción -rpath , o camiño de busca en tempo de execución estará formado exclusivamente usando as opcións -rpath , ignorando as opcións -L . Isto pode ser útil cando se usa gcc, que engade moitas opcións -L que poden ser sistemas de ficheiros montados en NFS.

Para compatibilidade con outros conectores ELF, se a opción -R é seguida dun nome de directorio, no canto dun nome de ficheiro, trátase como a opción -rpath .

-rpath-link DIR

Cando se usa ELF ou SunOS, unha biblioteca compartida pode esixir outra. Isto ocorre cando unha ligazón "ld-shared" inclúe unha biblioteca compartida como un dos ficheiros de entrada.

Cando o vinculador atopa esa dependencia ao facer unha ligazón non compartida e non reubicable, intentará automaticamente localizar a biblioteca compartida requirida e incluíla na ligazón, se non está incluída de forma explícita. Neste caso, a opción -rpath-link especifica o primeiro conxunto de directorios a buscar. A opción -rpath-link pode especificar unha secuencia de nomes de directorios especificando unha lista de nomes separados por colóns ou aparecendo varias veces.

Esta opción debería ser utilizada con precaución xa que anula a ruta de busca que pode ser difícil compilar nunha biblioteca compartida. Neste caso é posible usar de forma involuntaria un camiño de busca distinto do que faría o enlazador en tempo de execución.

O vinculador usa os seguintes camiños de busca para localizar bibliotecas compartidas requiridas.

1.

Calquera directorio especificado polas opcións -rpath-link .

2.

Calquera directorio especificado polas opcións -rpath . A diferenza entre -rpath e -rpath-link é que os directorios especificados polas opcións -rpath están incluídos no executable e usados ​​no tempo de execución, mentres que a opción -rpath-link só é efectiva no momento da ligazón. É só para o vinculador nativo.

3.

Nun sistema ELF, se non se usaron as opcións -rpath e "rpath-link", busque no contido da variable de entorno "LD_RUN_PATH". É só para o vinculador nativo.

4.

En SunOS, se non se usou a opción -rpath , busque os directorios especificados con opcións -L .

5.

Para un enlazador nativo, os contidos da variable de entorno "LD_LIBRARY_PATH".

6.

Para un enlazador ELF nativo, procúrase a busca de bibliotecas compartidas que necesiten os directorios en "DT_RUNPATH" ou "DT_RPATH" dunha biblioteca compartida. As entradas "DT_RPATH" ignóranse se hai entradas "DT_RUNPATH".

7.

Os directorios predeterminados, normalmente / lib e / usr / lib .

8.

Para un enlazador nativo nun sistema ELF, se existe o ficheiro /etc/ld.so.conf , a lista de directorios atopados nese ficheiro.

Se non se atopa a biblioteca compartida necesaria, o vinculador emitirá un aviso e continuará coa ligazón.

-shared

-Bixible

Crea unha biblioteca compartida. Isto só é compatible con plataformas ELF, XCOFF e SunOS. En SunOS, o vinculador creará automaticamente unha biblioteca compartida se a opción -e non se usa e hai símbolos non definidos na ligazón.

--sort-común

Esta opción di a ld para ordenar os símbolos comúns por tamaño cando os coloca nas seccións de saída axeitadas. Primeiro veñen todos os símbolos de un byte, entón todos os dous bytes, despois todos os catro bytes, e despois todo o demais. Isto é evitar as lagoas entre símbolos debido a restricións de aliñamento.

--split-by-file [ size ]

Similar a --split-by-reloc pero crea unha nova sección de saída para cada ficheiro de entrada cando se alcanza o tamaño . O tamaño predeterminado é un tamaño de 1 se non se fornece.

--split-by-reloc [ contar ]

Tenta crear seccións extras no ficheiro de saída para que ningunha sección de saída única contén máis deslocalizacións de contas . Isto é útil cando se xeran grandes ficheiros relocáveis ​​para descargar en certos kernels en tempo real co formato de ficheiro do obxecto COFF; xa que COFFcannot representa máis de 65535 reubicacións nunha única sección. Teña en conta que isto non funcionará con formatos de ficheiros de obxectos que non admiten seccións arbitrarias. O vinculador non dividirá as seccións de entrada individuais para a redistribución, polo que se unha única sección de entrada contén máis de reconto deslocalizacións, unha sección de saída contén moitas deslocalizacións. o valor por defecto é de 32768.

--stats

Computa e exhibe estatísticas sobre o funcionamento do ligador, como o tempo de execución e o uso da memoria.

- formato tradicional

Para algúns obxectivos, a saída de ld é diferente de certo xeito da saída dalgún enlazador existente. Este cambio chama ld para usar o formato tradicional no seu lugar.

Por exemplo, en SunOS, ld combina entradas duplicadas na táboa de cadros de símbolos. Isto pode reducir o tamaño dun ficheiro de saída cunha información de depuración completa en máis de 30 por cento. Desafortunadamente, o programa "dbx" de SunOS non pode ler o programa resultante ("gdb" non ten problemas). O interruptor de formato tradicional especifica que non se combinan as entradas duplicadas.

--section-start sectionname = org

Localice unha sección no ficheiro de saída na dirección absoluta dada pola org . Podes usar esta opción cantas veces sexa necesario para atopar varias seccións na liña de comandos. org debe ser un enteiro hexadecimal único; para compatibilidade con outros ligadores, pode omitir o 0x principal asociado normalmente con valores hexadecimales. Nota: non debe haber espazo en branco entre o nome da sección , o símbolo igual (`` = '') e org .

-Tbss org

-Tdata org

-Txt org

Utiliza org como o enderezo de inicio --- respectivamente --- o "bss", "datos" ou o segmento "texto" do ficheiro de saída. org debe ser un enteiro hexadecimal único; para compatibilidade con outros ligadores, pode omitir o 0x principal asociado normalmente con valores hexadecimales.

--dll-verbose

--verbose

Mostrar o número de versión para ld e listar as emulacións do vinculador compatibles. Mostrar que ficheiros de entrada poden e non poden ser abertos. Mostrar a ligazón do script que usa o enlazador.

--version-script = version-script file

Especifique o nome dunha secuencia de comandos de versión para o vinculador. Normalmente úsase cando se crean bibliotecas compartidas para especificar información adicional sobre a herdanza da versión para a biblioteca que se está a crear. Esta opción só ten sentido nas plataformas ELF que soportan bibliotecas compartidas.

-warn-común

Avisa cando se combina un símbolo común con outro símbolo común ou cunha definición de símbolo. Os enlazadores Unix permiten esta práctica un tanto descuidada, pero os enlazadores noutros sistemas operativos non o fan. Esta opción permítelle atopar problemas potenciais para combinar símbolos globais. Desafortunadamente, algunhas bibliotecas C usan esta práctica, así que pode obter algunhas advertencias sobre símbolos nas bibliotecas e nos seus programas.

Existen tres tipos de símbolos globais, ilustrados aquí por exemplos de C:

int i = 1;

Unha definición, que vai na sección de datos inicializada do ficheiro de saída.

extern int i;

Unha referencia non definida, que non asigna espazo. Debe haber unha definición ou un símbolo común para a variable nalgún lugar.

int i;

Un símbolo común. Se só hai (un ou máis) símbolos comúns para unha variable, vai na área de datos non inicializada do ficheiro de saída. O vinculador fusiona varios símbolos comúns para a mesma variable nun único símbolo. Se son de tamaños diferentes, escolle o tamaño máis grande. O vinculador converte un símbolo común nunha declaración, se hai unha definición da mesma variable.

A opción --warn-common pode producir cinco tipos de advertencias. Cada advertencia consta dun par de liñas: a primeira describe o símbolo que se atopa e o segundo describe o símbolo anterior atopado co mesmo nome. Un ou ambos os dous símbolos serán un símbolo común.

1.

Volvendo un símbolo común nunha referencia, porque xa existe unha definición para o símbolo.

(): aviso: común de « 'substituído por definición (): aviso: definido aquí

2.

Volvendo un símbolo común nunha referencia, porque se atopa unha definición posterior para o símbolo. Isto é o mesmo que o caso anterior, agás que os símbolos se atopan nunha orde diferente.

(): advertencia: definición de ` 'reemplazando a común (): advertencia: é común aquí

3.

Fusionando un símbolo común cun anterior símbolo común de mesma dimensión.

(): advertencia: múltiple común de ` ' (): aviso: o anterior é común aquí

4.

Fusionando un símbolo común cun anterior símbolo común máis grande.

(): aviso: común de ` 'reemplazado por común (): advertencia: maior común está aquí

5.

Fusionando un símbolo común cun anterior símbolo común máis pequeno. Isto é o mesmo que o caso anterior, agás que os símbolos se atopan nunha orde diferente.

(): aviso: común de ` 'reemplazando a menor común (): advertencia: menor común é aquí

constructores en branco

Advertencia se se usan construtores globais. Isto só é útil para algúns formatos de ficheiro de obxectos. Para formatos como COFF ou ELF, o vinculador non pode detectar o uso de constructores globais.

--warn-multiple-gp

Avisar se hai que esixir varios valores de punteiro global no ficheiro de saída . Isto só é significativo para certos procesadores, como o Alpha. En concreto, algúns procesadores colocan constantes de gran valor nunha sección especial. Un rexistro especial (o punteiro global) sitúase no medio desta sección, de xeito que as constantes pódense cargar de forma eficiente a través dun modo de direccionamento relativo de rexistro base. Dado que o desprazamento no modo relativo de rexistro basee é fixo e relativamente pequeno (por exemplo, 16 bits), isto limita o tamaño máximo do pool constante. Así, en grandes programas, moitas veces é necesario usar múltiples valores de punteiro global para poder abordar todas as constantes posibles. Esta opción fai que se emita unha advertencia cando se produza este caso.

unha vez

Avisar só unha vez por cada símbolo indefinido, en vez de unha por cada módulo que o fai referencia.

--warn-section-align

Advertencia se a dirección dunha sección de saída cambia debido ao aliñamento. Normalmente, o aliñamento será definido por unha sección de entrada. A dirección só se cambiará se non se especifica explícitamente; é dicir, se o comando "SECCIONES" non especifica un enderezo de inicio para a sección.

- todo o arquivo

Para cada arquivo mencionado na liña de comandos despois da opción --whole-archive , inclúa todos os ficheiros de obxectos no arquivo da ligazón, en lugar de buscar o arquivo para os ficheiros de obxecto requiridos. Normalmente úsase para converter un ficheiro de arquivo nunha biblioteca compartida, obrigando a que cada obxecto se inclúa na biblioteca compartida resultante. Esta opción pode usarse máis dunha vez.

Dúas notas cando se usa esta opción de gcc: Primeiro, o gcc non sabe sobre esta opción, polo que ten que usar -Wl, -whole-archive . En segundo lugar, non se esqueza de usar -Wl, -no-whole-archive despois da súa lista de arquivos, porque gcc engadirá a súa propia lista de arquivos á súa ligazón e quizais non queira que esta bandeira afecte tamén aqueles.

- símbolo de correa

Use unha función envolvente para o símbolo . Calquera referencia non definida ao símbolo resolverase "__ wrap_symbol". Calquera referencia non definida para "__real_symbol" resolverase co símbolo .

Isto pódese empregar para proporcionar un envoltorio para unha función do sistema. A función envolvente debería chamarse "__wrap_symbol". Se desexa chamar á función do sistema, debería chamar "__ real_symbol".

Aquí tes un exemplo trivial:

baleiro * __wrap_malloc (int c) {printf ("malloc chamado con% ld \ n", c); devolver __real_malloc (c); }

Se ligas outro código con este ficheiro usando --wrap malloc , entón todas as chamadas a "malloc" chamarán á función "__wrap_malloc" no seu lugar. A chamada a "__real_malloc" en "__wrap_malloc" chamará á función real "malloc".

Tamén pode querer proporcionar unha función "__real_malloc", de xeito que as ligazóns sen a opción --wrap terán éxito. Se fai isto, non debe poñer a definición de "__ real_malloc" no mesmo ficheiro que "__wrap_malloc"; Se o fas, o ensamblador pode resolver a chamada antes de que o enlace teña a oportunidade de envolvela a "malloc".

--enable-new-dtags

--disable-new-dtags

Este ligazón pode crear as novas etiquetas dinámicas en ELF. Pero os sistemas máis antigos de ELF poden non entendelos. Se especifica --enable-new-dtags , as etiquetas dinámicas crearanse segundo o necesario. Se especifica --disable-new-dtags , non se crearán novas etiquetas dinámicas. Por defecto, as novas etiquetas dinámicas non se crean. Ten en conta que esas opcións só están dispoñibles para os sistemas de calidade avanzada.

O enchufe PE i386 admite a opción compartida , o que fai que a saída sexa unha biblioteca ligada dinámicamente (DLL) en lugar dun executable normal. Debe indicar a saída "* .dll" cando use esta opción. Ademais, o vinculador soporta totalmente os ficheiros estándar "* .def", que se poden especificar na liña de comando do vinculador como un ficheiro de obxecto (de feito, debe preceder aos arquivos que exporta símbolos de, para garantir que se conecten, como un ficheiro de obxecto normal).

Ademais das opcións comúns a todos os obxectivos, o conector PE de i386 admite opcións de liña de comandos adicionales que son específicas do obxectivo do PE de i386. As opcións que toman valores poden estar separadas dos seus valores mediante un espazo ou un sinal igual.

--add-stdcall-alias

Se se fornece, os símbolos cun sufijo stdcall (@ nn ) exporense como está e tamén co sufijo desposuído.

--base-arquivo de ficheiro

Use o ficheiro como o nome dun ficheiro no que gardar os enderezos base de todas as deslocalizacións necesarias para xerar DLL con dlltool .

--dll

Crea unha DLL no canto dun executable normal. Tamén pode usar -shared ou especificar unha "BIBLIOTECA" nun determinado ficheiro ".def".

--enable-stdcall-fixup

--disable-stdcall-fixup

Se a ligazón atopa un símbolo que non pode resolver, tentará facer "linking fuzzy" buscando outro símbolo definido que difire só no formato do nome de símbolo (cdecl vs stdcall) e resolverá ese símbolo enlazando ao partido. Por exemplo, o símbolo indefinido "_foo" pode estar ligado á función "_foo @ 12" ou o símbolo indefinido "_bar @ 16" pode estar ligado á función "_bar". Cando o vinculador fai isto, imprime unha advertencia, xa que normalmente non debería vincular, pero ás veces importar bibliotecas xeradas a partir de dll de terceiros pode que necesite que esta función sexa utilizable. Se especifica --enable-stdcall-fixup , esta función está totalmente habilitada e as advertencias non están impresas. Se especifica --disable-stdcall-fixup , esta característica está desactivada e tales desacordos son considerados erros.

--export-all-symbols

Se se fornece, o DLL exporá todos os símbolos globais nos obxectos utilizados para construír unha DLL. Teña en conta que isto é o valor predeterminado se non hai outros símbolos exportados. Cando os símbolos se exportan explícitamente a través de ficheiros DEF ou exportados implícitamente a través de atributos de función, o valor predeterminado non é exportar nada se non se dá esta opción. Teña en conta que os símbolos "DllMain @ 12", "DllEntryPoint @ 0", "DllMainCRTStartup @ 12" e "impure_ptr" non se exporán automaticamente. Ademais, os símbolos importados de outras DLL non serán reexportados, nin os símbolos que especifican a disposición interna do DLL, como os que comezan por "_head_" ou que terminan con "_iname". Ademais, non se exporán símbolos de "libgcc", "libstd ++", "libmingw32" ou "crtX.o". Os símbolos cuxos nomes comezan con "__rtti_" ou "__builtin_" non serán exportados, para axudar con DLL de C ++. Finalmente, hai unha extensa lista de símbolos cygwin-privados que non se exportan (obviamente, isto aplícase ao crear DLL para obxectivos cygwin).

Estes excluídos por cygwin son: "_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 "e" environ ".

--exclamación- símbolo de símbolos , ...

Especifica unha lista de símbolos que non deben ser exportados automaticamente. Os nomes de símbolos poden estar delimitados por comas ou colóns.

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

Especifica unha lista de bibliotecas de arquivo das que non se deben exportar automáticamente os símbolos. Os nomes das bibliotecas poden estar delimitados por comas ou colóns. A especificación de "--exclude-libs ALL" exclúe os símbolos en todas as bibliotecas de arquivo da exportación automática. Os símbolos explicitamente listados nun ficheiro .def aínda se exportan, independentemente desta opción.

- aliñamento de ficheiro

Especifique o aliñamento do ficheiro. As seccións do ficheiro sempre comezarán nos desprazamentos de ficheiros que son múltiplos deste número. Esta predeterminouse en 512.

- reserva de salto

- reserva , comete

Especifique a cantidade de memoria para reservar (e opcionalmente cometer) para ser usada como monte para este programa. O valor predeterminado é 1Mb reservado, 4K comprometido.

--image-base value

Use o valor como enderezo base do programa ou dll. Esta é a localización de memoria máis baixa que se usará cando se cargue o programa ou o dll. Para reducir a necesidade de reubicar e mellorar o rendemento dos seus dlls, cada un debería ter un enderezo de base único e non se superpoñer a outros dlls. O valor predeterminado é 0x400000 para executábeis e 0x10000000 para dlls.

--que atope

Se se fornece, os sufixos stdcall (@ nn ) serán eliminados dos símbolos antes de que se exporten.

--major-imaxe- valor da versión

Estabelece o maior número de `` imaxe versión ''. Predeterminados a 1.

--major-os- valor de versión

Estabelece o maior número da versión `` os ''. Predeterminados a 4.

--major-subsistema- valor da versión

Estabelece o maior número da `` subsistema versión ''. Predeterminados a 4.

--minor-imaxe- valor de versión

Establece o menor número da `` imaxe versión ''. Predeterminados a 0.

--minor-os-version value

Establece o menor número da versión `` os ''. Predeterminados a 0.

--minor-subsistema- valor da versión

Estabelece o menor número da `` subsistema versión ''. Predeterminados a 0.

--output-def file

O vinculador creará o arquivo que contén un ficheiro DEF correspondente ao DLL que o ligador está a xerar. Este ficheiro DEF (que debería chamarse "* .def") pode usarse para crear unha biblioteca de importación con "dlltool" ou pode usarse como referencia para os símbolos exportados de forma automática ou implícita.

--out-implib file

O vinculador creará o arquivo que contén unha lib de importación correspondente á DLL que o ligador está a xerar. Esta lib de importación (que se debería chamar "* .dll.a" ou "* .a" pode usarse para vincular os clientes contra a DLL xerada; este comportamento permite saltar un paso de creación da biblioteca de importación "dlltool" por separado.

--enable-auto-image-base

Elixa automaticamente a base de imaxes para DLL, a menos que se especifique mediante o argumento "--image-base". Usando un hash xerado a partir do dllname para crear bases de imaxes únicas para cada DLL, as colisións en memoria e as deslocalizacións que poden demorar a execución do programa son evitadas.

--disable-auto-image-base

Non xere automaticamente unha base de imaxes única. Se non hai ningunha base de imaxes especificada polo usuario ("--image-base") entón usa a plataforma predeterminada.

--dll-search-prefix string

Ao vincular dinámicamente a un dll sen unha biblioteca de importación, busque " .dll" en lugar de "lib .dll". Este comportamento permite unha fácil distinción entre as DLL construídas para as varias `` subplataforms '': nativa, cygwin, uwin, pw, etc. Por exemplo, as DLL de cygwin normalmente usan "--dll-search-prefix = cyg".

--enable-auto-import

Faga a conexión sofisticada de "_symbol" a "__imp__symbol" para importacións de DAT desde DLL e cree os símbolos de thunking necesarios ao crear as bibliotecas de importación con eses DATAexports. Isto xeralmente "funcionará" --- pero ás veces pode ver esta mensaxe:

"variable '' non se pode importar automáticamente. Lea a documentación de" --enable-auto-import "de ld para máis detalles."

Esta mensaxe ocorre cando algunha (sub) expresión accede a unha dirección que finalmente dá a suma de dúas constantes (as táboas de importación Win32 só permiten unha). As instancias onde isto pode ocorrer inclúen acceso a campos de membros de variables de estrutura importadas dun DLL, así como a utilización dun índice constante nunha variábel de matriz importada dun DLL. Calquera variable multiword (arrays, structs, longa duración, etc.) pode desencadear esta condición de erro. Non obstante, independentemente do tipo de datos exacto da variable exportadora ofensiva, ld sempre detectará, emitirá a advertencia e sairá.

Hai varias formas de solucionar esta dificultade, independentemente do tipo de datos da variable exportada:

Unha maneira é usar o conmutador -enable-runtime-pseudo-reloc. Isto deixa a tarefa de axustar as referencias no seu código de cliente para o entorno de tempo de execución, polo que este método funciona só cando o ambiente de execución soporta esta característica.

Unha segunda solución é forzar unha das "constantes" a ser unha variable --- que é, descoñecida e non-optimizable ao momento de compilación. Para as matrices, hai dúas posibilidades: a) facer o indexee (o enderezo da matriz) unha variable, ou b) facer que o índice "constante" sexa unha variable. Así:

extern tipo extern_array []; extern_array [1] -> {tipo volátil * t = extern_array; t [1]}

ou

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

Para as estruturas (e a maioría dos outros tipos de datos de varias palabras) a única opción é facer a propia estrutura (ou a longa, ou a ...) variable:

extern struct s extern_struct; extern_struct.field -> {struct volátil s * t = & extern_struct; t> campo}

ou

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

Un terceiro método para tratar con esta dificultade é abandonar a "importación automática" do símbolo ofensivo e marcala con "__declspec (dllimport)". Non obstante, na práctica, isto require o uso de compilación #defines para indicar se está a construír unha DLL, crear un código de cliente que se conectará á DLL ou simplemente crear / vincular a unha biblioteca estática. Ao facer a elección entre os distintos métodos para resolver o problema de "enderezo directo con compensación constante", debes considerar o uso típico do mundo real:

Orixinal:

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

Solución 1:

--foo.h external int arr []; --foo.c #include "foo.h" void main (int argc, char ** argv) {/ * Esta solución é para win32 e cygwin; non "optimizar" * / volátil int * parr = arr; printf ("% d \ n", parr [1]); }

Solución 2:

--foo.h / * Nota: asúmese a autoexportación (non __declspec (dllexport)) * / #if (definido (_WIN32) || definido (__ CYGWIN__)) && (regulado (FOO_BUILD_DLL) || definido (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]); }

Unha cuarta forma de evitar este problema é volver codificar a súa biblioteca para usar unha interface funcional en lugar de unha interface de datos para as variables ofensivas (por exemplo, set_foo () e get_foo () funcións de acceso ).

--disable-auto-import

Non intente facer enlaces sofisticados de "_symbol" a "__imp__symbol" para DATAimports desde DLL.

--enable-runtime-pseudo-reloc

Se o seu código contén expresións descritas na sección --enable-auto-import, isto é, DATAimports de DLL con compensación non cero, este conmutador creará un vector de "pseudo deslocalizacións de tempo de execución" que pode ser usado polo contorno de tempo de execución para axustar as referencias. a tales datos no seu código de cliente.

--disable-runtime-pseudo-reloc

Non cree pseudo deslocalizacións para importacións de DATAS sen compensar sen cero desde DLL. Este é o predeterminado.

--enable-extra-pe-debug

Mostrar información de depuración adicional relacionada co procesamento de símbolos de importación automática.

- aliñamento de sección

Estabelece o aliñamento da sección. As seccións da memoria sempre comezarán nas direccións que son un múltiplo deste número. Predeterminados a 0x1000.

- reserva de pila

- reserva de escaque , comete

Especifique a cantidade de memoria para reservar (e opcionalmente cometer) para ser usado como pila para este programa. O valor predeterminado é 2Mb reservado, 4K comprometido.

--subsistema que

--subsistema que : maior

--subsistema que : maior . menor

Especifica o subsistema baixo o que se executará o programa. Os valores legais para os cales son "nativos", "Windows", "consola" e "posix". Tamén pode configurar opcionalmente a versión do subsistema tamén.

Importante: use o comando man ( % home ) para ver como se usa un comando na súa computadora particular.