Manuales para la línea de comandos

Man » Manual de ld en línea - documentación detallada en línea para la página de manual de ld

🌍
ld - El enlazador GNU

SINOPSIS

ld [opciones] archivo_objeto ...

DESCRIPCIÓN

ld combina varios archivos de objeto y archivos, reubica sus datos y relaciona las referencias de símbolos. Normalmente, el último paso en la compilación de un programa es ejecutar ld.

ld acepta archivos de lenguaje de comandos de enlazador escritos en un superconjunto de la sintaxis del lenguaje de comandos de editor de enlaces de AT&T, para proporcionar un control explícito y total sobre el proceso de enlazado.

Esta página de manual no describe el lenguaje de comandos; consulte la entrada de ld en "info" para obtener detalles completos sobre el lenguaje de comandos y otros aspectos del enlazador GNU.

Esta versión de ld utiliza las bibliotecas BFD de propósito general para operar en archivos de objeto. Esto permite a ld leer, combinar y escribir archivos de objeto en muchos formatos diferentes, por ejemplo, COFF o "a.out". Se pueden enlazar diferentes formatos para producir cualquier tipo de archivo de objeto disponible.

Además de su flexibilidad, el enlazador GNU es más útil que otros enlazadores al proporcionar información de diagnóstico. Muchos enlazadores abandonan la ejecución inmediatamente al encontrar un error; siempre que sea posible, ld continúa ejecutándose, lo que le permite identificar otros errores (o, en algunos casos, obtener un archivo de salida a pesar del error).

El enlazador GNU ld está diseñado para cubrir una amplia gama de situaciones y ser lo más compatible posible con otros enlazadores. Como resultado, tiene muchas opciones para controlar su comportamiento.

OPCIONES

El enlazador admite una gran cantidad de opciones de línea de comandos, pero en la práctica, pocas de ellas se utilizan en un contexto determinado. Por ejemplo, un uso frecuente de ld es enlazar archivos de objeto Unix estándar en un sistema Unix estándar compatible. En dicho sistema, para enlazar un archivo "hello.o":

ld -o <salida> /lib/crt0.o hello.o -lc

Esto le indica a ld que produzca un archivo llamado salida como resultado de enlazar el archivo "/lib/crt0.o" con "hello.o" y la biblioteca "libc.a", que se obtendrá de los directorios de búsqueda estándar. (Consulte la discusión de la opción -l a continuación).

Algunas de las opciones de línea de comandos para ld se pueden especificar en cualquier punto de la línea de comandos. Sin embargo, las opciones que se refieren a archivos, como -l o -T, hacen que el archivo se lea en el punto en que la opción aparece en la línea de comandos, en relación con los archivos de objeto y otras opciones de archivo. Repetir las opciones que no son de archivo con un argumento diferente tendrá un efecto posterior o anulará las apariciones anteriores (aquellas que están más a la izquierda en la línea de comandos) de esa opción. Las opciones que se pueden especificar de manera significativa más de una vez se indican en las descripciones a continuación.

Los argumentos que no son opciones son archivos de objeto o archivos que se van a enlazar. Pueden seguir, preceder o mezclarse con las opciones de la línea de comandos, excepto que un argumento de archivo de objeto no se puede colocar entre una opción y su argumento.

Normalmente, el enlazador se invoca con al menos un archivo objeto, pero puede especificar otras formas de archivos de entrada binarios utilizando -l, -R y el lenguaje de comandos del script. Si no se especifica ningún archivo de entrada binario, el enlazador no produce ninguna salida y emite el mensaje No input files.

Si el enlazador no puede reconocer el formato de un archivo objeto, asumirá que es un script del enlazador. Un script especificado de esta manera complementa el script principal del enlazador utilizado para el enlace (ya sea el script del enlazador predeterminado o el especificado mediante el uso de -T). Esta función permite al enlazador vincularse a un archivo que parece ser un objeto o un archivo, pero que en realidad solo define algunos valores de símbolos o utiliza "INPUT" o "GROUP" para cargar otros objetos. Especificar un script de esta manera simplemente complementa el script principal del enlazador, con los comandos adicionales colocados después del script principal; utilice la opción -T para reemplazar por completo el script del enlazador predeterminado, pero tenga en cuenta el efecto del comando "INSERT".

Para las opciones cuyos nombres son una sola letra, los argumentos de la opción deben seguir la letra de la opción sin espacio en blanco o proporcionarse como argumentos separados inmediatamente después de la opción que los requiere.

Para las opciones cuyos nombres tienen varias letras, se puede utilizar una o dos barras bajas delante del nombre de la opción; por ejemplo, -trace-symbol y --trace-symbol son equivalentes. Tenga en cuenta que existe una excepción a esta regla. Las opciones de varias letras que comienzan con una letra 'o' en minúscula solo pueden precederse con dos barras bajas. Esto es para reducir la confusión con la opción -o. Por ejemplo, -omagic establece el nombre del archivo de salida en magic, mientras que --omagic establece la marca NMAGIC en la salida.

Los argumentos de las opciones de varias letras deben estar separados del nombre de la opción por un signo igual o proporcionarse como argumentos separados inmediatamente después de la opción que los requiere. Por ejemplo, --trace-symbol foo y --trace-symbol=foo son equivalentes. Se aceptan abreviaturas únicas de los nombres de las opciones de varias letras.

Tenga en cuenta que si el enlazador se invoca indirectamente, a través de un controlador de compilador (por ejemplo, gcc), todas las opciones de la línea de comandos del enlazador deben tener el prefijo -Wl (o lo que sea apropiado para el controlador de compilador en particular), como en este ejemplo:

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

Esto es importante, porque de lo contrario, el programa del controlador del compilador puede descartar silenciosamente las opciones del enlazador, lo que da como resultado un enlace incorrecto. También puede surgir confusión al pasar opciones que requieren valores a través de un controlador, ya que el uso de un espacio entre la opción y el argumento actúa como un separador y hace que el controlador pase solo la opción al enlazador y el argumento al compilador. En este caso, es más sencillo utilizar las formas unidas de las opciones de una y varias letras, como:


gcc foo.o bar.o -Wl,-eENTRY -Wl,-Map=a.map

Aquí hay una tabla de los modificadores de línea de comandos genéricos aceptados por el enlazador GNU:

@archivo

Lee las opciones de línea de comandos desde un archivo. Las opciones leídas se insertan en lugar de la opción @archivo original. Si el archivo no existe o no se puede leer, la opción se tratará literalmente y no se eliminará.

Las opciones en el archivo están separadas por espacios en blanco. Un espacio en blanco se puede incluir en una opción encerrando toda la opción entre comillas simples o dobles. Cualquier carácter (incluido una barra invertida) se puede incluir anteponiendo el carácter que se va a incluir con una barra invertida. El archivo puede contener opciones @archivo adicionales; cualquier opción de este tipo se procesará de forma recursiva.

-a palabra clave

Esta opción se admite para la compatibilidad con HP/UX. El argumento palabra clave debe ser uno de los siguientes: archivo, compartido o predeterminado. -aarchivo es funcionalmente equivalente a -Bstatic, y las otras dos palabras clave son funcionalmente equivalentes a -Bdynamic. Esta opción se puede usar cualquier número de veces.

--audit AUDITLIB

Agrega AUDITLIB a la entrada "DT_AUDIT" de la sección dinámica. AUDITLIB no se verifica para verificar su existencia, ni usará el DT_SONAME especificado en la biblioteca. Si se especifica varias veces, "DT_AUDIT" contendrá una lista separada por dos puntos de interfaces de auditoría que se utilizarán. Si el enlazador encuentra un objeto con una entrada de auditoría mientras busca bibliotecas compartidas, agregará una entrada "DT_DEPAUDIT" correspondiente en el archivo de salida. Esta opción solo tiene sentido en las plataformas ELF que admiten la interfaz rtld-audit.

-b formato-de-entrada
--formato=formato-de-entrada

ld se puede configurar para admitir más de un tipo de archivo de objeto. Si su ld está configurado de esta manera, puede usar la opción -b para especificar el formato binario para los archivos de objeto de entrada que siguen a esta opción en la línea de comandos. Incluso cuando ld está configurado para admitir formatos de objeto alternativos, normalmente no necesita especificar esto, ya que ld debería configurarse para esperar como formato de entrada predeterminado el formato más común en cada máquina. formato-de-entrada es una cadena de texto, el nombre de un formato específico admitido por las bibliotecas BFD. (Puede enumerar los formatos binarios disponibles con objdump -i).

Es posible que desee usar esta opción si está enlazando archivos con un formato binario inusual. También puede usar -b para cambiar los formatos explícitamente (al enlazar archivos de objeto con diferentes formatos) incluyendo -b formato-de-entrada antes de cada grupo de archivos de objeto en un formato en particular.

El formato predeterminado se toma de la variable de entorno "GNUTARGET".

También puede definir el formato de entrada desde un script, utilizando el comando "TARGET";

-c archivo-de-comandos-MRI
--mri-script=archivo-de-comandos-MRI

Para la compatibilidad con los enlazadores producidos por MRI, ld acepta archivos de script escritos en un lenguaje de comandos alternativo y restringido, que se describe en la sección Archivos de script compatibles con MRI de la documentación de GNU ld. Introduzca los archivos de script MRI con la opción -c; use la opción -T para ejecutar scripts de enlazador escritos en el lenguaje de script de propósito general de ld. Si MRI-cmdfile no existe, ld lo busca en los directorios especificados por cualquier opción -L.


-d
-dc
-dp Estas tres opciones son equivalentes; se admiten múltiples formas para la compatibilidad con otros
enlazadores. Asignan espacio a los símbolos comunes incluso si se especifica un archivo de salida relocatable
(con -r). El comando de script "FORCE_COMMON_ALLOCATION" tiene el mismo efecto.

--depaudit AUDITLIB
-P AUDITLIB
Agrega AUDITLIB a la entrada "DT_DEPAUDIT" de la sección dinámica. AUDITLIB no se verifica
para comprobar su existencia, ni utilizará el DT_SONAME especificado en la biblioteca. Si se especifica
varias veces, "DT_DEPAUDIT" contendrá una lista separada por dos puntos de interfaces de auditoría
para usar. Esta opción solo tiene sentido en las plataformas ELF que admiten la interfaz rtld-audit.
La opción -P se proporciona para la compatibilidad con Solaris.

--enable-linker-version
Habilita la directiva de script del enlazador "LINKER_VERSION", descrita en Datos de la sección de salida.
Si esta directiva se usa en un script del enlazador y esta opción se ha habilitado, se insertará una
cadena que contiene la versión del enlazador en el punto actual.

Nota: esta ubicación de esta opción en la línea de comandos del enlazador es significativa. Solo
afectará a los scripts del enlazador que se encuentren después de él en la línea de comandos, o que
estén integrados en el enlazador.

--disable-linker-version
Deshabilita la directiva de script del enlazador "LINKER_VERSION", de modo que no inserte una cadena
de versión. Esta es la configuración predeterminada.

--enable-non-contiguous-regions
Esta opción evita generar un error si una sección de entrada no se ajusta a una sección de salida
coincidente. El enlazador intenta asignar la sección de entrada a las secciones de salida coincidentes
siguientes y genera un error solo si ninguna sección de salida es lo suficientemente grande. Esto es
útil cuando hay disponibles varias regiones de memoria no contiguas y la sección de entrada no requiere
una en particular. El orden en que se evalúan las secciones de entrada no cambia, por ejemplo:

MEMORY {
MEM1 (rwx) : ORIGIN = 0x1000, LENGTH = 0x14
MEM2 (rwx) : ORIGIN = 0x1000, LENGTH = 0x40
MEM3 (rwx) : ORIGIN = 0x2000, LENGTH = 0x40
}
SECTIONS {
mem1 : { *(.data.*); } > MEM1
mem2 : { *(.data.*); } > MEM2
mem3 : { *(.data.*); } > MEM3
}

con secciones de entrada:
.data.1: tamaño 8
.data.2: tamaño 0x10
.data.3: tamaño 4

resulta en que .data.1 se asigna a mem1, y .data.2 y .data.3
se asignan a mem2, aunque .data.3 podría caber en mem3.

Esta opción es incompatible con las instrucciones INSERT porque cambia la forma en que se asignan las
secciones de entrada a las secciones de salida.

--enable-non-contiguous-regions-warnings
Esta opción habilita las advertencias cuando "--enable-non-contiguous-regions" permite posibles
coincidencias inesperadas en el mapeo de secciones, lo que podría provocar que se descarte una sección
en silencio en lugar de producir un error porque no se ajusta a ninguna región de salida.

-e entrada
--entry=entrada
Utiliza `entrada` como el símbolo explícito para comenzar la ejecución de tu programa, en lugar del
punto de entrada predeterminado. Si no existe un símbolo llamado `entrada`, el enlazador intentará
interpretar `entrada` como un número y utilizará ese valor como la dirección de entrada (el número
se interpretará en base 10; puedes usar un prefijo `0x` para base 16, o un prefijo `0` para base 8).
Para i386 PE, `entrada` también puede ser el nombre de la función original (sin el guion bajo
inicial y/o el sufijo `stdcall @número` cuando corresponda).

--exclude-libs lib,lib,...
Especifica una lista de bibliotecas de archivo de las cuales los símbolos no deben exportarse
automáticamente. Los nombres de las bibliotecas pueden estar delimitados por comas o dos puntos.
Especificar `--exclude-libs ALL` excluye los símbolos de todas las bibliotecas de archivo de la
exportación automática. Esta opción solo está disponible para el puerto i386 PE del enlazador y
para los puertos dirigidos a ELF. Para i386 PE, los símbolos listados explícitamente en un archivo
`.def` siguen siendo exportados, independientemente de esta opción. Para los puertos dirigidos a
ELF, los símbolos afectados por esta opción se tratarán como ocultos.

--exclude-modules-for-implib módulo,módulo,...
Especifica una lista de archivos de objeto o miembros de archivo, de los cuales los símbolos no
deben exportarse automáticamente, pero que deben copiarse en su totalidad en la biblioteca de
importación que se está generando durante el enlazamiento. Los nombres de los módulos pueden
estar delimitados por comas o dos puntos y deben coincidir exactamente con los nombres de archivo
utilizados por `ld` para abrir los archivos; para los miembros de archivo, esto es simplemente el
nombre del miembro, pero para los archivos de objeto, el nombre listado debe incluir y coincidir
precisamente con cualquier ruta utilizada para especificar el archivo de entrada en la línea de
comandos del enlazador. Esta opción solo está disponible para el puerto i386 PE del enlazador. Los
símbolos listados explícitamente en un archivo `.def` siguen siendo exportados, independientemente
de esta opción.

-E
--export-dynamic
--no-export-dynamic
Al crear un ejecutable enlazado dinámicamente, usar la opción `-E` o la opción `--export-dynamic`
hace que el enlazador agregue todos los símbolos a la tabla de símbolos dinámicos. La tabla de
símbolos dinámicos es el conjunto de símbolos que son visibles desde los objetos dinámicos en tiempo
de ejecución.

Si no utilizas ninguna de estas opciones (o utilizas la opción `--no-export-dynamic` para restaurar
el comportamiento predeterminado), la tabla de símbolos dinámicos normalmente contendrá solo aquellos
símbolos que son referenciados por algún objeto dinámico mencionado en el enlazamiento.

Si utilizas `dlopen` para cargar un objeto dinámico que necesita hacer referencia a los símbolos
definidos por el programa, en lugar de algún otro objeto dinámico, entonces probablemente necesitarás
utilizar esta opción cuando enlazes el programa en sí.

También puedes utilizar la lista dinámica para controlar qué símbolos se deben agregar a la tabla de
símbolos dinámicos si el formato de salida lo admite. Consulta la descripción de `--dynamic-list`.

Tenga en cuenta que esta opción es específica para los puertos dirigidos a ELF. Los objetivos PE admiten una función similar para exportar todos los símbolos de un DLL o EXE; consulte la descripción de --export-all-symbols a continuación.

^ -export-dynamic-symbol=glob Cuando se crea un ejecutable enlazado dinámicamente, los símbolos que coincidan con glob se agregarán a la tabla de símbolos dinámicos. Al crear una biblioteca compartida, las referencias a los símbolos que coincidan con glob no se enlazaran a las definiciones dentro de la biblioteca compartida. Esta opción no tiene efecto cuando se crea una biblioteca compartida y no se especifican -Bsymbolic o --dynamic-list. Esta opción solo tiene sentido en las plataformas ELF que admiten bibliotecas compartidas.

^ -export-dynamic-symbol-list=file Especifique un --export-dynamic-symbol para cada patrón en el archivo. El formato del archivo es el mismo que el nodo de versión sin ámbito y nombre de nodo. Consulte VERSION para obtener más información.

^ EB Enlace de objetos big-endian. Esto afecta el formato de salida predeterminado.

^ EL Enlace de objetos little-endian. Esto afecta el formato de salida predeterminado.

^ f name ^ -auxiliary=name Cuando se crea un objeto compartido ELF, establezca el campo interno DT_AUXILIARY al nombre especificado. Esto le indica al enlazador dinámico que la tabla de símbolos del objeto compartido debe usarse como un filtro auxiliar en la tabla de símbolos del objeto compartido name.

Si posteriormente enlaza un programa con este objeto de filtro, entonces, cuando ejecute el programa, el enlazador dinámico verá el campo DT_AUXILIARY. Si el enlazador dinámico resuelve algún símbolo del objeto de filtro, primero verificará si existe una definición en el objeto compartido name. Si existe, se usará en lugar de la definición en el objeto de filtro. El objeto compartido name no necesita existir. Por lo tanto, el objeto compartido name se puede usar para proporcionar una implementación alternativa de ciertas funciones, quizás para depurar o para el rendimiento específico de la máquina.

Esta opción se puede especificar más de una vez. Las entradas DT_AUXILIARY se crearán en el orden en que aparezcan en la línea de comandos.

^ F name ^ -filter=name Cuando se crea un objeto compartido ELF, establezca el campo interno DT_FILTER al nombre especificado. Esto le indica al enlazador dinámico que la tabla de símbolos del objeto compartido que se está creando debe usarse como un filtro en la tabla de símbolos del objeto compartido name.

Si posteriormente enlaza un programa con este objeto de filtro, entonces, cuando ejecute el programa, el enlazador dinámico verá el campo DT_FILTER. El enlazador dinámico resolverá los símbolos de acuerdo con la tabla de símbolos del objeto de filtro como de costumbre, pero en realidad se enlazará a las definiciones que se encuentren en el objeto compartido name. Por lo tanto, el objeto de filtro se puede utilizar para seleccionar un subconjunto de los símbolos proporcionados por el objeto name.

Algunos enlazadores más antiguos usaban la opción -F en toda la cadena de herramientas de compilación para especificar el formato de archivo de objeto tanto para los archivos de objeto de entrada como de salida. El enlazador GNU utiliza otros mecanismos para este propósito: las opciones -b, --format, --oformat, el comando TARGET en los scripts del enlazador y la variable de entorno GNUTARGET. El enlazador GNU ignorará la opción -F cuando no esté creando un objeto compartido ELF.


-fini=name

Cuando se crea un ejecutable ELF o una biblioteca compartida, llama a NAME cuando se descarga el ejecutable o la biblioteca compartida, estableciendo DT_FINI en la dirección de la función. Por defecto, el enlazador utiliza "_fini" como la función a llamar.

-g Ignorado. Se proporciona para la compatibilidad con otras herramientas.

-G value
--gpsize=value

Establece el tamaño máximo de los objetos a optimizar utilizando el registro GP al tamaño especificado. Esto solo es significativo para formatos de archivo de objetos como MIPS ELF que admiten colocar objetos grandes y pequeños en diferentes secciones. Esto se ignora para otros formatos de archivo de objetos.

-h name
-soname=name

Cuando se crea una biblioteca compartida ELF, establece el campo interno DT_SONAME al nombre especificado. Cuando un ejecutable se enlaza con una biblioteca compartida que tiene un campo DT_SONAME, cuando se ejecuta el ejecutable, el enlazador dinámico intentará cargar la biblioteca compartida especificada por el campo DT_SONAME en lugar de utilizar el nombre de archivo proporcionado al enlazador.

-i Realiza un enlace incremental (igual que la opción -r).

-init=name

Cuando se crea un ejecutable ELF o una biblioteca compartida, llama a NAME cuando se carga el ejecutable o la biblioteca compartida, estableciendo DT_INIT en la dirección de la función. Por defecto, el enlazador utiliza "_init" como la función a llamar.

-l namespec
--library=namespec

Añade el archivo de archivo o el archivo objeto especificado por namespec a la lista de archivos a enlazar. Esta opción se puede utilizar cualquier número de veces. Si namespec tiene el formato :filename, ld buscará en la ruta de la biblioteca un archivo llamado filename; de lo contrario, buscará en la ruta de la biblioteca un archivo llamado libnamespec.a.

En los sistemas que admiten bibliotecas compartidas, ld también puede buscar archivos distintos de libnamespec.a. Específicamente, en los sistemas ELF y SunOS, ld buscará en un directorio una biblioteca llamada libnamespec.so antes de buscar una llamada libnamespec.a. (Por convención, una extensión ".so" indica una biblioteca compartida). Tenga en cuenta que este comportamiento no se aplica a :filename, que siempre especifica un archivo llamado filename.

El enlazador buscará en un archivo solo una vez, en la ubicación en la que se especifica en la línea de comandos. Si el archivo define un símbolo que no estaba definido en algún objeto que apareció antes del archivo en la línea de comandos, el enlazador incluirá los archivos apropiados del archivo. Sin embargo, un símbolo no definido en un objeto que aparece más adelante en la línea de comandos no hará que el enlazador vuelva a buscar en el archivo.

Consulte la opción -( para obtener una forma de obligar al enlazador a buscar en los archivos varias veces.

Puede enumerar el mismo archivo varias veces en la línea de comandos.

Este tipo de búsqueda de archivos es estándar para los enlazadores Unix. Sin embargo, si está utilizando ld en AIX, tenga en cuenta que es diferente del comportamiento del enlazador AIX.


-L searchdir
--library-path=searchdir
Añade la ruta searchdir a la lista de rutas que ld buscará para bibliotecas de archivo y scripts de control de ld. Puedes usar esta opción cualquier número de veces. Los directorios se buscan en el orden en que se especifican en la línea de comandos. Los directorios especificados en la línea de comandos se buscan antes que los directorios predeterminados. Todas las opciones -L se aplican a todas las opciones -l, independientemente del orden en que aparezcan las opciones. Las opciones -L no afectan a la forma en que ld busca un script de enlazador a menos que se especifique la opción -T.

Si searchdir comienza con "=" o $SYSROOT, entonces este prefijo se reemplazará por el prefijo sysroot, controlado por la opción --sysroot, o especificado cuando se configuró el enlazador.

El conjunto predeterminado de rutas que se buscan (sin especificarse con -L) depende de qué modo de emulación esté utilizando ld, y en algunos casos también de cómo se configuró.

Las rutas también se pueden especificar en un script de enlace con el comando "SEARCH_DIR". Los directorios especificados de esta manera se buscan en el punto en que aparece el script de enlazador en la línea de comandos.

-m emulation
Emula el enlazador de emulación. Puedes listar las emulaciones disponibles con las opciones --verbose o -V.

Si no se utiliza la opción -m, la emulación se toma de la variable de entorno "LDEMULATION", si está definida.

De lo contrario, la emulación predeterminada depende de cómo se configuró el enlazador.

--remap-inputs=pattern=filename
--remap-inputs-file=file
Estas opciones permiten cambiar los nombres de los archivos de entrada antes de que el enlazador intente abrirlos. La opción --remap-inputs=foo.o=bar.o hará que cualquier intento de cargar un archivo llamado foo.o intente cargar en su lugar un archivo llamado bar.o. Se permiten patrones de comodín en el primer nombre de archivo, por lo que --remap-inputs=foo*.o=bar.o cambiará el nombre de cualquier archivo de entrada que coincida con foo*.o a bar.o.

Una forma alternativa de la opción --remap-inputs-file=filename permite que los remapeos se lean desde un archivo. Cada línea del archivo puede contener un solo remapeo. Se ignoran las líneas en blanco. Cualquier cosa desde un carácter de hash (#) hasta el final de una línea se considera un comentario y también se ignora. El patrón de mapeo se puede separar del nombre de archivo mediante espacios en blanco o un carácter de igual (=).

Las opciones se pueden especificar varias veces. Su contenido se acumula. Los remapeos se procesarán en el orden en que aparecen en la línea de comandos y, si provienen de un archivo, en el orden en que aparecen en el archivo. Si se encuentra una coincidencia, no se realizará ninguna comprobación adicional para ese nombre de archivo.

Si el nombre de archivo de reemplazo es /dev/null o simplemente NUL, entonces el remapeo en realidad hará que el archivo de entrada se ignore. Esta puede ser una forma conveniente de experimentar eliminando archivos de entrada de un entorno de compilación complicado.

Tenga en cuenta que esta opción depende de la posición y solo afecta a los nombres de archivo que aparecen después de ella en la línea de comandos. Por lo tanto:

ld foo.o --remap-inputs=foo.o=bar.o

No tendrá ningún efecto, mientras que:

ld --remap-inputs=foo.o=bar.o foo.o

Renombrará el archivo de entrada foo.o a bar.o.

Tenga en cuenta que estas opciones también afectan a los archivos referenciados por las instrucciones INPUT en los scripts del enlazador. Pero, dado que los scripts del enlazador se procesan después de que se lee toda la línea de comandos, la posición de las opciones de remapeo en la línea de comandos no es significativa.

Si la opción verbose está habilitada, se informarán todos los mapeos que coincidan, aunque, de nuevo, la opción verbose debe habilitarse en la línea de comandos antes de que aparezcan los nombres de archivo remapeados.

Si las opciones -Map o --print-map están habilitadas, la lista de remapeo se incluirá en la salida del mapa.

-M
--print-map

Imprime un mapa de enlace a la salida estándar. Un mapa de enlace proporciona información sobre el enlace, incluida la siguiente:

Dónde se mapean los archivos objeto en la memoria.

Cómo se asignan los símbolos comunes.

Todos los miembros de archivo incluidos en el enlace, con una mención del símbolo que provocó que se incluyera el miembro del archivo.

Los valores asignados a los símbolos.

Tenga en cuenta que los símbolos cuyos valores se calculan mediante una expresión que implica una referencia a un valor anterior del mismo símbolo pueden no mostrar el resultado correcto en el mapa de enlace. Esto se debe a que el enlazador descarta los resultados intermedios y solo conserva el valor final de una expresión. En tales circunstancias, el enlazador mostrará el valor final entre corchetes. Por lo tanto, por ejemplo, un script del enlazador que contenga:

foo = 1
foo = foo * 4
foo = foo + 8

producirá la siguiente salida en el mapa de enlace si se utiliza la opción -M:

000000001                foo = 0x1
[0x0000000c]                foo = (foo * 0x4)
[0x0000000c]                foo = (foo + 0x8)

Consulte Expresiones para obtener más información sobre las expresiones en los scripts del enlazador.

Cómo se fusionan las propiedades de GNU.

Cuando el enlazador fusiona las secciones de entrada .note.gnu.property en una única sección de salida .note.gnu.property, algunas propiedades se eliminan o actualizan. Estas acciones se informan en el mapa de enlace. Por ejemplo:

Se eliminó la propiedad 0xc0000002 para fusionar foo.o (0x1) y bar.o (no encontrado)

Esto indica que la propiedad 0xc0000002 se elimina de la salida al fusionar las propiedades en foo.o, cuyo valor de propiedad 0xc0000002 es 0x1, y bar.o, que no tiene la propiedad 0xc0000002.

Se actualizó la propiedad 0xc0010001 (0x1) para fusionar foo.o (0x1) y bar.o (0x1)

Esto indica que el valor de la propiedad 0xc0010001 se actualiza a 0x1 en la salida al fusionar las propiedades en foo.o, cuyo valor de propiedad 0xc0010001 es 0x1, y bar.o, cuyo valor de propiedad 0xc0010001 es 0x1.

En algunos objetivos ELF, una lista de correcciones insertadas por --relax

foo.o: Ajustando la rama en 0x00000008 hacia "far" en la sección .text

Esto indica que la rama en 0x00000008 en foo.o, que apunta al símbolo "far" en la sección .text, se ha reemplazado por un trampolín.


--print-map-discarded
--no-print-map-discarded

Imprime (o no) la lista de secciones descartadas y recolectadas por el recolector de basura en el mapa de enlace. Habilitado por defecto.

--print-map-locals
--no-print-map-locals

Imprime (o no) los símbolos locales en el mapa de enlace. Los símbolos locales tendrán el texto (local) impreso antes de su nombre, y se mostrarán después de todos los símbolos globales en una sección determinada. Los símbolos locales temporales (normalmente aquellos que comienzan con .L) no se incluirán en la salida. Deshabilitado por defecto.

-n
--nmagic

Desactiva la alineación de página de las secciones y deshabilita el enlace contra bibliotecas compartidas. Si el formato de salida admite números mágicos de estilo Unix, marca la salida como "NMAGIC".

-N
--omagic

Establece las secciones de texto y datos para que sean legibles y grabables. Además, no alinea la sección de datos a la página y deshabilita el enlace contra bibliotecas compartidas. Si el formato de salida admite números mágicos de estilo Unix, marca la salida como "OMAGIC". Nota: Aunque se permite una sección de texto grabable para los objetivos PE-COFF, no se ajusta a la especificación de formato publicada por Microsoft.

--no-omagic

Esta opción niega la mayoría de los efectos de la opción -N. Establece la sección de texto para que sea de solo lectura y fuerza a que la sección de datos se alinee a la página. Nota: esta opción no habilita el enlace contra bibliotecas compartidas. Utilice -Bdynamic para ello.

-o output
--output=output

Utiliza output como el nombre del programa producido por ld; si no se especifica esta opción, se utiliza el nombre a.out por defecto. El comando de script "OUTPUT" también puede especificar el nombre del archivo de salida.

Nota: el enlazador eliminará el archivo de salida antes de comenzar a escribir en él. Lo hará incluso si resulta que el enlace no se puede completar debido a errores.

Nota: el enlazador verificará que el nombre del archivo de salida no coincida con el nombre de ninguno de los archivos de entrada, pero eso es todo. En particular, no se quejará si el archivo de salida podría sobrescribir un archivo de origen o algún otro archivo importante. Por lo tanto, en los sistemas de compilación, se recomienda utilizar la opción -o como la última opción en la línea de comandos del enlazador. Por ejemplo, considere:

ld -o $(EXE) $(OBJS)
ld $(OBJS) -o $(EXE)

Si la variable EXE no está definida por alguna razón, la primera versión del comando del enlazador podría terminar eliminando uno de los archivos de objeto (el primero en la lista de OBJS), mientras que la segunda versión del comando del enlazador generará un mensaje de error y no eliminará nada.

--dependency-file=depfile

Escribe un archivo de dependencia en depfile. Este archivo contiene una regla adecuada para "make" que describe el archivo de salida y todos los archivos de entrada que se leyeron para producirlo. La salida es similar a la salida del compilador con -M -MP. Tenga en cuenta que no existe una opción como la del compilador -MM, para excluir los "archivos del sistema" (que no es un concepto bien especificado en el enlazador, a diferencia de los "archivos de encabezado del sistema" en el compilador). Por lo tanto, la salida de --dependency-file siempre es específica del estado exacto de la instalación donde se produjo, y no debe copiarse en archivos make distribuidos sin una edición cuidadosa.


-O nivel

Si nivel es un valor numérico mayor que cero, ld optimiza la salida. Esto podría tardar significativamente más y, por lo tanto, probablemente solo debería habilitarse para el binario final. En este momento, esta opción solo afecta la generación de bibliotecas compartidas ELF. Las futuras versiones del enlazador pueden hacer un mayor uso de esta opción. Además, actualmente no hay diferencia en el comportamiento del enlazador para diferentes valores distintos de cero de esta opción. Esto también podría cambiar en futuras versiones.

-plugin nombre

Involucra un complemento en el proceso de enlace. El parámetro nombre es el nombre de archivo absoluto del complemento. Por lo general, este parámetro se agrega automáticamente mediante el compilador cuando se utiliza la optimización en tiempo de enlace, pero los usuarios también pueden agregar sus propios complementos si así lo desean.

Tenga en cuenta que la ubicación de los complementos originados por el compilador es diferente de la ubicación donde los programas ar, nm y ranlib buscan sus complementos. Para que estos comandos puedan utilizar un complemento basado en el compilador, primero debe copiarse en el directorio ${libdir}/bfd-plugins. Todos los complementos del enlazador basados en gcc son compatibles con versiones anteriores, por lo que es suficiente con copiar el más reciente.

--push-state

La opción --push-state permite preservar el estado actual de las marcas que rigen el manejo de archivos de entrada para que puedan restaurarse todas con una opción --pop-state correspondiente.

Las opciones que cubre son: -Bdynamic, -Bstatic, -dn, -dy, -call_shared, -non_shared, -static, -N, -n, --whole-archive, --no-whole-archive, -r, -Ur, --copy-dt-needed-entries, --no-copy-dt-needed-entries, --as-needed, --no-as-needed y -a.

Uno de los objetivos de esta opción son las especificaciones para pkg-config. Cuando se utiliza con la opción --libs, se enumeran todas las bibliotecas posiblemente necesarias y luego se enlazan con ellas todo el tiempo. Es mejor devolver algo como lo siguiente:

-Wl,--push-state,--as-needed -libone -libtwo -Wl,--pop-state

--pop-state

Anula el efecto de --push-state, restaura los valores anteriores de las marcas que rigen el manejo de archivos de entrada.

-q
--emit-relocs

Deja las secciones y el contenido de reubicación en los ejecutables completamente enlazados. Las herramientas de análisis y optimización posteriores al enlace pueden necesitar esta información para realizar las modificaciones correctas de los ejecutables. Esto da como resultado ejecutables más grandes.

Esta opción solo se admite actualmente en las plataformas ELF.

--force-dynamic

Fuerza a que el archivo de salida tenga secciones dinámicas. Esta opción es específica de los objetivos de VxWorks.

-r
--relocatable

Genera una salida reubicable, es decir, genera un archivo de salida que a su vez puede servir como entrada para ld. Esto a menudo se denomina enlace parcial. Como efecto secundario, en los entornos que admiten los números mágicos Unix estándar, esta opción también establece el número mágico del archivo de salida en "OMAGIC". Si no se especifica esta opción, se produce un archivo absoluto. Al enlazar programas C++, esta opción no resolverá las referencias a los constructores; para ello, utilice -Ur.


Cuando un archivo de entrada no tiene el mismo formato que el archivo de salida, el enlace parcial solo es compatible si el archivo de entrada no contiene ninguna relocalización. Diferentes formatos de salida pueden tener restricciones adicionales; por ejemplo, algunos formatos basados en "a.out" no admiten el enlace parcial con archivos de entrada en otros formatos.

Cuando el archivo de salida relocalizable contiene tanto contenido que requiere optimización en tiempo de enlace (LTO) como contenido que no la requiere, se creará una sección .gnu_object_only para contener un archivo objeto relocalizable, como si se aplicara -r a todos los archivos de entrada relocalizables que no requieren LTO. Al procesar un archivo de entrada relocalizable con una sección .gnu_object_only, el enlazador extraerá la sección .gnu_object_only como una entrada separada.

Tenga en cuenta que, dado que -r agrupa algunas secciones de diferentes archivos de entrada, esto puede tener un impacto negativo en el tamaño del código y la localidad en el ejecutable o biblioteca compartida final.

Esta opción hace lo mismo que -i.

-R filename
--just-symbols=filename

Lee los nombres de los símbolos y sus direcciones de filename, pero no lo relocaliza ni lo incluye en la salida. Esto permite que su archivo de salida se refiera simbólicamente a ubicaciones absolutas de memoria definidas en otros programas. Puede usar esta opción más de una vez.

Para la compatibilidad con otros enlazadores ELF, si la opción -R va seguida de un nombre de directorio, en lugar de un nombre de archivo, se tratará como la opción -rpath.

--rosegment
--no-rosegment

Intenta asegurar que se cree solo un segmento de solo lectura, no de código. Solo es útil cuando se usa en conjunto con la opción -z separate-code. Los binarios resultantes deberían ser más pequeños que si se usa -z separate-code por sí sola. Sin esta opción, o si se especifica --no-rosegment, la opción -z separate-code creará dos segmentos de solo lectura, uno antes del segmento de código y otro después.

Los nombres de las opciones son engañosos, pero se han elegido para que el enlazador sea compatible con los enlazadores LLD y GOLD.

Estas opciones solo son compatibles con los destinos ELF.

-s
--strip-all

Omite toda la información de los símbolos del archivo de salida.

-S
--strip-debug

Omite la información de los símbolos del depurador (pero no todos los símbolos) del archivo de salida.

--strip-discarded
--no-strip-discarded

Omite (o no omite) los símbolos globales definidos en las secciones descartadas. Habilitado por defecto.

-plugin-save-temps

Guarda permanentemente los archivos "temporales" intermedios del complemento.

-t
--trace

Imprime los nombres de los archivos de entrada a medida que ld los procesa. Si se especifica -t dos veces, también se imprimen los miembros dentro de los archivos. La salida de -t es útil para generar una lista de todos los archivos objeto y scripts involucrados en el enlace, por ejemplo, cuando se preparan archivos para un informe de errores del enlazador.


-T scriptfile
--script=scriptfile
Utiliza scriptfile como el script del enlazador. Este script reemplaza el script del enlazador predeterminado de ld (en lugar de agregarle), a menos que el script contenga "INSERT", por lo que commandfile debe especificar todo lo necesario para describir el archivo de salida.

Si scriptfile no existe en el directorio actual, "ld" lo busca en los directorios especificados por cualquier opción -L anterior.

Las opciones de línea de comandos que aparecen antes de la opción -T pueden afectar el script, pero las opciones de línea de comandos que aparecen después no.

Las múltiples opciones -T se acumularán si están aumentando el script actual; de lo contrario, se utilizará la última opción -T que no aumente el script.

Hay otras formas de especificar scripts del enlazador. Consulte:

-dT scriptfile
--default-script=scriptfile
Utiliza scriptfile como el script del enlazador predeterminado.

Esta opción es similar a la opción --script, excepto que el procesamiento del script se retrasa hasta después de que se haya procesado el resto de la línea de comandos. Esto permite que las opciones colocadas después de la opción --default-script en la línea de comandos afecten el comportamiento del script del enlazador, lo cual puede ser importante cuando la línea de comandos del enlazador no puede ser controlada directamente por el usuario (por ejemplo, porque la línea de comandos está siendo construida por otra herramienta, como gcc).

-u symbol
--undefined=symbol
Fuerza a que el símbolo se introduzca en el archivo de salida como un símbolo no definido. Hacer esto puede, por ejemplo, activar el enlace de módulos adicionales de las bibliotecas estándar. -u puede repetirse con diferentes argumentos de opción para introducir símbolos no definidos adicionales. Esta opción es equivalente al comando "EXTERN" del script del enlazador.

Si esta opción se está utilizando para forzar la inclusión de módulos adicionales en el enlace, y si es un error que el símbolo permanezca no definido, entonces se debe utilizar la opción --require-defined en su lugar.

--require-defined=symbol
Requiere que el símbolo esté definido en el archivo de salida. Esta opción es la misma que la opción --undefined, excepto que si el símbolo no está definido en el archivo de salida, el enlazador emitirá un error y saldrá. El mismo efecto se puede lograr en un script del enlazador utilizando "EXTERN", "ASSERT" y "DEFINED" juntos. Esta opción se puede utilizar varias veces para requerir símbolos adicionales.

-Ur Para programas que no utilizan constructores o destructores, o para sistemas basados en ELF, esta opción es equivalente a -r: genera una salida relocatable, es decir, un archivo de salida que a su vez puede servir como entrada para ld. Para otros binarios, sin embargo, la opción -Ur es similar a -r, pero también resuelve las referencias a los constructores y destructores.

Para aquellos sistemas donde -r y -Ur se comportan de manera diferente, no funciona usar -Ur en archivos que fueron enlazados con -Ur; una vez que se ha construido la tabla de constructores, no se puede agregar a ella. Utilice -Ur solo para el último enlace parcial, y -r para los demás.

--orphan-handling=MODE

Controla cómo se gestionan las secciones huérfanas. Una sección huérfana es aquella que no se menciona específicamente en un script del enlazador.

MODE puede tener cualquiera de los siguientes valores:

"place"

Las secciones huérfanas se colocan en una sección de salida adecuada siguiendo la estrategia descrita en Secciones huérfanas. La opción --unique también afecta a cómo se colocan las secciones.

"discard"

Todas las secciones huérfanas se descartan, colocándolas en la sección /DISCARD/.

"warn"

El enlazador colocará la sección huérfana como en "place" y también emitirá una advertencia.

"error"

El enlazador finalizará con un error si se encuentra alguna sección huérfana.

El valor predeterminado si no se especifica --orphan-handling es "place".

--unique[=SECTION]

Crea una sección de salida separada para cada sección de entrada que coincida con SECTION, o si el argumento opcional de comodín SECTION falta, para cada sección de entrada huérfana. Una sección huérfana es aquella que no se menciona en un script del enlazador. Puede utilizar esta opción varias veces en la línea de comandos; evita la fusión normal de las secciones de entrada con el mismo nombre, anulando las asignaciones de secciones de salida en un script del enlazador.

-v
--version
-V Muestra el número de versión de ld. La opción -V también enumera las emulaciones admitidas. Consulte
también la descripción de --enable-linker-version en Opciones, Opciones de línea de comandos, que
se pueden utilizar para insertar la cadena de versión del enlazador en un binario.

-x
--discard-all

Elimina todos los símbolos locales.

-X
--discard-locals

Elimina todos los símbolos locales temporales. (Estos símbolos comienzan con prefijos de etiqueta local específicos del sistema, normalmente .L para los sistemas ELF o L para los sistemas tradicionales a.out).

-y symbol
--trace-symbol=symbol

Imprime el nombre de cada archivo enlazado en el que aparece el símbolo. Esta opción se puede especificar varias veces. En muchos sistemas, es necesario anteponer un guion bajo.

Esta opción es útil cuando tiene un símbolo no definido en su enlace, pero no sabe de dónde viene la referencia.

-Y path

Agrega una ruta a la ruta de búsqueda de bibliotecas predeterminada. Esta opción existe para la compatibilidad con Solaris.

-z keyword

Las palabras clave reconocidas son:

call-nop=prefix-addr
call-nop=suffix-nop
call-nop=prefix-byte
call-nop=suffix-byte

Especifica el relleno de 1 byte "NOP" al transformar una llamada indirecta a una función definida localmente, foo, a través de su ranura GOT. call-nop=prefix-addr genera "0x67 call foo". call-nop=suffix-nop genera "call foo 0x90". call-nop=prefix-byte genera "byte call foo". call-nop=suffix-byte genera "call foo byte". Compatible con i386 y x86_64.

cet-report=none
cet-report=warning
cet-report=error

Especifica cómo informar de las propiedades GNU_PROPERTY_X86_FEATURE_1_IBT y GNU_PROPERTY_X86_FEATURE_1_SHSTK faltantes en la sección de entrada .note.gnu.property. cet-report=none, que es el valor predeterminado, hará que el enlazador no informe de las propiedades faltantes en los archivos de entrada. cet-report=warning hará que el enlazador emita una advertencia por las propiedades faltantes en los archivos de entrada. cet-report=error hará que el enlazador emita un error por las propiedades faltantes en los archivos de entrada. Tenga en cuenta que ibt desactivará el informe de la propiedad GNU_PROPERTY_X86_FEATURE_1_IBT faltante y shstk desactivará el informe de la propiedad GNU_PROPERTY_X86_FEATURE_1_SHSTK faltante. Compatible con Linux/i386 y Linux/x86_64.


combreloc
nocombreloc
Combina múltiples secciones de reubicación dinámica y las ordena para mejorar la caché de búsqueda de símbolos dinámicos. No hacerlo si se especifica nocombreloc.

common
nocommon
Genera símbolos comunes con el tipo STT\_COMMON durante un enlace reubicable. Utiliza el tipo STT\_OBJECT si se especifica nocommon.

common-page-size=valor
Establece el tamaño de página más comúnmente utilizado en el valor especificado. El diseño de la imagen de memoria se optimizará para minimizar las páginas de memoria si el sistema está utilizando páginas de este tamaño.

defs
Informa sobre las referencias de símbolos no resueltas de los archivos de objetos regulares. Esto se hace incluso si el enlazador está creando una biblioteca compartida no simbólica. Esta opción es el inverso de -z undefs.

dynamic-undefined-weak
nodynamic-undefined-weak
Convierte los símbolos débiles no definidos en símbolos dinámicos cuando se construye un objeto dinámico, si se hace referencia a ellos desde un archivo de objeto regular y no se fuerzan a ser locales mediante la visibilidad de los símbolos o el versionado. No los convierte en dinámicos si se especifica nodynamic-undefined-weak. Si no se especifica ninguna de las opciones, un destino puede establecer por defecto que se aplique una u otra opción, o puede realizar una selección diferente de símbolos débiles no definidos que se convertirán en dinámicos. No todos los destinos admiten estas opciones.

execstack
Marca el objeto como que requiere una pila ejecutable.

global
Esta opción solo tiene sentido cuando se construye un objeto compartido. Hace que los símbolos definidos por este objeto compartido estén disponibles para la resolución de símbolos de las bibliotecas que se carguen posteriormente.

globalaudit
Esta opción solo tiene sentido cuando se construye un ejecutable dinámico. Esta opción marca el ejecutable como que requiere una auditoría global estableciendo el bit "DF_1_GLOBAUDIT" en la etiqueta dinámica "DT_FLAGS_1". La auditoría global requiere que se ejecute cualquier biblioteca de auditoría definida mediante las opciones de línea de comandos --depaudit o -P para todos los objetos dinámicos cargados por la aplicación.

ibtplt
Genera entradas PLT habilitadas para el seguimiento de bifurcaciones indirectas (IBT) de Intel. Compatible con Linux/i386 y Linux/x86\_64.

ibt
Genera GNU\_PROPERTY\_X86\_FEATURE\_1\_IBT en la sección .note.gnu.property para indicar la compatibilidad con IBT. Esto también implica ibtplt. Compatible con Linux/i386 y Linux/x86\_64.

indirect-extern-access
noindirect-extern-access
Genera GNU\_PROPERTY\_1\_NEEDED\_INDIRECT\_EXTERN\_ACCESS en la sección .note.gnu.property para indicar que el archivo de objeto requiere punteros de función canónicos y no se puede utilizar con la reubicación de copia. Esta opción también implica noextern-protected-data y nocopyreloc. Compatible con i386 y x86-64.

noindirect-extern-access elimina GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS de la sección .note.gnu.property.

initfirst

Esta opción solo tiene sentido cuando se está construyendo una biblioteca compartida. Marca el objeto de tal manera que su inicialización en tiempo de ejecución se produzca antes que la inicialización en tiempo de ejecución de cualquier otro objeto que se cargue en el proceso al mismo tiempo. De manera similar, la finalización en tiempo de ejecución del objeto se producirá después de la finalización en tiempo de ejecución de cualquier otro objeto.

interpose

Especifica que el cargador dinámico debe modificar su orden de búsqueda de símbolos de modo que los símbolos de esta biblioteca compartida anulen todas las demás bibliotecas compartidas que no estén marcadas de la misma manera.

unique
nounique

Al generar una biblioteca compartida u otro objeto ELF que se pueda cargar dinámicamente, márquelo como uno que, por defecto, solo debe cargarse una vez y solo en el espacio de nombres principal (cuando se utiliza "dlmopen"). Esto se utiliza principalmente para marcar bibliotecas fundamentales como libc, libpthread, etc., que normalmente no funcionan correctamente a menos que sean la única instancia de sí mismas. Este comportamiento se puede anular mediante el llamador de "dlmopen" y no se aplica a ciertos mecanismos de carga (como las bibliotecas de auditoría).

lam-u48

Genera GNU_PROPERTY_X86_FEATURE_1_LAM_U48 en la sección .note.gnu.property para indicar la compatibilidad con Intel LAM_U48. Compatible con Linux/x86_64.

lam-u57

Genera GNU_PROPERTY_X86_FEATURE_1_LAM_U57 en la sección .note.gnu.property para indicar la compatibilidad con Intel LAM_U57. Compatible con Linux/x86_64.

lam-u48-report=none
lam-u48-report=warning
lam-u48-report=error

Especifica cómo informar sobre la propiedad GNU_PROPERTY_X86_FEATURE_1_LAM_U48 faltante en la sección .note.gnu.property de entrada. lam-u48-report=none, que es el valor predeterminado, hará que el enlazador no informe sobre las propiedades faltantes en los archivos de entrada. lam-u48-report=warning hará que el enlazador emita una advertencia por las propiedades faltantes en los archivos de entrada. lam-u48-report=error hará que el enlazador emita un error por las propiedades faltantes en los archivos de entrada. Compatible con Linux/x86_64.

lam-u57-report=none
lam-u57-report=warning
lam-u57-report=error

Especifica cómo informar sobre la propiedad GNU_PROPERTY_X86_FEATURE_1_LAM_U57 faltante en la sección .note.gnu.property de entrada. lam-u57-report=none, que es el valor predeterminado, hará que el enlazador no informe sobre las propiedades faltantes en los archivos de entrada. lam-u57-report=warning hará que el enlazador emita una advertencia por las propiedades faltantes en los archivos de entrada. lam-u57-report=error hará que el enlazador emita un error por las propiedades faltantes en los archivos de entrada. Compatible con Linux/x86_64.

lam-report=none
lam-report=warning
lam-report=error

Especifica cómo informar sobre las propiedades GNU_PROPERTY_X86_FEATURE_1_LAM_U48 y GNU_PROPERTY_X86_FEATURE_1_LAM_U57 faltantes en la sección .note.gnu.property de entrada. lam-report=none, que es el valor predeterminado, hará que el enlazador no informe sobre las propiedades faltantes en los archivos de entrada. lam-report=warning hará que el enlazador emita una advertencia por las propiedades faltantes en los archivos de entrada. lam-report=error hará que el enlazador emita un error por las propiedades faltantes en los archivos de entrada. Compatible con Linux/x86_64.


lazy

Al generar un ejecutable o una biblioteca compartida, marque para indicar al enlazador dinámico que posponga la resolución de las llamadas a funciones hasta el momento en que se llame a la función (enlazado tardío), en lugar de hacerlo en tiempo de carga. El enlazado tardío es el valor predeterminado.

loadfltr

Especifique que los filtros del objeto se procesen inmediatamente en tiempo de ejecución.

max-page-size=value

Establezca el tamaño máximo de página de memoria admitido en el valor especificado.

mark-plt
nomark-plt

Marque las entradas de la PLT con etiquetas dinámicas, DT_X86_64_PLT, DT_X86_64_PLTSZ y DT_X86_64_PLTENT. Dado que esta opción almacena un valor distinto de cero en el campo r_addend de las relocalizaciones R_X86_64_JUMP_SLOT, los ejecutables y las bibliotecas compartidas resultantes son incompatibles con los enlazadores dinámicos, como los de las versiones más antiguas de glibc sin el cambio para ignorar r_addend en las relocalizaciones R_X86_64_GLOB_DAT y R_X86_64_JUMP_SLOT, que no ignoran el campo r_addend de las relocalizaciones R_X86_64_JUMP_SLOT. Compatible con x86_64.

muldefs

Permitir múltiples definiciones.

nocopyreloc

Deshabilite las variables .dynbss generadas por el enlazador, que se utilizan en lugar de las variables definidas en las bibliotecas compartidas. Esto puede dar como resultado relocalizaciones de texto dinámicas.

nodefaultlib

Especifique que el cargador dinámico, al buscar las dependencias de este objeto, debe ignorar cualquier ruta de búsqueda de bibliotecas predeterminada.

nodelete

Especifique que el objeto no debe descargarse en tiempo de ejecución.

nodlopen

Especifique que el objeto no está disponible para "dlopen".

nodump

Especifique que el objeto no se puede volcar mediante "dldump".

noexecstack

Marca el objeto como que no requiere una pila ejecutable.

noextern-protected-data

No trate los símbolos de datos protegidos como externos al construir una biblioteca compartida. Esta opción anula el valor predeterminado del enlazador. Se puede utilizar para solucionar relocalizaciones incorrectas en los símbolos de datos protegidos generadas por el compilador. Las actualizaciones en los símbolos de datos protegidos por otro módulo no son visibles para la biblioteca compartida resultante. Compatible con i386 y x86-64.

noreloc-overflow

Deshabilite la comprobación de desbordamiento de relocalización. Esto se puede utilizar para deshabilitar la comprobación de desbordamiento de relocalización si no habrá un desbordamiento de relocalización dinámico en tiempo de ejecución. Compatible con x86_64.

memory-seal
nomemory-seal

Indique al ejecutable o a la biblioteca compartida que todos los segmentos PT_LOAD deben sellarse para evitar manipulaciones posteriores (como cambiar las marcas de protección, el tamaño del segmento o eliminar el mapeo). Este es un endurecimiento de seguridad que requiere soporte del sistema. Esto genera GNU_PROPERTY_MEMORY_SEAL en la sección .note.gnu.property.

now

Al generar un ejecutable o una biblioteca compartida, marque para indicar al enlazador dinámico que resuelva todos los símbolos cuando se inicia el programa o cuando la biblioteca compartida es cargada por dlopen, en lugar de posponer la resolución de las llamadas a funciones hasta el momento en que se llame a la función.


origin

Especifica que el objeto requiere el manejo de $ORIGIN en las rutas.

pack-relative-relocs
nopack-relative-relocs

Genera reubicaciones relativas compactas en ejecutables de posición independiente y bibliotecas compartidas. Agrega las entradas "DT_RELR", "DT_RELRSZ" y "DT_RELRENT" a la sección dinámica. Se ignora cuando se construye un ejecutable de posición dependiente y una salida reubicable. nopack-relative-relocs es el valor predeterminado, que deshabilita la reubicación relativa compacta. Cuando se vincula con la Biblioteca C de GNU, se agrega una dependencia de la versión del símbolo GLIBC_ABI_DT_RELR a la biblioteca compartida C en la salida. Compatible con i386 y x86-64.

relro
norelro

Crea un encabezado de segmento ELF "PT_GNU_RELRO" en el objeto. Esto especifica un segmento de memoria que debe hacerse de solo lectura después de la reubicación, si es compatible. Especificar un tamaño de página común más pequeño que el tamaño de página del sistema hará que esta protección sea ineficaz. No cree un encabezado de segmento ELF "PT_GNU_RELRO" si se usa norelro.

report-relative-reloc

Informa sobre las reubicaciones dinámicas relativas generadas por el enlazador. Compatible con Linux/i386 y Linux/x86_64.

sectionheader
nosectionheader

Genera un encabezado de sección. No genere un encabezado de sección si se usa nosectionheader. sectionheader es el valor predeterminado.

separate-code
noseparate-code

Crea un encabezado de segmento "PT_LOAD" de código separado en el objeto. Esto especifica un segmento de memoria que debe contener solo instrucciones y debe estar en páginas completamente distintas de cualquier otro dato. No cree un segmento "PT_LOAD" de código separado si se usa noseparate-code.

shstk

Genera GNU_PROPERTY_X86_FEATURE_1_SHSTK en la sección .note.gnu.property para indicar la compatibilidad con Intel Shadow Stack. Compatible con Linux/i386 y Linux/x86_64.

stack-size=value

Especifica un tamaño de pila para un segmento ELF "PT_GNU_STACK". Especificar cero anulará cualquier creación de segmento "PT_GNU_STACK" con un tamaño distinto de cero predeterminado.

start-stop-gc
nostart-stop-gc

Cuando --gc-sections está en efecto, una referencia desde una sección retenida a __start_SECNAME o __stop_SECNAME hace que todas las secciones de entrada con el nombre "SECNAME" también se retengan, si "SECNAME" es representable como un identificador C y si el enlazador sintetiza __start_SECNAME o __stop_SECNAME. -z start-stop-gc deshabilita este efecto, lo que permite que las secciones se recolecten como si los símbolos sintetizados especiales no estuvieran definidos. -z start-stop-gc no tiene ningún efecto en una definición de __start_SECNAME o __stop_SECNAME en un archivo de objeto o un script del enlazador. Dicha definición evitará que el enlazador proporcione un __start_SECNAME o __stop_SECNAME sintetizado, respectivamente, y, por lo tanto, el tratamiento especial por parte de la recolección de basura para esas referencias.

start-stop-visibility=value

Especifica la visibilidad del símbolo ELF para los símbolos sintetizados __start_SECNAME y __stop_SECNAME. value debe ser exactamente default, internal, hidden o protected. Si no se proporciona la opción -z start-stop-visibility, se utiliza protected para la compatibilidad con las prácticas históricas. Sin embargo, se recomienda encarecidamente utilizar -z start-stop-visibility=hidden en los programas y bibliotecas compartidas nuevos para que estos símbolos no se exporten entre objetos compartidos, lo cual no suele ser lo deseado.


texto
sintexto
textoff

Informa de un error si se establece DT_TEXTREL, es decir, si el objeto de posición independiente o compartido tiene reubicaciones dinámicas en secciones de solo lectura. No informa de un error si se especifica sintexto o textoff.

undefs

No informa de las referencias a símbolos no resueltos de los archivos de objeto regulares, ya sea al crear un ejecutable o al crear una biblioteca compartida. Esta opción es el inverso de -z defs.

unique-symbol
nounique-symbol

Evita que los nombres de símbolos locales en la tabla de símbolos tengan duplicados. Agrega ".número" a los nombres de símbolos locales duplicados si se utiliza unique-symbol. nounique-symbol es el valor predeterminado.

x86-64-baseline
x86-64-v2
x86-64-v3
x86-64-v4

Especifica el nivel de ISA x86-64 necesario en la sección .note.gnu.property. x86-64-baseline genera "GNU_PROPERTY_X86_ISA_1_BASELINE". x86-64-v2 genera "GNU_PROPERTY_X86_ISA_1_V2". x86-64-v3 genera "GNU_PROPERTY_X86_ISA_1_V3". x86-64-v4 genera "GNU_PROPERTY_X86_ISA_1_V4". Compatible con Linux/i386 y Linux/x86_64.

isa-level-report=none
isa-level-report=all
isa-level-report=needed
isa-level-report=used

Especifica cómo informar de los niveles de ISA x86-64 en los archivos de reubicación de entrada. isa-level-report=none, que es el valor predeterminado, hará que el enlazador no informe de los niveles de ISA x86-64 en los archivos de entrada. isa-level-report=all hará que el enlazador informe de los niveles de ISA x86-64 necesarios y utilizados en los archivos de entrada. isa-level-report=needed hará que el enlazador informe de los niveles de ISA x86-64 necesarios en los archivos de entrada. isa-level-report=used hará que el enlazador informe de los niveles de ISA x86-64 utilizados en los archivos de entrada. Compatible con Linux/i386 y Linux/x86_64.

Otras palabras clave se ignoran para la compatibilidad con Solaris.

--gnu-tls-tag
--no-gnu-tls-tag
Agrega la dependencia de la etiqueta de versión "GLIBC_ABI_GNU_TLS" en los programas de salida y las bibliotecas compartidas cuando se enlaza con glibc si los archivos de objeto de reubicación de entrada llaman a "___tls_get_addr". La salida no se cargará y no se ejecutará en tiempo de ejecución con glibc que no defina la etiqueta de versión "GLIBC_ABI_GNU_TLS". A menos que se deshabilite mediante la opción --disable-gnu-tls-tag en el tiempo de compilación del enlazador, cuando no se especifican opciones, el enlazador agregará la dependencia de la etiqueta de versión "GLIBC_ABI_GNU_TLS" si las entradas tienen la llamada "___tls_get_addr" y libc.so define la etiqueta de versión "GLIBC_ABI_GNU_TLS". Compatible con Linux/i386.

--gnu2-tls-tag
--no-gnu2-tls-tag
Agrega la dependencia de la etiqueta de versión "GLIBC_ABI_GNU2_TLS" en los programas de salida y las bibliotecas compartidas cuando se enlaza con glibc si los archivos de objeto de reubicación de entrada tienen la reubicación "R_386_TLS_DESC_CALL" o "R_X86_64_TLSDESC_CALL". La salida no se cargará y no se ejecutará en tiempo de ejecución con glibc que no defina la etiqueta de versión "GLIBC_ABI_GNU2_TLS". A menos que se deshabilite mediante la opción --disable-gnu2-tls-tag en el tiempo de compilación del enlazador, cuando no se especifican opciones, el enlazador agregará la etiqueta de versión "GLIBC_ABI_GNU2_TLS" si las entradas tienen la reubicación "R_386_TLS_DESC_CALL" o "R_X86_64_TLSDESC_CALL" y libc.so define la etiqueta de versión "GLIBC_ABI_GNU2_TLS". Compatible con Linux/i386 y Linux/x86_64.

- (archivos -)
--start-group archivos --end-group

Los archivos deben ser una lista de archivos de archivo. Pueden ser nombres de archivo explícitos o -l opciones.

Los archivos especificados se buscan repetidamente hasta que no se creen nuevas referencias indefinidas. Normalmente, un archivo se busca solo una vez en el orden en que se especifica en la línea de comandos. Si un símbolo en ese archivo es necesario para resolver un símbolo indefinido al que se hace referencia en un objeto de un archivo que aparece más adelante en la línea de comandos, el enlazador no podría resolver esa referencia. Al agrupar los archivos, todos se buscarán repetidamente hasta que se resuelvan todas las referencias posibles.

El uso de esta opción tiene un costo de rendimiento significativo. Es mejor usarlo solo cuando existen referencias circulares inevitables entre dos o más archivos.

--accept-unknown-input-arch
--no-accept-unknown-input-arch

Indica al enlazador que acepte archivos de entrada cuya arquitectura no se pueda reconocer. Se asume que el usuario sabe lo que está haciendo y desea deliberadamente enlazar estos archivos de entrada desconocidos. Este era el comportamiento predeterminado del enlazador, antes de la versión 2.14. El comportamiento predeterminado a partir de la versión 2.14 es rechazar dichos archivos de entrada, por lo que se ha agregado la opción --accept-unknown-input-arch para restaurar el comportamiento anterior.

--as-needed
--no-as-needed

Esta opción afecta a las etiquetas ELF DT_NEEDED para las bibliotecas dinámicas mencionadas en la línea de comandos después de la opción --as-needed. Normalmente, el enlazador agregará una etiqueta DT_NEEDED para cada biblioteca dinámica mencionada en la línea de comandos, independientemente de si la biblioteca es realmente necesaria o no. --as-needed hace que se emita una etiqueta DT_NEEDED solo para una biblioteca que en ese momento en el enlace satisfaga una referencia de símbolo indefinido no débil de un archivo de objeto regular o, si la biblioteca no se encuentra en las listas DT_NEEDED de otras bibliotecas necesarias, una referencia de símbolo indefinido no débil de otra biblioteca dinámica necesaria. Los archivos de objeto o las bibliotecas que aparecen en la línea de comandos después de la biblioteca en cuestión no afectan a si se considera que la biblioteca es necesaria. Esto es similar a las reglas para la extracción de archivos de objeto de los archivos. --no-as-needed restaura el comportamiento predeterminado.


Nota: En los sistemas basados en Linux, la opción --as-needed también afecta el comportamiento de las opciones --rpath y --rpath-link. Consulte la descripción de --rpath-link para obtener más detalles.

--add-needed
--no-add-needed
Estas dos opciones han quedado obsoletas debido a la similitud de sus nombres con las opciones --as-needed y --no-as-needed. Han sido reemplazadas por --copy-dt-needed-entries y --no-copy-dt-needed-entries.

-assert keyword
Esta opción se ignora para la compatibilidad con SunOS.

-Bdynamic
-dy
-call_shared
Enlaza con bibliotecas dinámicas. Esto solo tiene sentido en las plataformas para las que se admiten las bibliotecas compartidas. Esta opción suele ser el valor predeterminado en dichas plataformas. Puede usar esta opción varias veces en la línea de comandos: afecta la búsqueda de bibliotecas para las opciones -l que la sigan.

-Bgroup
Establece la marca "DF_1_GROUP" en la entrada "DT_FLAGS_1" en la sección dinámica. Esto hace que el enlazador de tiempo de ejecución realice las búsquedas en este objeto y sus dependencias solo dentro del grupo. --unresolved-symbols=report-all se implica. Esta opción solo tiene sentido en las plataformas ELF que admiten bibliotecas compartidas.

-Bstatic
-dn
-non_shared
-static
No enlaza con bibliotecas compartidas. Esto solo tiene sentido en las plataformas para las que se admiten las bibliotecas compartidas. Las diferentes variantes de esta opción son para la compatibilidad con varios sistemas. Puede usar esta opción varias veces en la línea de comandos: afecta la búsqueda de bibliotecas para las opciones -l que la sigan. Esta opción también implica --unresolved-symbols=report-all. Esta opción se puede usar con -shared. Hacerlo significa que se está creando una biblioteca compartida, pero que todas las referencias externas de la biblioteca deben resolverse extrayendo entradas de las bibliotecas estáticas.

-Bsymbolic
Cuando se crea una biblioteca compartida, enlaza las referencias a los símbolos globales a la definición dentro de la biblioteca compartida, si existe. Normalmente, es posible que un programa enlazado a una biblioteca compartida anule la definición dentro de la biblioteca compartida. Esta opción solo tiene sentido en las plataformas ELF que admiten bibliotecas compartidas.

-Bsymbolic-functions
Cuando se crea una biblioteca compartida, enlaza las referencias a los símbolos de función globales a la definición dentro de la biblioteca compartida, si existe. Esta opción solo tiene sentido en las plataformas ELF que admiten bibliotecas compartidas.

-Bno-symbolic
Esta opción puede cancelar las opciones -Bsymbolic y -Bsymbolic-functions especificadas anteriormente.

--dynamic-list=dynamic-list-file
Especifica el nombre de un archivo de lista dinámica para el enlazador. Esto se utiliza normalmente al crear bibliotecas compartidas para especificar una lista de símbolos globales cuyas referencias no deben enlazarse a la definición dentro de la biblioteca compartida, o al crear ejecutables enlazados dinámicamente para especificar una lista de símbolos que deben agregarse a la tabla de símbolos en el ejecutable. Esta opción solo tiene sentido en las plataformas ELF que admiten bibliotecas compartidas.

El formato de la lista dinámica es el mismo que la versión del nodo sin ámbito y nombre de nodo. Consulte VERSION para obtener más información.

--dynamic-list-data

Incluya todos los símbolos de datos globales en la lista dinámica.

--dynamic-list-cpp-new

Proporcione la lista dinámica integrada para los operadores C++ new y delete. Es principalmente útil para construir libstdc++ compartida.

--dynamic-list-cpp-typeinfo

Proporcione la lista dinámica integrada para la identificación del tipo en tiempo de ejecución de C++.

--check-sections
--no-check-sections

Indica al enlazador que no verifique las direcciones de las secciones después de que se hayan asignado para ver si hay alguna superposición. Normalmente, el enlazador realizará esta verificación y, si encuentra alguna superposición, producirá los mensajes de error adecuados. El enlazador conoce las secciones en superposiciones y realiza ajustes para ellas. El comportamiento predeterminado se puede restaurar utilizando el interruptor de línea de comandos --check-sections. La superposición de secciones no suele verificarse para los enlaces relocables. Puede forzar la verificación en ese caso utilizando la opción --check-sections.

--copy-dt-needed-entries
--no-copy-dt-needed-entries

Esta opción afecta el tratamiento de las bibliotecas dinámicas a las que se hace referencia mediante las etiquetas DT_NEEDED dentro de los archivos ELF dinámicos mencionados en la línea de comandos. Normalmente, el enlazador no agregará una etiqueta DT_NEEDED al archivo de salida para cada biblioteca mencionada en una etiqueta DT_NEEDED en un archivo dinámico de entrada. Sin embargo, si se especifica --copy-dt-needed-entries en la línea de comandos, cualquier biblioteca dinámica que le siga tendrá sus entradas DT_NEEDED agregadas. El comportamiento predeterminado se puede restaurar con --no-copy-dt-needed-entries.

Esta opción también tiene un efecto en la resolución de símbolos en bibliotecas dinámicas. Con --copy-dt-needed-entries, las bibliotecas dinámicas mencionadas en la línea de comandos se buscarán de forma recursiva, siguiendo sus etiquetas DT_NEEDED a otras bibliotecas, para resolver los símbolos requeridos por el archivo de salida. Con la configuración predeterminada, sin embargo, la búsqueda de las bibliotecas dinámicas que le siguen se detendrá en la propia biblioteca dinámica. No se recorrerán los enlaces DT_NEEDED para resolver símbolos.

--cref

Genera una tabla de referencias cruzadas. Si se está generando un archivo de mapa del enlazador, la tabla de referencias cruzadas se imprime en el archivo de mapa. De lo contrario, se imprime en la salida estándar.

El formato de la tabla es intencionalmente simple, para que pueda ser procesado fácilmente por un script si es necesario. Los símbolos se imprimen, ordenados por nombre. Para cada símbolo, se proporciona una lista de nombres de archivo. Si el símbolo está definido, el primer archivo de la lista es la ubicación de la definición. Si el símbolo está definido como un valor común, cualquier archivo donde esto ocurra aparece a continuación. Finalmente, se enumeran todos los archivos que hacen referencia al símbolo.


--ctf-variables
--no-ctf-variables

El formato de depuración CTF admite una sección que codifica los nombres y tipos de las variables encontradas en el programa que no aparecen en ninguna tabla de símbolos. Estas variables obviamente no se pueden buscar por dirección mediante depuradores convencionales, por lo que el espacio utilizado para sus tipos y nombres suele desperdiciarse: los tipos suelen ser pequeños, pero los nombres a menudo no lo son. --ctf-variables provoca la generación de dicha sección. El comportamiento predeterminado se puede restaurar con --no-ctf-variables.

--ctf-share-types=method

Ajusta el método utilizado para compartir tipos entre unidades de traducción en CTF.

share-unconflicted

Coloca todos los tipos que no tienen definiciones ambiguas en el diccionario compartido, donde los depuradores pueden acceder fácilmente, incluso si solo aparecen en una unidad de traducción. Este es el valor predeterminado.

share-duplicated

Coloca solo los tipos que aparecen en varias unidades de traducción en el diccionario compartido: los tipos con una sola definición van a los diccionarios por unidad de traducción. Los tipos con definiciones ambiguas en varias unidades de traducción siempre van a los diccionarios por unidad de traducción. Esto tiende a hacer que el CTF sea más grande, pero puede reducir la cantidad de CTF en el diccionario compartido. Para proyectos muy grandes, esto puede acelerar la apertura del CTF y ahorrar memoria en el consumidor de CTF en tiempo de ejecución.

--no-define-common

Esta opción impide la asignación de direcciones a los símbolos comunes. El comando del script "INHIBIT_COMMON_ALLOCATION" tiene el mismo efecto.

La opción --no-define-common permite desacoplar la decisión de asignar direcciones a los símbolos comunes de la elección del tipo de archivo de salida; de lo contrario, un tipo de salida no reubicable obliga a asignar direcciones a los símbolos comunes. El uso de --no-define-common permite que los símbolos comunes que se referencian desde una biblioteca compartida se les asignen direcciones solo en el programa principal. Esto elimina el espacio duplicado no utilizado en la biblioteca compartida y también evita cualquier posible confusión al resolver al duplicado incorrecto cuando hay muchos módulos dinámicos con rutas de búsqueda especializadas para la resolución de símbolos en tiempo de ejecución.

--force-group-allocation

Esta opción hace que el enlazador coloque los miembros del grupo de secciones como secciones de entrada normales y que elimine los grupos de secciones. Este es el comportamiento predeterminado para un enlace final, pero esta opción se puede utilizar para cambiar el comportamiento de un enlace reubicable (-r). El comando del script "FORCE_GROUP_ALLOCATION" tiene el mismo efecto.

--defsym=symbol=expression

Crea un símbolo global en el archivo de salida, que contiene la dirección absoluta dada por la expresión. Puede usar esta opción tantas veces como sea necesario para definir varios símbolos en la línea de comandos. Se admite una forma limitada de aritmética para la expresión en este contexto: puede proporcionar una constante hexadecimal o el nombre de un símbolo existente, o usar "+" y "-" para sumar o restar constantes hexadecimales o símbolos. Si necesita expresiones más elaboradas, considere usar el lenguaje de comandos del enlazador desde un script. Nota: no debe haber espacios en blanco entre el símbolo, el signo igual ("=") y la expresión.


El enlazador procesa los argumentos --defsym y -T en orden, colocando --defsym antes de -T definirá el símbolo antes de que se procese el script del enlazador de -T, mientras que colocar --defsym después de -T definirá el símbolo después de que se haya procesado el script del enlazador. Esta diferencia tiene consecuencias para las expresiones dentro del script del enlazador que utilizan los símbolos de --defsym. El orden correcto dependerá de lo que se intente lograr.

^ -demangle[=style] ^ -no-demangle Estas opciones controlan si se deben eliminar los nombres de los símbolos en los mensajes de error y otras salidas. Cuando se le indica al enlazador que elimine los nombres, intenta presentar los nombres de los símbolos de una manera legible: elimina los guiones bajos iniciales si los utiliza el formato de archivo de objeto y convierte los nombres de los símbolos C++ con eliminación de nombres en nombres legibles por el usuario. Diferentes compiladores tienen diferentes estilos de eliminación de nombres. El argumento opcional de estilo de eliminación de nombres se puede utilizar para elegir un estilo de eliminación de nombres adecuado para su compilador. El enlazador eliminará los nombres de forma predeterminada, a menos que la variable de entorno COLLECT_NO_DEMANGLE esté configurada. Estas opciones se pueden utilizar para anular el valor predeterminado.

^ Ifile ^ -dynamic-linker=file Establece el nombre del enlazador dinámico. Esto solo es significativo al generar ejecutables ELF enlazados dinámicamente. El enlazador dinámico predeterminado normalmente es correcto; no lo utilice a menos que sepa lo que está haciendo.

^ -no-dynamic-linker Al producir un archivo ejecutable, omita la solicitud de que se utilice un enlazador dinámico en tiempo de carga. Esto solo es significativo para los ejecutables ELF que contienen reubicaciones dinámicas y, por lo general, requiere código de punto de entrada que sea capaz de procesar estas reubicaciones.

^ -embedded-relocs Esta opción es similar a la opción --emit-relocs, excepto que las reubicaciones se almacenan en una sección específica del destino. Esta opción solo es compatible con los destinos BFIN, CR16 y M68K.

^ -disable-multiple-abs-defs No permita múltiples definiciones con símbolos incluidos en el nombre del archivo invocados por -R o ^ -just-symbols

^ -fatal-warnings ^ -no-fatal-warnings Considere todas las advertencias como errores. El comportamiento predeterminado se puede restaurar con la opción ^ -no-fatal-warnings.

^ w ^ -no-warnings No muestre ningún mensaje de advertencia o error. Esto anula --fatal-warnings si se ha habilitado. Esta opción se puede utilizar cuando se sabe que el archivo binario de salida no funcionará, pero aún así existe la necesidad de crearlo.

^ -force-exe-suffix Asegúrese de que un archivo de salida tenga un sufijo ".exe".

Si un archivo de salida totalmente enlazado y compilado correctamente no tiene un sufijo ".exe" o ".dll", esta opción obliga al enlazador a copiar el archivo de salida a uno con el mismo nombre y un sufijo ".exe". Esta opción es útil cuando se utilizan archivos Makefile de Unix sin modificar en un host de Microsoft Windows, ya que algunas versiones de Windows no ejecutarán una imagen a menos que termine en un sufijo ".exe".


--gc-sections
--no-gc-sections

Habilita la recolección de basura de secciones de entrada no utilizadas. Se ignora en los destinos que no admiten esta opción. El comportamiento predeterminado (de no realizar esta recolección de basura) se puede restaurar especificando --no-gc-sections en la línea de comandos. Tenga en cuenta que la recolección de basura para los destinos de formato COFF y PE es compatible, pero la implementación se considera actualmente experimental.

--gc-sections decide qué secciones de entrada se utilizan examinando símbolos y reubicaciones.

La sección que contiene el símbolo de entrada y todas las secciones que contienen símbolos indefinidos en la línea de comandos se mantendrán, así como las secciones que contienen símbolos referenciados por objetos dinámicos. Tenga en cuenta que, cuando se crean bibliotecas compartidas, el enlazador debe suponer que cualquier símbolo visible está referenciado. Una vez que se ha determinado este conjunto inicial de secciones, el enlazador marca recursivamente como utilizadas cualquier sección referenciada por sus reubicaciones. Consulte --entry, --undefined y --gc-keep-exported.

Esta opción se puede establecer cuando se realiza un enlace parcial (habilitado con la opción -r). En este caso, la raíz de los símbolos que se conservarán debe especificarse explícitamente mediante una de las opciones --entry, --undefined o --gc-keep-exported o mediante un comando "ENTRY" en el script del enlazador.

Como extensión GNU, las secciones de entrada ELF marcadas con la marca "SHF_GNU_RETAIN" no se eliminarán mediante la recolección de basura.

--print-gc-sections
--no-print-gc-sections

Enumera todas las secciones eliminadas por la recolección de basura. La lista se imprime en stderr. Esta opción solo es efectiva si la recolección de basura se ha habilitado mediante la opción --gc-sections. El comportamiento predeterminado (de no enumerar las secciones que se eliminan) se puede restaurar especificando --no-print-gc-sections en la línea de comandos.

--gc-keep-exported

Cuando --gc-sections está habilitado, esta opción evita la recolección de basura de las secciones de entrada no utilizadas que contienen símbolos globales con visibilidad predeterminada o protegida. Esta opción está destinada a utilizarse para ejecutables donde las secciones no referenciadas se eliminarían mediante la recolección de basura independientemente de la visibilidad externa de los símbolos contenidos. Tenga en cuenta que esta opción no tiene ningún efecto al enlazar objetos compartidos, ya que ya es el comportamiento predeterminado. Esta opción solo es compatible con los destinos de formato ELF.

--print-output-format

Imprime el nombre del formato de salida predeterminado (posiblemente influenciado por otras opciones de la línea de comandos). Esta es la cadena que aparecería en un comando "OUTPUT_FORMAT" del script del enlazador.

--print-memory-usage

Imprime el tamaño utilizado, el tamaño total y el tamaño utilizado de las regiones de memoria creadas con el comando MEMORY. Esto es útil en destinos integrados para tener una vista rápida de la cantidad de memoria libre. El formato de la salida tiene un encabezado y una línea por región. Aquí hay un ejemplo de una salida:


Región de memoria Tamaño usado Tamaño de la región % Usado ROM: 256 KB 1 MB 25.00% RAM: 32 B 2 GB 0.00%

Nota: si desea obtener información sobre el uso de la memoria del enlazador en sí, la opción `--stats` le servirá.

--help

Imprime un resumen de las opciones de la línea de comandos en la salida estándar y sale.

--target-help

Imprime un resumen de todas las opciones específicas del destino en la salida estándar y sale.

-Map=mapfile

Imprime un mapa de enlace en el archivo mapfile. Consulte la descripción de la opción -M anterior. Si mapfile es solo el carácter "-", el mapa se escribirá en stdout.

Especificar un directorio como mapfile hace que el mapa de enlace se escriba como un archivo dentro del directorio. Normalmente, el nombre del archivo dentro del directorio se calcula como el nombre base del archivo de salida con ".map" añadido. Sin embargo, si se utiliza el carácter especial "%", este se reemplazará por la ruta completa del archivo de salida. Además, si hay algún carácter después del símbolo "%", ".map" ya no se añadirá.

-o foo.exe -Map=bar     [Crea ./bar]
-o ../dir/foo.exe -Map=bar      [Crea ./bar]
-o foo.exe -Map=../dir      [Crea ../dir/foo.exe.map]
-o ../dir2/foo.exe -Map=../dir      [Crea ../dir/foo.exe.map]
-o foo.exe -Map=%       [Crea ./foo.exe.map]
-o ../dir/foo.exe -Map=%        [Crea ../dir/foo.exe.map]
-o foo.exe -Map=%.bar       [Crea ./foo.exe.bar]
-o ../dir/foo.exe -Map=%.bar        [Crea ../dir/foo.exe.bar]
-o ../dir2/foo.exe -Map=../dir/%        [Crea ../dir/../dir2/foo.exe.map]
-o ../dir2/foo.exe -Map=../dir/%.bar        [Crea ../dir/../dir2/foo.exe.bar]

Es un error especificar más de un carácter "%".

Si el archivo de mapa ya existe, se sobrescribirá con esta operación.

--no-keep-memory

Normalmente, ld optimiza la velocidad sobre el uso de la memoria almacenando en caché las tablas de símbolos de los archivos de entrada en la memoria. Esta opción indica a ld que, en cambio, optimice el uso de la memoria volviendo a leer las tablas de símbolos según sea necesario. Esto puede ser necesario si ld se queda sin espacio de memoria al enlazar un ejecutable grande.

--no-undefined
-z defs

Informa sobre las referencias de símbolos no resueltas de los archivos de objeto regulares. Esto se hace incluso si el enlazador está creando una biblioteca compartida no simbólica. El conmutador --[no-]allow-shlib-undefined controla el comportamiento para informar sobre las referencias no resueltas que se encuentran en las bibliotecas compartidas que se están enlazando.

Los efectos de esta opción se pueden revertir utilizando "-z undefs".

--allow-multiple-definition
-z muldefs

Normalmente, cuando un símbolo se define varias veces, el enlazador informará de un error fatal. Estas opciones permiten múltiples definiciones y se utilizará la primera definición.

--allow-shlib-undefined
--no-allow-shlib-undefined

Permite o impide los símbolos no definidos en las bibliotecas compartidas. Este conmutador es similar a --no-undefined, excepto que determina el comportamiento cuando los símbolos no definidos están en una biblioteca compartida en lugar de en un archivo de objeto regular. No afecta a la forma en que se gestionan los símbolos no definidos en los archivos de objeto regulares.


El comportamiento predeterminado es informar de errores para cualquier símbolo no definido referenciado en bibliotecas compartidas si el enlazador se utiliza para crear un ejecutable, pero permitirlos si el enlazador se utiliza para crear una biblioteca compartida.

Las razones para permitir referencias a símbolos no definidos en bibliotecas compartidas especificadas en tiempo de enlace son que:

Una biblioteca compartida especificada en tiempo de enlace puede no ser la misma que la disponible en tiempo de carga, por lo que el símbolo podría resolverse en tiempo de carga.

Existen algunos sistemas operativos, por ejemplo, BeOS y HPPA, donde los símbolos no definidos en las bibliotecas compartidas son normales.

El kernel de BeOS, por ejemplo, aplica parches a las bibliotecas compartidas en tiempo de carga para seleccionar la función más adecuada para la arquitectura actual. Esto se utiliza, por ejemplo, para seleccionar dinámicamente una función memset adecuada.

--error-handling-script=scriptname

Si se proporciona esta opción, el enlazador invocará scriptname cada vez que se produzca un error. Actualmente, sin embargo, solo se admiten dos tipos de errores: símbolos faltantes y bibliotecas faltantes. Se pasarán dos argumentos al script: la palabra clave "undefined-symbol" o "missing-lib" y el nombre del símbolo no definido o la biblioteca faltante. La intención es que el script proporcione sugerencias al usuario sobre dónde se puede encontrar el símbolo o la biblioteca. Una vez que el script haya terminado, se mostrará el mensaje de error normal del enlazador.

La disponibilidad de esta opción se controla mediante un conmutador de tiempo de configuración, por lo que es posible que no esté presente en implementaciones específicas.

--no-undefined-version

Normalmente, cuando un símbolo tiene una versión no definida, el enlazador lo ignorará. Esta opción impide los símbolos con una versión no definida y se emitirá un error fatal.

--default-symver

Crea y utiliza una versión de símbolo predeterminada (el soname) para los símbolos exportados sin versión.

--default-imported-symver

Crea y utiliza una versión de símbolo predeterminada (el soname) para los símbolos importados sin versión.

--no-warn-mismatch

Normalmente, ld dará un error si intenta enlazar archivos de entrada que no coinciden por alguna razón, quizás porque se han compilado para diferentes procesadores o para diferentes endianness. Esta opción le indica a ld que permita silenciosamente tales posibles errores. Esta opción solo debe usarse con cuidado, en casos en los que haya tomado alguna medida especial que garantice que los errores del enlazador sean inapropiados.

--no-warn-search-mismatch

Normalmente, ld dará una advertencia si encuentra una biblioteca incompatible durante una búsqueda de bibliotecas. Esta opción silencia la advertencia.

--no-whole-archive

Desactiva el efecto de la opción --whole-archive para los archivos de archivo posteriores.


--noinhibit-exec
Conserva el archivo ejecutable de salida siempre que aún sea utilizable. Normalmente, el enlazador no
producirá un archivo de salida si encuentra errores durante el proceso de enlazado; se cierra sin
escribir un archivo de salida cuando emite algún error.

-nostdlib
Solo busca los directorios de bibliotecas especificados explícitamente en la línea de comandos. Los
directorios de bibliotecas especificados en los scripts del enlazador (incluidos los scripts del enlazador especificados en
la línea de comandos) se ignoran.

--oformat=formato-de-salida
ld puede configurarse para admitir más de un tipo de archivo objeto. Si su ld está configurado
de esta manera, puede usar la opción --oformat para especificar el formato binario del archivo objeto
de salida. Incluso cuando ld está configurado para admitir formatos de objeto alternativos, normalmente
no necesita especificar esto, ya que ld debe configurarse para producir como formato de salida predeterminado
el formato más común en cada máquina. output-format es una cadena de texto, el nombre de un
formato particular compatible con las bibliotecas BFD. (Puede enumerar los formatos binarios disponibles con
objdump -i). El comando de script "OUTPUT_FORMAT" también puede especificar el formato de salida, pero esta
opción lo anula.

--out-implib archivo
Crea una biblioteca de importación en el archivo correspondiente al ejecutable que el enlazador está
generando (por ejemplo, un DLL o un programa ELF). Esta biblioteca de importación (que debe llamarse "*.dll.a" o "*.a"
para DLL) se puede usar para enlazar clientes con el ejecutable generado; este comportamiento permite
evitar un paso de creación de biblioteca de importación independiente (por ejemplo, "dlltool" para DLL).
Esta opción solo está disponible para los puertos del enlazador i386 PE y ELF.

-pie
--pic-executable
Crea un ejecutable independiente de la posición. Actualmente, esto solo es compatible con las
plataformas ELF. Los ejecutables independientes de la posición se reubican mediante el enlazador dinámico a
la dirección virtual que el SO elige para ellos, lo que puede variar entre las invocaciones. Están marcados como ET_DYN en
el encabezado del archivo ELF, pero difieren de las bibliotecas compartidas en varios aspectos. En particular,
los símbolos definidos en un PIE, de forma predeterminada, no se pueden sobrescribir por otro objeto como
pueden hacerlo en una biblioteca compartida.

-no-pie
Crea un ejecutable dependiente de la posición. Este es el valor predeterminado.

-qmagic
Esta opción se ignora para la compatibilidad con Linux.

-Qy Esta opción se ignora para la compatibilidad con SVR4.

--relax
--no-relax
Una opción con efectos dependientes de la máquina. Esta opción solo es compatible con algunos destinos.

En algunas plataformas, la opción --relax realiza optimizaciones globales específicas del destino que
se vuelven posibles cuando el enlazador resuelve el direccionamiento en el programa, como la relajación de los modos de
dirección, la síntesis de nuevas instrucciones, la selección de versiones más cortas de las instrucciones actuales y la
combinación de valores constantes.

En algunas plataformas, estas optimizaciones globales del tiempo de enlace pueden hacer que la
depuración simbólica del ejecutable resultante sea imposible. Se sabe que este es el caso de la familia de procesadores
Matsushita MN10200 y MN10300.

En las plataformas donde se admite la función, la opción --no-relax la desactivará.

En las plataformas donde la función no está admitida, tanto --relax como --no-relax son aceptadas, pero se ignoran.

--retain-symbols-file=nombre_archivo

Conserva solo los símbolos que figuran en el archivo nombre_archivo, descartando todos los demás. nombre_archivo es simplemente un archivo de texto plano, con un nombre de símbolo por línea. Esta opción es especialmente útil en entornos (como VxWorks) donde se acumula gradualmente una gran tabla de símbolos global, para conservar la memoria en tiempo de ejecución.

--retain-symbols-file no descarta los símbolos indefinidos ni los símbolos necesarios para las reubicaciones.

Solo puede especificar --retain-symbols-file una vez en la línea de comandos. Anula -s y -S.

-rpath=dir

Agrega un directorio a la ruta de búsqueda de la biblioteca en tiempo de ejecución. Esto se utiliza cuando se vincula un archivo ejecutable ELF con objetos compartidos. Todos los argumentos -rpath se concatenan y se pasan al enlazador de tiempo de ejecución, que los utiliza para localizar los objetos compartidos en tiempo de ejecución.

La opción -rpath también se utiliza cuando se localizan los objetos compartidos que son necesarios para los objetos compartidos incluidos explícitamente en el enlace; consulte la descripción de la opción -rpath-link. La búsqueda en -rpath de esta manera solo es compatible con los enlazadores nativos y los enlazadores cruzados que se han configurado con la opción --with-sysroot.

Si no se utiliza -rpath al vincular un archivo ejecutable ELF, el contenido de la variable de entorno "LD_RUN_PATH" se utilizará si está definida.

La opción -rpath también se puede utilizar en SunOS. De forma predeterminada, en SunOS, el enlazador formará una ruta de búsqueda en tiempo de ejecución a partir de todas las opciones -L que se le proporcionen. Si se utiliza una opción -rpath, la ruta de búsqueda en tiempo de ejecución se formará exclusivamente utilizando las opciones -rpath, ignorando las opciones -L. Esto puede ser útil cuando se utiliza gcc, que agrega muchas opciones -L que pueden estar en sistemas de archivos montados en NFS.

Para compatibilidad con otros enlazadores ELF, si la opción -R va seguida de un nombre de directorio, en lugar de un nombre de archivo, se trata como la opción -rpath.

-rpath-link=dir

Cuando se utiliza ELF o SunOS, una biblioteca compartida puede requerir otra. Esto ocurre cuando un "ld -shared" enlace incluye una biblioteca compartida como uno de los archivos de entrada.

Cuando el enlazador encuentra dicha dependencia al realizar un enlace no compartido y no reubicable, intentará automáticamente localizar la biblioteca compartida requerida e incluirla en el enlace, si no se incluye explícitamente. En tal caso, se buscan varios directorios como se describe a continuación. La opción -rpath-link especifica el primer conjunto de directorios a buscar. Esta opción puede especificar una secuencia de nombres de directorio proporcionando una lista de nombres separados por dos puntos, o apareciendo varias veces.

Los tokens $ORIGIN y $LIB pueden aparecer en estos directorios de búsqueda. Serán reemplazados por la ruta completa al directorio que contiene el programa u objeto compartido en el caso de $ORIGIN y ya sea lib (para binarios de 32 bits) o lib64 (para binarios de 64 bits) en el caso de $LIB.


La forma alternativa de estos tokens - ${ORIGIN} y ${LIB} también puede usarse. El token $PLATFORM no es compatible.

La opción --rpath-link debe usarse con precaución, ya que anula la ruta de búsqueda que puede haberse compilado en una biblioteca compartida. En tal caso, es posible que se utilice involuntariamente una ruta de búsqueda diferente a la que utilizaría el enlazador en tiempo de ejecución.

Cuando se requieren bibliotecas compartidas adicionales, el enlazador buscará los directorios en el orden que se indica a continuación para encontrarlos. Tenga en cuenta, sin embargo, que esto solo se aplica a las bibliotecas adicionales necesarias para satisfacer las bibliotecas compartidas ya incluidas. No se aplica a las bibliotecas que se incluyen mediante la opción de línea de comandos -l. Las búsquedas de bibliotecas -l solo se realizan en los directorios especificados por la opción -L.

    Cualquier directorio especificado por las opciones --rpath-link.

    Cualquier directorio especificado por las opciones --rpath. La diferencia entre --rpath y --rpath-link es que los directorios especificados por las opciones --rpath se incluyen en el ejecutable y se utilizan en tiempo de ejecución, mientras que la opción --rpath-link solo es efectiva en tiempo de enlace. La búsqueda de --rpath de esta manera solo es compatible con los enlazadores nativos y los enlazadores cruzados que se han configurado con la opción --with-sysroot.

    En un sistema ELF, para los enlazadores nativos, si no se utilizaron las opciones --rpath y --rpath-link, buscar en el contenido de la variable de entorno "LD_RUN_PATH".

    En SunOS, si no se utilizó la opción --rpath, buscar en cualquier directorio especificado mediante las opciones -L.

    Para un enlazador nativo, buscar en el contenido de la variable de entorno "LD_LIBRARY_PATH".

    Para un enlazador ELF nativo, los directorios en "DT_RUNPATH" o "DT_RPATH" de una biblioteca compartida se buscan para las bibliotecas compartidas que necesita. Las entradas "DT_RPATH" se ignoran si existen entradas "DT_RUNPATH".

    Para un enlazador para un sistema Linux, si existe el archivo /etc/ld.so.conf, la lista de directorios que se encuentran en ese archivo. Nota: la ruta a este archivo tiene como prefijo el valor "sysroot", si está definido, y luego cualquier cadena "prefix" si el enlazador se configuró con la opción --prefix=<path>.

    Para un enlazador nativo en un sistema FreeBSD, cualquier directorio especificado por la macro "_PATH_ELF_HINTS" definida en el archivo de encabezado elf-hints.h.

    Cualquier directorio especificado por un comando "SEARCH_DIR" en un script de enlazador dado en la línea de comandos, incluidos los scripts especificados por -T (pero no -dT).

    Los directorios predeterminados, normalmente /lib y /usr/lib.

    Cualquier directorio especificado por un complemento LDPT_SET_EXTRA_LIBRARY_PATH.

    Cualquier directorio especificado por un comando "SEARCH_DIR" en un script de enlazador predeterminado.

Tenga en cuenta que en los sistemas basados en Linux existe una advertencia adicional: si la opción --as-needed está activa y se encuentra una biblioteca compartida que normalmente satisfaría la búsqueda y esta biblioteca no tiene una etiqueta DT_NEEDED para libc.so y hay una biblioteca compartida más adelante en el conjunto de directorios de búsqueda que también satisface la búsqueda y esta segunda biblioteca tiene una etiqueta DT_NEEDED para libc.so, entonces se seleccionará la segunda biblioteca en lugar de la primera.


Si no se encuentra la biblioteca compartida requerida, el enlazador emitirá una advertencia y continuará con el enlazado.

--section-ordering-file=script

Esta opción se utiliza para complementar el script de enlazador actual con un mapeo adicional de secciones de entrada a secciones de salida. Este archivo debe utilizar la misma sintaxis para "SECTIONS" que se utiliza en los scripts de enlazador normales, pero solo debe asignar secciones de entrada a secciones de salida. @pxref{SECTIONS}

Una segunda restricción en el script de ordenamiento de secciones es que solo puede hacer referencia a secciones de salida que ya estén definidas por el script de enlazador que se esté utilizando actualmente (es decir, el script de enlazador predeterminado o un script especificado en la línea de comandos). Sin embargo, la ventaja del script de ordenamiento de secciones es que las secciones de entrada se asignan al inicio de las secciones de salida, de modo que pueden garantizar el orden de las secciones en la sección de salida. Por ejemplo, imagine que el script de enlazador predeterminado tiene este aspecto:

SECTIONS {
.text : { *(.text.hot) ; *(.text .text.*) }
.data : { *(.data.big) ; *(.data .data.*) }
}

Luego, si se utiliza un archivo de ordenamiento de secciones como este:

.text : { *(.text.first) ; *(.text.z*) }
.data : { foo.o(.data.first) ; *(.data.small) }

Esto sería equivalente a un script de enlazador como este:

SECTIONS {
.text : { *(.text.first) ; *(.text.z*) ; *(.text.hot) ; *(.text .text.*) }
.data : { foo.o(.data.first) ; *(.data.small) ; *(.data.big) ; *(.data .data.*) }
}

La ventaja del archivo de ordenamiento de secciones es que se puede utilizar para ordenar las secciones que son importantes para el usuario sin tener que preocuparse por ninguna otra sección, región de memoria o cualquier otra cosa.

-shared
-Bshareable

Crea una biblioteca compartida. Esto solo es compatible actualmente en ELF, XCOFF y plataformas SunOS. En SunOS, el enlazador creará automáticamente una biblioteca compartida si no se utiliza la opción -e y hay símbolos no definidos en el enlace.

--sort-common
--sort-common=ascending
--sort-common=descending

Esta opción le indica a ld que ordene los símbolos comunes por alineación en orden ascendente o descendente cuando los coloque en las secciones de salida apropiadas. Las alineaciones de símbolos que se consideran son dieciséis bytes o más, ocho bytes, cuatro bytes, dos bytes y un byte. Esto es para evitar espacios entre símbolos debido a restricciones de alineación. Si no se especifica ningún orden de clasificación, se asume el orden descendente.

--sort-section=name

Esta opción aplicará "SORT_BY_NAME" a todos los patrones de sección comodín en el script del enlazador.


--sort-section=alignment

Esta opción aplicará "SORT_BY_ALIGNMENT" a todos los patrones de sección comodín en el script del enlazador.

--spare-dynamic-tags=count

Esta opción especifica el número de espacios vacíos que se deben dejar en la sección .dynamic de los objetos compartidos ELF. Los espacios vacíos pueden ser necesarios para las herramientas de postprocesamiento, como el preenlazador. El valor predeterminado es 5.

--split-by-file[=size]

Similar a --split-by-reloc, pero crea una nueva sección de salida para cada archivo de entrada cuando se alcanza el tamaño. El tamaño predeterminado es 1 si no se especifica.

--split-by-reloc[=count]

Intenta crear secciones adicionales en el archivo de salida para que ninguna sección de salida en el archivo contenga más de "count" relocalizaciones. Esto es útil cuando se generan archivos de gran tamaño que se pueden relocalizar para su descarga en ciertos núcleos de tiempo real con el formato de archivo de objeto COFF; ya que COFF no puede representar más de 65535 relocalizaciones en una sola sección. Tenga en cuenta que esto no funcionará con los formatos de archivo de objeto que no admiten secciones arbitrarias. El enlazador no dividirá las secciones de entrada individuales para su redistribución, por lo que si una sola sección de entrada contiene más de "count" relocalizaciones, una sección de salida contendrá esa cantidad de relocalizaciones. "count" tiene un valor predeterminado de 32768.

--stats[=filename]

Calcula y muestra estadísticas sobre el funcionamiento del enlazador, como el tiempo de ejecución y el uso de memoria.

Si no se proporciona el argumento de nombre de archivo opcional, solo se informa la información básica y se envía a la salida estándar. Si se proporciona el argumento de nombre de archivo, la información extendida se escribe en el archivo con el nombre especificado. Si el nombre de archivo se establece en solo el símbolo, la información extendida se envía a la salida estándar. Si el nombre de archivo comienza con +, el archivo se abre en modo de anexar en lugar de en modo de sobrescritura.

Si se ha habilitado la opción -Map, la información también se registra en el archivo de mapa. Tenga en cuenta: si tanto la opción --stats como la opción -Map tienen argumentos de nombre de archivo y coinciden, la información solo se escribirá una vez, no dos veces.

Si la variable de entorno "LD_STATS" está definida, esto se comporta como la opción --stats. Si el valor de la variable es una cadena, esto se utilizará como el nombre de un archivo en el que se debe registrar la información. De lo contrario, la información se enviará a la salida estándar. El uso de la variable de entorno permite registrar las estadísticas sin tener que alterar la línea de comandos del enlazador. Tenga en cuenta: si tanto la variable de entorno como la opción --stats se utilizan, la opción --stats tiene prioridad.

La información extendida que se informa incluye el tiempo de CPU utilizado y, si la llamada al sistema de la biblioteca "getrusage()" está disponible, el uso de memoria también se registra. Esta información se informa para las partes individuales del proceso de enlace, que se denominan fases. Además, la información también se informa para una fase especial llamada TODAS, que cubre todo el proceso de enlace. Tenga en cuenta que las fases individuales pueden contener o superponerse entre sí, por lo que no se debe suponer que los recursos totales utilizados por el enlazador son la suma de los recursos utilizados por las fases individuales.


Además, cuando se informa información extendida, también se incluyen la versión del enlazador, los argumentos de la línea de comandos y la hora de inicio del enlazador. Esto facilita la gestión de la situación en la que un sistema de construcción invoca múltiples enlazamientos y la identificación de los argumentos exactos que fueron responsables de generar las estadísticas que se informan.

La salida extendida tiene un aspecto similar a este:

Estadísticas: versión del enlazador: (GNU Binutils) 2.44.50.20250401
Estadísticas: enlazador iniciado: Mié 2 de abril de 09:36:41 2025
Estadísticas: argumentos: ld -z norelro -z nomemory-seal -z no-separate-code -o a.out [...]

Estadísticas: fase             tiempo de CPU   memoria      tiempo de usuario   tiempo de sistema
Estadísticas: nombre           (microsegundos) (KiB)        (segundos)          (segundos)
Estadísticas: TOTAL               390082      217740              0                0
Estadísticas: procesamiento ctf    12          0                0                0
Estadísticas: fusión de cadenas   1324         0                0                0
Estadísticas: análisis            349          288              0                0
Estadísticas: complementos        1            0                0                0
Estadísticas: procesamiento de archivos  259616    214524              0                0
Estadísticas: escritura           116493         0                0                0

--no-stats

Desactiva la generación de informes de estadísticas de uso, incluso si se habilitó mediante la opción de línea de comandos --stats o la variable de entorno LD_STATS.

--sysroot=directorio

Utilice el directorio como la ubicación del sysroot, anulando el valor predeterminado configurado en tiempo de compilación. Esta opción solo es compatible con los enlazadores que se configuraron utilizando --with-sysroot.

--task-link

Esto se utiliza en los destinos basados en COFF/PE para crear un archivo de objeto enlazado por tareas donde todos los símbolos globales se han convertido en estáticos.

--traditional-format

Para algunos destinos, la salida de ld es diferente en algunos aspectos de la salida de algunos enlazadores existentes. Este modificador solicita a ld que utilice el formato tradicional.

Por ejemplo, en SunOS, ld combina las entradas duplicadas en la tabla de cadenas de símbolos. Esto puede reducir el tamaño de un archivo de salida con información de depuración completa en más del 30 por ciento. Desafortunadamente, el programa SunOS "dbx" no puede leer el programa resultante ("gdb" no tiene problemas). El modificador --traditional-format indica a ld que no combine las entradas duplicadas.

--section-start=nombresección=org

Ubique una sección en el archivo de salida en la dirección absoluta dada por org. Puede utilizar esta opción tantas veces como sea necesario para ubicar varias secciones en la línea de comandos. org debe ser un solo entero hexadecimal; para la compatibilidad con otros enlazadores, puede omitir el prefijo 0x que normalmente se asocia con los valores hexadecimales. Nota: no debe haber espacio en blanco entre nombresección, el signo igual ("=") y org.


--image-base=org

Cuando se utiliza ELF, es lo mismo que -Ttext-segment, con ambas opciones estableciendo efectivamente la dirección base del ejecutable ELF.

Cuando se utiliza PE, utiliza el valor como la dirección base de tu programa o DLL. Esta es la ubicación de memoria más baja que se utilizará cuando se cargue tu programa o DLL. Para reducir la necesidad de reubicación y mejorar el rendimiento de tus DLL, cada una debería tener una dirección base única y no superponerse con otras DLL. El valor predeterminado es 0x400000 para ejecutables y 0x10000000 para DLL.

-Tbss=org
-Tdata=org
-Ttext=org

Es lo mismo que --section-start, con ".bss", ".data" o ".text" como nombre de sección.

-Ttext-segment=org

Cuando se crea un ejecutable ELF, establecerá la dirección del primer byte del primer segmento. Ten en cuenta que cuando se utiliza -pie con -Ttext-segment=org, el ejecutable de salida se marca como ET_EXEC para que la dirección del primer byte del segmento de texto se garantice que sea org en tiempo de ejecución.

-Trodata-segment=org

Cuando se crea un ejecutable ELF o un objeto compartido para un destino donde los datos de solo lectura están en su propio segmento separado del texto ejecutable, establecerá la dirección del primer byte del segmento de datos de solo lectura.

-Tldata-segment=org

Cuando se crea un ejecutable ELF o un objeto compartido para el modelo de memoria media x86-64, establecerá la dirección del primer byte del segmento ldata.

--unresolved-symbols=method

Determina cómo manejar los símbolos no resueltos. Hay cuatro valores posibles para method:

ignore-all

No informar de ningún símbolo no resuelto.

report-all

Informar de todos los símbolos no resueltos. Este es el valor predeterminado.

ignore-in-object-files

Informar de los símbolos no resueltos que se encuentran en las bibliotecas compartidas, pero ignorarlos si provienen de archivos de objeto regulares.

ignore-in-shared-libs

Informar de los símbolos no resueltos que provienen de archivos de objeto regulares, pero ignorarlos si provienen de bibliotecas compartidas. Esto puede ser útil al crear un binario dinámico y se sabe que todas las bibliotecas compartidas a las que se debe hacer referencia se incluyen en la línea de comandos del enlazador.

El comportamiento para las bibliotecas compartidas por sí solas también se puede controlar mediante la opción --[no-]allow-shlib-undefined.

Normalmente, el enlazador generará un mensaje de error para cada símbolo no resuelto informado, pero la opción --warn-unresolved-symbols puede cambiar esto a una advertencia.

--dll-verbose
--verbose[=NUMBER]

Mostrar el número de versión de ld y enumerar las emulaciones del enlazador admitidas. Mostrar qué archivos de entrada se pueden abrir y cuáles no. Mostrar el script del enlazador que está utilizando el enlazador. Si el argumento opcional NUMBER es > 1, también se mostrará el estado de los símbolos del complemento.

--version-script=version-scriptfile

Especifica el nombre de un script de versión para el enlazador. Esto se utiliza normalmente al crear bibliotecas compartidas para especificar información adicional sobre la jerarquía de versiones de la biblioteca que se está creando. Esta opción solo es totalmente compatible en las plataformas ELF que admiten bibliotecas compartidas; consulta VERSION. Es parcialmente compatible en las plataformas PE, que pueden utilizar scripts de versión para filtrar la visibilidad de los símbolos en el modo de exportación automática: cualquier símbolo marcado como local en el script de versión no se exportará.


--warn-common
Advertencia cuando un símbolo común se combina con otro símbolo común o con una definición de símbolo.
Los enlazadores de Unix permiten esta práctica algo descuidada, pero los enlazadores en algunos otros sistemas operativos no lo permiten.
Esta opción le permite encontrar posibles problemas derivados de la combinación de símbolos globales.
Desafortunadamente, algunas bibliotecas de C utilizan esta práctica, por lo que puede recibir algunas advertencias sobre los símbolos
de las bibliotecas, así como de sus programas.

Hay tres tipos de símbolos globales, ilustrados aquí con ejemplos de C:

int i = 1;
Una definición, que va en la sección de datos inicializados del archivo de salida.

extern int i;
Una referencia no definida, que no asigna espacio. Debe haber ya sea una definición o un símbolo común para la variable en alguna parte.

int i;
Un símbolo común. Si solo hay (uno o más) símbolos comunes para una variable, va
en el área de datos no inicializados del archivo de salida. El enlazador fusiona varios símbolos comunes
de la misma variable en un solo símbolo. Si son de diferentes tamaños, elige el tamaño más grande. El enlazador convierte un símbolo común en una declaración, si existe
una definición de la misma variable.

La opción --warn-common puede generar cinco tipos de advertencias. Cada advertencia consta de un par
de líneas: la primera describe el símbolo que se encontró y la segunda describe el
símbolo anterior que se encontró con el mismo nombre. Uno o ambos de los dos símbolos serán un
símbolo común.

    Convertir un símbolo común en una referencia, porque ya existe una definición para
el símbolo.

<file>(<section>): advertencia: símbolo común de `<symbol>'
anulado por definición
<file>(<section>): advertencia: definido aquí

    Convertir un símbolo común en una referencia, porque se encuentra una definición posterior para el símbolo.
Este es el mismo caso que el anterior, excepto que los símbolos se
encuentran en un orden diferente.

<file>(<section>): advertencia: definición de `<symbol>'
anulando símbolo común
<file>(<section>): advertencia: el símbolo común está aquí

    Fusionar un símbolo común con un símbolo común anterior del mismo tamaño.

<file>(<section>): advertencia: varios símbolos comunes
de `<symbol>'
<file>(<section>): advertencia: el símbolo común anterior está aquí

    Fusionar un símbolo común con un símbolo común anterior más grande.

<file>(<section>): advertencia: símbolo común de `<symbol>'
anulado por símbolo común más grande
<file>(<section>): advertencia: el símbolo común más grande está aquí

    Fusionar un símbolo común con un símbolo común anterior más pequeño. Este es el mismo caso que
el anterior, excepto que los símbolos se encuentran en un orden diferente.

<file>(<section>): advertencia: común de `<symbol>'
anulando el común más pequeño
<file>(<section>): advertencia: el común más pequeño está aquí

--warn-constructors
Advertir si se utilizan constructores globales. Esto solo es útil para algunos formatos de archivo de objeto.
Para formatos como COFF o ELF, el enlazador no puede detectar el uso de constructores globales.

--warn-execstack
--warn-execstack-objects
--no-warn-execstack
En las plataformas ELF, el enlazador puede generar mensajes de advertencia si se le pide que cree un archivo de salida
que contenga una pila ejecutable. Hay tres posibles estados:

     No generar ninguna advertencia.

     Generar siempre advertencias, incluso si la pila ejecutable se solicita a través de la opción de línea de comandos -z execstack.

     Generar una advertencia solo si un archivo de objeto solicita una pila ejecutable, pero no si se utiliza la opción -z execstack.

El estado predeterminado depende de cómo se configuró el enlazador cuando se compiló. La opción --no-warn-execstack
siempre coloca al enlazador en el estado de no generar advertencias. La opción --warn-execstack coloca al enlazador
en el estado de generar siempre advertencias. La opción --warn-execstack-objects coloca al enlazador en el estado
de generar advertencias solo para archivos de objeto.

Nota: los archivos de entrada en formato ELF pueden especificar que necesitan una pila ejecutable al tener una
sección .note.GNU-stack con el bit de ejecución establecido en sus indicadores de sección. Pueden especificar
que no necesitan una pila ejecutable al tener la misma sección, pero sin el bit de indicador de ejecución establecido.
Si un archivo de entrada no tiene una sección .note.GNU-stack, el comportamiento predeterminado es específico del destino.
Para algunos destinos, la ausencia de dicha sección implica que se requiere una pila ejecutable. Este suele ser un problema
para los archivos ensamblador creados manualmente.

--error-execstack
--no-error-execstack
Si el enlazador va a generar un mensaje de advertencia sobre una pila ejecutable, la opción --error-execstack
convertirá esa advertencia en un error. Tenga en cuenta que esta opción no cambia el estado de generación de advertencias
de pila ejecutable del enlazador. Utilice --warn-execstack o --warn-execstack-objects para establecer un estado de advertencia específico.

La opción --no-error-execstack restaurará el comportamiento predeterminado de generar mensajes de advertencia.

--warn-multiple-gp
Advertir si se requieren múltiples valores de puntero global en el archivo de salida. Esto solo es significativo
para ciertos procesadores, como Alpha. Específicamente, algunos procesadores colocan constantes de gran valor en una sección especial.
Un registro especial (el puntero global) apunta al centro de esta sección, de modo que las constantes se puedan cargar
de manera eficiente mediante un modo de direccionamiento relativo a la base. Dado que el desplazamiento en el modo de direccionamiento
relativo a la base es fijo y relativamente pequeño (por ejemplo, 16 bits), esto limita el tamaño máximo del grupo de constantes.
Por lo tanto, en los programas grandes, a menudo es necesario utilizar múltiples valores de puntero global para poder
direccionar todas las constantes posibles. Esta opción hace que se emita una advertencia cada vez que ocurre este caso.

--warn-once
Solo advertir una vez por cada símbolo no definido, en lugar de una vez por cada módulo que se refiere a él.

--warn-rwx-segments
--no-warn-rwx-segments
Advertir si el enlazador crea un segmento cargable, de tamaño no cero, que tenga los tres indicadores de permiso (lectura, escritura y ejecución) establecidos. Dicho segmento representa una posible vulnerabilidad de seguridad. Además, se generarán advertencias si se crea un segmento de almacenamiento local de hilos con el indicador de permiso de ejecución establecido, independientemente de si tiene o no los indicadores de lectura y/o escritura establecidos.

Estas advertencias están habilitadas por defecto. Pueden desactivarse mediante la opción --no-warn-rwx-segments y volver a habilitarse mediante la opción --warn-rwx-segments.

--error-rwx-segments
--no-error-rwx-segments
Si el enlazador va a generar un mensaje de advertencia sobre un segmento ejecutable o un segmento de almacenamiento local de hilos ejecutable, la opción --error-rwx-segments convertirá esta advertencia en un error. La opción --no-error-rwx-segments restaurará el comportamiento predeterminado de simplemente generar un mensaje de advertencia.

Nota: la opción --error-rwx-segments no activa por sí sola las advertencias sobre estos segmentos. Estas advertencias están habilitadas por defecto, si el enlazador se configuró de esa manera, o mediante la opción de línea de comandos --warn-rwx-segments.

--warn-section-align
Advertir si la dirección de una sección de salida se cambia debido a la alineación. Normalmente, la alineación la establece una sección de entrada. La dirección solo se cambiará si no se especifica explícitamente; es decir, si el comando "SECTIONS" no especifica una dirección de inicio para la sección.

--warn-textrel
Advertir si el enlazador agrega DT\_TEXTREL a un ejecutable independiente de la posición o a un objeto compartido.

--warn-alternate-em
Advertir si un objeto tiene un código de máquina ELF alternativo.

--warn-unresolved-symbols
Si el enlazador va a informar de un símbolo no resuelto (consulte la opción --unresolved-symbols), normalmente generará un error. Esta opción hace que genere una advertencia en su lugar.

--error-unresolved-symbols
Esto restaura el comportamiento predeterminado del enlazador de generar errores cuando informa de símbolos no resueltos.

--whole-archive
Para cada archivo de biblioteca mencionado en la línea de comandos después de la opción --whole-archive, incluya cada archivo de objeto en la biblioteca en el enlace, en lugar de buscar en la biblioteca los archivos de objeto requeridos. Esto normalmente se utiliza para convertir un archivo de biblioteca en una biblioteca compartida, lo que obliga a que se incluya cada objeto en la biblioteca compartida resultante. Esta opción se puede utilizar más de una vez.

Dos notas al utilizar esta opción desde gcc: Primero, gcc no conoce esta opción, por lo que debe utilizar -Wl,-whole-archive. En segundo lugar, no olvide utilizar -Wl,-no-whole-archive después de su lista de bibliotecas, porque gcc agregará su propia lista de bibliotecas a su enlace y es posible que no desee que esta marca afecte a esas bibliotecas.

--wrap=symbol

Utiliza una función de envoltura para el símbolo. Cualquier referencia no definida a symbol se resolverá a "__wrap_symbol". Cualquier referencia no definida a "__real_symbol" se resolverá a symbol.

Esto se puede utilizar para proporcionar una envoltura para una función del sistema. La función de envoltura debe llamarse `"__wrap_symbol"`. Si desea llamar a la función del sistema, debe llamar a `"__real_symbol"`.

Aquí hay un ejemplo trivial:

void *
__wrap_malloc (size_t c)
{
printf ("malloc llamada con %zu\n", c);
return __real_malloc (c);
}

Si vincula otro código con este archivo utilizando --wrap malloc, entonces todas las llamadas a "malloc" llamarán a la función "__wrap_malloc" en su lugar. La llamada a "__real_malloc" en "__wrap_malloc" llamará a la función "malloc" real.

Es posible que desee proporcionar una función "__real_malloc" también, para que las vinculaciones sin la opción --wrap tengan éxito. Si lo hace, no debe colocar la definición de "__real_malloc" en el mismo archivo que "__wrap_malloc"; si lo hace, el ensamblador puede resolver la llamada antes de que el enlazador tenga la oportunidad de envolverla a "malloc".

Solo las referencias no definidas se reemplazan mediante el enlazador. Por lo tanto, las referencias internas de la unidad de traducción a symbol no se resuelven a "__wrap_symbol". En el siguiente ejemplo, la llamada a "f" en "g" no se resuelve a "__wrap_f".

int
f (void)
{
return 123;
}

int
g (void)
{
return f();
}

--eh-frame-hdr
--no-eh-frame-hdr

Solicita (--eh-frame-hdr) o suprime (--no-eh-frame-hdr) la creación de la sección .eh_frame_hdr y la cabecera de segmento ELF PT_GNU_EH_FRAME.

--no-ld-generated-unwind-info

Solicita la creación de información de desenredado .eh_frame para las secciones de código generadas por el enlazador, como la PLT. Esta opción está activada de forma predeterminada si el enlazador admite la información de desenredado generada. Esta opción también controla la generación de la información de rastreo de pila .sframe para las secciones de código generadas por el enlazador, como la PLT.

--enable-new-dtags
--disable-new-dtags

Este enlazador puede crear las nuevas etiquetas dinámicas en ELF. Pero los sistemas ELF más antiguos pueden no entenderlas. Si especifica --enable-new-dtags, se crearán las nuevas etiquetas dinámicas según sea necesario y se omitirán las etiquetas dinámicas más antiguas. Si especifica --disable-new-dtags, no se crearán nuevas etiquetas dinámicas. Por defecto, no se crean las nuevas etiquetas dinámicas. Tenga en cuenta que estas opciones solo están disponibles para los sistemas ELF.

--hash-size=number

Establece el tamaño predeterminado de las tablas hash del enlazador en un número primo cercano a number. Aumentar este valor puede reducir la duración de las tareas del enlazador, a expensas de aumentar los requisitos de memoria del enlazador. De manera similar, reducir este valor puede reducir los requisitos de memoria a expensas de la velocidad. El valor predeterminado es 4051 en circunstancias normales y 1021 si se utiliza la opción de línea de comandos --reduce-memory-overheads.


--hash-style=style
Establece el tipo de tabla hash del enlazador. style puede ser "sysv" para la sección ELF clásica ".hash", "gnu" para la nueva sección GNU ".gnu.hash" o "both" para ambas, la sección ELF clásica ".hash" y la nueva sección GNU ".gnu.hash". El valor predeterminado depende de cómo se configuró el enlazador, pero para la mayoría de los sistemas basados en Linux será "both".

--compress-debug-sections=none
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
--compress-debug-sections=zstd
En las plataformas ELF, estas opciones controlan cómo se comprimen las secciones de depuración DWARF utilizando zlib.

--compress-debug-sections=none no comprime las secciones de depuración DWARF.
--compress-debug-sections=zlib-gnu comprime las secciones de depuración DWARF y las renombra para que comiencen con .zdebug en lugar de .debug. --compress-debug-sections=zlib-gabi también comprime las secciones de depuración DWARF, pero en lugar de renombrarlas, establece el indicador SHF_COMPRESSED en los encabezados de las secciones.

La opción --compress-debug-sections=zlib es un alias de --compress-debug-sections=zlib-gabi.

--compress-debug-sections=zstd comprime las secciones de depuración DWARF utilizando zstd.

Tenga en cuenta que esta opción anula cualquier compresión en las secciones de depuración de entrada, por lo que si un binario se enlaza con --compress-debug-sections=none, por ejemplo, cualquier sección de depuración comprimida en los archivos de entrada se descomprimirá antes de copiarse en el binario de salida.

El comportamiento de compresión predeterminado varía según el destino y las opciones de configuración utilizadas para compilar el conjunto de herramientas. El valor predeterminado se puede determinar examinando la salida de la opción --help del enlazador.

--reduce-memory-overheads
Esta opción reduce los requisitos de memoria en tiempo de ejecución del enlazador, a costa de la velocidad de enlazado. Esto se introdujo para seleccionar el algoritmo antiguo O(n^2) para la generación de archivos de mapa de enlaces, en lugar del nuevo algoritmo O(n) que utiliza aproximadamente un 40% más de memoria para el almacenamiento de símbolos.

Otro efecto del interruptor es establecer el tamaño predeterminado de la tabla hash en 1021, lo que también ahorra memoria a costa de alargar el tiempo de ejecución del enlazador. Sin embargo, esto no se hace si se ha utilizado el interruptor --hash-size.

El interruptor --reduce-memory-overheads también se puede utilizar para habilitar otros intercambios en futuras versiones del enlazador.

--max-cache-size=size
Normalmente, ld almacena en caché la información de reubicación y las tablas de símbolos de los archivos de entrada en la memoria con un tamaño ilimitado. Esta opción establece el tamaño máximo de la caché en size. Tenga en cuenta que si se ha utilizado la opción de línea de comandos --no-keep-memory, el enlazador actúa como si el tamaño máximo de la caché se hubiera establecido en 0, es decir, no se retiene nada.

--build-id
--build-id=style
Solicita la creación de una sección de nota ELF ".note.gnu.build-id" o una sección COFF ".buildid". El contenido de la nota son bits únicos que identifican este archivo enlazado. style puede ser "uuid" para usar 128 bits aleatorios, "sha1" para usar un hash SHA1 de 160 bits, "md5" para usar un hash MD5 de 128 bits, o "xx" para usar un XXHASH de 128 bits en las partes normativas del contenido de salida; o "0xhexstring" para usar una cadena de bits elegida especificada como un número par de dígitos hexadecimales (los caracteres "-" y ":" entre pares de dígitos se ignoran). Si se omite style, se utiliza "sha1".

Los estilos "md5", "sha1" y "xx" producen un identificador que siempre es el mismo en un archivo de salida idéntico, pero que casi con certeza es único entre todos los archivos de salida no idénticos. No está diseñado para ser comparado como una suma de comprobación del contenido del archivo. Un archivo enlazado puede modificarse más tarde por otras herramientas, pero la cadena de bits de ID de compilación que identifica el archivo enlazado original no cambia.

Pasar "none" para el estilo deshabilita la configuración de cualquier opción "--build-id" anterior en la línea de comandos.

--package-metadata=JSON
Solicita la creación de una sección de nota ELF ".note.package". El contenido de la nota está en formato JSON, según la especificación de metadatos del paquete. Para obtener más información, consulte:
https://systemd.io/ELF_PACKAGE_METADATA/. El argumento JSON admite la codificación de porcentaje y la siguiente codificación %[string] (donde string se refiere al nombre en las referencias de caracteres con nombre de HTML): %[comma] para ,, %[lbrace] para {, %[quot] para ", %[rbrace] para } y %[space] para el carácter de espacio. Si el argumento JSON falta o está vacío, esto deshabilitará la creación de la nota de metadatos, si ya se había habilitado mediante una aparición anterior de la opción --package-metadata. Si el enlazador se ha compilado con libjansson, la cadena JSON se validará.

El enlazador PE i386 admite la opción -shared, que hace que la salida sea una biblioteca enlazada dinámicamente (DLL) en lugar de un ejecutable normal. Debe nombrar la salida "*.dll" cuando utilice esta opción. Además, el enlazador admite completamente los archivos "*.def" estándar, que se pueden especificar en la línea de comandos del enlazador como un archivo de objeto (de hecho, debe preceder a los archivos que exportan símbolos, para asegurarse de que se enlacen, al igual que un archivo de objeto normal).

Además de las opciones comunes a todos los destinos, el enlazador PE i386 admite opciones adicionales de línea de comandos que son específicas del destino PE i386. Las opciones que toman valores se pueden separar de sus valores mediante un espacio o un signo igual.

--add-stdcall-alias

Si se proporciona, los símbolos con un sufijo stdcall (@nn) se exportarán tal cual y también con el sufijo eliminado. [Esta opción es específica de la versión del enlazador dirigida a PE i386].

--base-file file

Utilice el archivo como el nombre de un archivo en el que guardar las direcciones base de todas las reubicaciones necesarias para generar DLL con dlltool. [Esta es una opción específica de PE i386].

--dll

Cree una DLL en lugar de un ejecutable normal. También puede utilizar -shared o especificar una "LIBRARY" en un archivo ".def" determinado. [Esta opción es específica de la versión del enlazador dirigida a PE i386].


--enable-long-section-names
--disable-long-section-names

Las variantes de PE del formato de objeto COFF añaden una extensión que permite el uso de nombres de sección de más de ocho caracteres, que es el límite normal para COFF. Por defecto, estos nombres solo están permitidos en archivos de objeto, ya que las imágenes ejecutables totalmente enlazadas no llevan la tabla de cadenas COFF necesaria para admitir los nombres más largos. Como extensión de GNU, es posible permitir su uso en imágenes ejecutables o, posiblemente, deshabilitarlo en archivos de objeto, utilizando estas dos opciones. Las imágenes ejecutables generadas con estos nombres de sección largos son ligeramente no estándar, ya que llevan una tabla de cadenas, y pueden generar una salida confusa cuando se examinan con herramientas PE no GNU, como visores y volcadores. Sin embargo, GDB depende del uso de nombres de sección PE largos para encontrar las secciones de información de depuración Dwarf-2 en una imagen ejecutable en tiempo de ejecución, por lo que si no se especifica ninguna de las dos opciones en la línea de comandos, ld habilitará los nombres de sección largos, anulando el comportamiento predeterminado y técnicamente correcto, cuando encuentre la presencia de información de depuración al enlazar una imagen ejecutable y no eliminar los símbolos. [Esta opción es válida para todos los puertos PE del enlazador]

--enable-stdcall-fixup
--disable-stdcall-fixup

Si el enlazador encuentra un símbolo que no puede resolver, intentará realizar un "enlazado difuso" buscando otro símbolo definido que difiera solo en el formato del nombre del símbolo (cdecl frente a stdcall) y resolverá ese símbolo enlazándolo con la coincidencia. Por ejemplo, el símbolo indefinido "_foo" podría enlazarse a la función "_foo@12", o el símbolo indefinido "_bar@16" podría enlazarse a la función "_bar". Cuando el enlazador hace esto, imprime una advertencia, ya que normalmente debería haber fallado al enlazar, pero a veces las bibliotecas de importación generadas a partir de DLL de terceros pueden necesitar que esta característica sea utilizable. Si especifica --enable-stdcall-fixup, esta característica se habilita por completo y no se imprimen las advertencias. Si especifica --disable-stdcall-fixup, esta característica se deshabilita y tales desajustes se consideran errores. [Esta opción es específica del puerto PE de i386 del enlazador]

--leading-underscore
--no-leading-underscore

Para la mayoría de los destinos, el prefijo de símbolo predeterminado es un guión bajo y se define en la descripción del destino. Con esta opción, es posible deshabilitar o habilitar el prefijo de símbolo de guión bajo predeterminado.

--export-all-symbols
Si se proporciona, todos los símbolos globales en los objetos utilizados para construir una DLL se exportarán desde la DLL. Tenga en cuenta que este es el valor predeterminado si de otro modo no habría símbolos exportados. Cuando los símbolos se exportan explícitamente a través de archivos DEF o se exportan implícitamente a través de atributos de función, el valor predeterminado es no exportar nada más a menos que se proporcione esta opción. Tenga en cuenta que los símbolos "DllMain@12", "DllEntryPoint@0", "DllMainCRTStartup@12" y "impure_ptr" no se exportarán automáticamente. Además, los símbolos importados de otras DLL no se volverán a exportar, ni se exportarán los símbolos que especifican el diseño interno de la DLL, como aquellos que comienzan con "_head_" o terminan con "_iname". Además, no se exportarán símbolos de "libgcc", "libstd++", "libmingw32" o "crtX.o". Los símbolos cuyos nombres comienzan con "__rtti_" o "__builtin_" no se exportarán, para ayudar con las DLL de C++. Finalmente, hay una extensa lista de símbolos privados de Cygwin que no se exportan (obviamente, esto se aplica cuando se construyen DLL para destinos Cygwin). Estos símbolos excluidos de 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" y "environ". [Esta opción es específica del puerto PE de i386 del enlazador]

--exclude-symbols símbolo,símbolo,...
Especifica una lista de símbolos que no deben exportarse automáticamente. Los nombres de los símbolos pueden estar delimitados por comas o dos puntos. [Esta opción es específica para la versión del enlazador dirigida a i386 PE].

--exclude-all-symbols
Especifica que no se deben exportar símbolos automáticamente. [Esta opción es específica para la versión del enlazador dirigida a i386 PE].

--file-alignment
Especifica la alineación del archivo. Las secciones del archivo siempre comenzarán en desplazamientos de archivo que sean múltiplos de este número. El valor predeterminado es 512. [Esta opción es específica para la versión del enlazador dirigida a i386 PE].

--heap reserve
--heap reserve,commit
Especifica el número de bytes de memoria que se reservarán (y, opcionalmente, se asignarán) para usarse como pila para este programa. El valor predeterminado es 1 MB reservado y 4 KB asignado. [Esta opción es específica para la versión del enlazador dirigida a i386 PE].

--kill-at
Si se proporciona, los sufijos stdcall (@nn) se eliminarán de los símbolos antes de que se exporten. [Esta opción es específica para la versión del enlazador dirigida a i386 PE].

--large-address-aware
Si se proporciona, se establecerá el bit adecuado en el campo "Características" del encabezado COFF para indicar que este ejecutable admite direcciones virtuales mayores de 2 gigabytes. Esto debe usarse en conjunto con la opción /3GB o /USERVA=valor megabytes en la sección "[sistemas operativos]" del archivo BOOT.INI. De lo contrario, esta opción no tendrá ningún efecto. [Esta opción es específica para las versiones del enlazador dirigidas a PE].

--disable-large-address-aware
Revierte el efecto de una opción --large-address-aware anterior. Esto es útil si --large-address-aware siempre se establece mediante el controlador del compilador (por ejemplo, Cygwin gcc) y el ejecutable no admite direcciones virtuales mayores de 2 gigabytes. [Esta opción es específica para las versiones del enlazador dirigidas a PE].

--major-image-version valor
Establece el número principal de la "versión de la imagen". El valor predeterminado es 1. [Esta opción es específica para la versión del enlazador dirigida a i386 PE].

--major-os-version valor
Establece el número principal de la "versión del sistema operativo". El valor predeterminado es 4. [Esta opción es específica para la
versión del enlazador dirigida a i386 PE]

--major-subsystem-version valor
Establece el número principal de la "versión del subsistema". El valor predeterminado es 4. [Esta opción es específica para
la versión del enlazador dirigida a i386 PE]

--minor-image-version valor
Establece el número secundario de la "versión de la imagen". El valor predeterminado es 0. [Esta opción es específica para
la versión del enlazador dirigida a i386 PE]

--minor-os-version valor
Establece el número secundario de la "versión del sistema operativo". El valor predeterminado es 0. [Esta opción es específica para
la versión del enlazador dirigida a i386 PE]

--minor-subsystem-version valor
Establece el número secundario de la "versión del subsistema". El valor predeterminado es 0. [Esta opción es específica para
la versión del enlazador dirigida a i386 PE]

--output-def archivo
El enlazador creará el archivo archivo, que contendrá un archivo DEF correspondiente a la DLL que está generando el enlazador. Este archivo DEF (que debe llamarse "*.def") puede utilizarse para
crear una biblioteca de importación con "dlltool" o puede utilizarse como referencia para exportar símbolos de forma automática o
implícita. [Esta opción es específica para la versión del enlazador dirigida a i386 PE]

--enable-auto-image-base
--enable-auto-image-base=valor
Elija automáticamente la base de la imagen para las DLL, opcionalmente comenzando con el valor base, a menos que se especifique una
con el argumento "--image-base". Al utilizar un hash generado a partir del nombre de la DLL para crear bases de imagen únicas para cada DLL, se evitan las colisiones en memoria y las reubicaciones, lo que puede
retrasar la ejecución del programa. [Esta opción es específica para la versión del enlazador dirigida a i386 PE]

--disable-auto-image-base
No genere automáticamente una base de imagen única. Si no hay ninguna base de imagen especificada por el usuario ("--image-base"), entonces
utilice el valor predeterminado de la plataforma. [Esta opción es específica para la versión del enlazador dirigida a i386 PE]

--dll-search-prefix cadena
Cuando se enlaza dinámicamente a una DLL sin una biblioteca de importación, busque
"<cadena><nombre_base>.dll" en lugar de "lib<nombre_base>.dll". Este comportamiento permite distinguir fácilmente entre las DLL creadas para las diversas "subplataformas": nativa, Cygwin, uwin, pw, etc.
Por ejemplo, las DLL de Cygwin suelen utilizar "--dll-search-prefix=cyg". [Esta opción es específica
para la versión del enlazador dirigida a i386 PE]

--enable-auto-import
Realice un enlazado sofisticado de "\_símbolo" a "\_\_imp\_\_símbolo" para las importaciones de DATOS de DLL, lo que permite
evitar el mecanismo dllimport del lado del usuario y hacer referencia a nombres de símbolos no modificados. [Esta opción es específica para la versión del enlazador dirigida a i386 PE]

Las siguientes observaciones se refieren a la implementación original de la función y ahora son obsoletas
para los destinos Cygwin y MinGW.

Nota: El uso de la extensión 'auto-import' hará que la sección de texto del archivo de imagen sea
de escritura. Esto no se ajusta a la especificación de formato PE-COFF publicada por Microsoft.

Nota: el uso de la extensión 'auto-import' también provocará que los datos de solo lectura que normalmente se colocarían en la sección '.rdata' se coloquen en la sección '.data' en su lugar. Esto se hace para solucionar un problema con las constantes que se describe aquí: http://www.cygwin.com/ml/cygwin/2004-09/msg01101.html

El uso de 'auto-import' generalmente "funcionará" sin problemas, pero a veces puede aparecer este mensaje:

"La variable '<var>' no se puede importar automáticamente. Consulte la documentación de ld para "--enable-auto-import" para obtener más detalles".

Este mensaje ocurre cuando alguna (sub)expresión accede a una dirección que, en última instancia, se obtiene sumando dos constantes (las tablas de importación de Win32 solo permiten una). Los casos en los que esto puede ocurrir incluyen el acceso a los campos miembros de las variables de estructura importadas de un DLL, así como el uso de un índice constante en una variable de matriz importada de un DLL. Cualquier variable de varias palabras (matrices, estructuras, long long, etc.) puede provocar este error. Sin embargo, independientemente del tipo de datos exacto de la variable exportada que cause problemas, ld siempre lo detectará, emitirá la advertencia y saldrá.

Existen varias formas de abordar esta dificultad, independientemente del tipo de datos de la variable exportada:

Una forma es utilizar la opción --enable-runtime-pseudo-reloc. Esto deja la tarea de ajustar las referencias en su código cliente para el entorno de tiempo de ejecución, por lo que este método solo funciona cuando el entorno de tiempo de ejecución lo admite.

Una segunda solución es forzar que una de las 'constantes' sea una variable, es decir, desconocida y no optimizable en tiempo de compilación. Para las matrices, hay dos posibilidades: a) hacer que el índice (la dirección de la matriz) sea una variable, o b) hacer que el 'índice' constante sea una variable. Así:

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

o

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

Para las estructuras (y la mayoría de los demás tipos de datos de varias palabras), la única opción es hacer que la estructura en sí (o el long long, o el ...) sea una variable:

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

o

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

Un tercer método para abordar esta dificultad es abandonar 'auto-import' para el símbolo que causa problemas y marcarlo con "__declspec(dllimport)". Sin embargo, en la práctica, esto requiere el uso de #defines en tiempo de compilación para indicar si está compilando un DLL, compilando código cliente que se vinculará al DLL o simplemente compilando/vinculándose a una biblioteca estática. Al elegir entre los diferentes métodos para resolver el 'problema de dirección directa con desplazamiento constante', debe considerar el uso típico en el mundo real:

Original:

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

Solución 1:

--foo.h
extern int arr[];
--foo.c
#include "foo.h"
void main(int argc, char **argv){
/* Esta solución es para win32 y cygwin; no "optimizar" */
volatile int *parr = arr;
printf("%d\n",parr[1]);
}

Solución 2:

--foo.h
/* Nota: se asume la exportación automática (sin __declspec(dllexport)) */
#if (defined(_WIN32) || defined(__CYGWIN__)) && \
!(defined(FOO_BUILD_DLL) || defined(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 cuarta forma de evitar este problema es volver a codificar su biblioteca para que utilice una
interfaz funcional en lugar de una interfaz de datos para las variables ofensivas (por ejemplo,
funciones de acceso set_foo() y get_foo()).

--disable-auto-import
No intente realizar un enlace sofisticado de "\_symbol" a "\_\_imp\_\_symbol" para las importaciones de
DATOS de DLL. [Esta opción es específica de la versión i386 de PE del enlazador]

--enable-runtime-pseudo-reloc
Si su código contiene expresiones descritas en la sección --enable-auto-import, es decir,
importaciones de DATOS de DLL con un desplazamiento distinto de cero, esta opción creará un
vector de "relocalizaciones pseudo en tiempo de ejecución" que pueden ser utilizadas por el
entorno de tiempo de ejecución para ajustar las referencias a dichos datos en su código cliente.
[Esta opción es específica de la versión i386 de PE del enlazador]

--disable-runtime-pseudo-reloc
No cree relocalizaciones pseudo para las importaciones de DATOS con un desplazamiento distinto de
cero desde DLL. [Esta opción es específica de la versión i386 de PE del enlazador]

--enable-extra-pe-debug
Muestre información de depuración adicional relacionada con el enlazado de símbolos de
importación automática. [Esta opción es específica de la versión i386 de PE del enlazador]

--section-alignment
Establece la alineación de la sección. Las secciones en la memoria siempre comenzarán en
direcciones que sean un múltiplo de este número. El valor predeterminado es 0x1000. [Esta
opción es específica de la versión i386 de PE del enlazador]

--stack reserve
--stack reserve,commit
Especifica el número de bytes de memoria que se reservarán (y, opcionalmente, se confirmarán) para
ser utilizados como pila para este programa. El valor predeterminado es 2 MB reservados, 4 KB
confirmados. [Esta opción es específica de la versión i386 de PE del enlazador]

--subsystem which
--subsystem which:major
--subsystem which:major.minor
Especifica el subsistema bajo el cual se ejecutará su programa. Los valores legales para which son
"native", "windows", "console", "posix" y "xbox". Puede establecer opcionalmente también la
versión del subsistema. También se pueden aceptar valores numéricos para which. [Esta opción es
específica de la versión i386 de PE del enlazador]

Las siguientes opciones establecen indicadores en el campo "DllCharacteristics" del encabezado del
archivo PE: [Estas opciones son específicas de las versiones PE del enlazador]

--high-entropy-va
--disable-high-entropy-va

La imagen es compatible con la aleatorización del diseño del espacio de direcciones (ASLR) de 64 bits. Esta opción está habilitada de forma predeterminada para las imágenes PE de 64 bits en los objetivos MinGW.

Esta opción también implica --dynamicbase y --enable-reloc-section.

--dynamicbase
--disable-dynamicbase

La dirección base de la imagen puede ser reubicada utilizando la aleatorización del espacio de direcciones (ASLR). Esta función se introdujo con MS Windows Vista para los objetivos PE i386. Esta opción está habilitada de forma predeterminada para los objetivos MinGW, pero se puede deshabilitar mediante la opción --disable-dynamicbase. Esta opción también implica --enable-reloc-section.

--forceinteg
--disable-forceinteg

Se aplican las comprobaciones de integridad del código. Esta opción está deshabilitada de forma predeterminada.

--nxcompat
--disable-nxcompat

La imagen es compatible con la prevención de la ejecución de datos (DEP). Esta función se introdujo con MS Windows XP SP2 para los objetivos PE i386. La opción está habilitada de forma predeterminada para los objetivos MinGW.

--no-isolation
--disable-no-isolation

Aunque la imagen entiende el aislamiento, no aísle la imagen. Esta opción está deshabilitada de forma predeterminada.

--no-seh
--disable-no-seh

La imagen no utiliza SEH. No se puede llamar a ningún controlador SE desde esta imagen. Esta opción está deshabilitada de forma predeterminada.

--no-bind
--disable-no-bind

No vincule esta imagen. Esta opción está deshabilitada de forma predeterminada.

--wdmdriver
--disable-wdmdriver

El controlador utiliza el modelo de controlador de MS Windows. Esta opción está deshabilitada de forma predeterminada.

--tsaware
--disable-tsaware

La imagen es compatible con Terminal Server. Esta opción está deshabilitada de forma predeterminada.

--insert-timestamp
--no-insert-timestamp

Inserte una marca de tiempo real en la imagen. Este es el comportamiento predeterminado, ya que coincide con el código heredado y significa que la imagen funcionará con otras herramientas propietarias. El problema con este valor predeterminado es que dará como resultado que se produzcan imágenes ligeramente diferentes cada vez que se vinculen las mismas fuentes. La opción --no-insert-timestamp se puede utilizar para insertar un valor cero para la marca de tiempo, lo que garantiza que los binarios producidos a partir de fuentes idénticas se compararán de forma idéntica.

Si --insert-timestamp está activo, la hora insertada es la hora en que se realiza el enlace o, si se define la variable de entorno "SOURCE_DATE_EPOCH", el número de segundos desde la época de Unix especificada por esa variable.

--enable-reloc-section
--disable-reloc-section

Cree la tabla de reubicación base, que es necesaria si la imagen se carga en una dirección base diferente a la especificada en la cabecera PE. Esta opción está habilitada de forma predeterminada.

El objetivo uClinux C6X utiliza un formato binario llamado DSBT para admitir las bibliotecas compartidas. Cada biblioteca compartida en el sistema debe tener un índice único; todos los ejecutables utilizan un índice de 0.

--dsbt-size size

Esta opción establece el número de entradas en el DSBT del ejecutable o biblioteca compartida actual en el tamaño. El valor predeterminado es crear una tabla con 64 entradas.


--dsbt-index índice

Esta opción establece el índice DSBT del ejecutable o biblioteca compartida actual en índice. El valor predeterminado es 0, lo que es apropiado para generar ejecutables. Si se genera una biblioteca compartida con un índice DSBT de 0, las reubicaciones "R_C6000_DSBT_INDEX" se copian en el archivo de salida.

El modificador --no-merge-exidx-entries deshabilita la fusión de entradas exidx adyacentes en la información de desenrollado de la pila.

--branch-stub

Esta opción habilita la relajación de ramas del enlazador mediante la inserción de secciones de rama cuando sea necesario para extender el rango de las ramas. Esta opción generalmente no es necesaria, ya que C-SKY admite instrucciones de rama y llamada que pueden acceder a todo el rango de memoria, y la relajación de ramas normalmente la maneja el compilador o ensamblador.

--stub-group-size=N

Esta opción permite un control más preciso de la creación de subrutinas de rama del enlazador. Establece el tamaño máximo de un grupo de secciones de entrada que pueden ser manejadas por una sola sección de subrutina. Un valor negativo de N ubica las secciones de subrutina después de sus ramas, mientras que un valor positivo permite que las secciones de subrutina aparezcan antes o después de las ramas. Los valores de 1 o -1 indican que el enlazador debe elegir valores predeterminados adecuados.

Los enlazadores 68HC11 y 68HC12 admiten opciones específicas para controlar el mapeo del cambio de banco de memoria y la generación de código de trampolín.

--no-trampoline

Esta opción deshabilita la generación de trampolines. De forma predeterminada, se genera un trampolín para cada función lejana que se llama mediante una instrucción "jsr" (esto ocurre cuando se toma un puntero a una función lejana).

--bank-window nombre

Esta opción indica al enlazador el nombre de la región de memoria en la especificación MEMORY que describe la ventana de banco de memoria. La definición de dicha región se utiliza luego por el enlazador para calcular el paginado y las direcciones dentro de la ventana de memoria.

Las siguientes opciones son compatibles para controlar el manejo de la generación de GOT al enlazar para destinos 68K.

--got=tipo

Esta opción le dice al enlazador qué esquema de generación de GOT usar. El tipo debe ser uno de single, negative, multigot o target. Para obtener más información, consulte la entrada de información para ld.

Las siguientes opciones son compatibles para controlar la generación de instrucciones microMIPS y las comprobaciones de reubicación de ramas para las transiciones de modo ISA al enlazar para destinos MIPS.

--insn32
--no-insn32

Estas opciones controlan la elección de las instrucciones microMIPS utilizadas en el código generado por el enlazador, como el que se encuentra en el PLT o en las subrutinas de enlace diferido, o en la relajación. Si se usa --insn32, entonces el enlazador solo usa codificaciones de instrucciones de 32 bits. De forma predeterminada o si se usa --no-insn32, se utilizan todas las codificaciones de instrucciones, incluidas las de 16 bits cuando sea posible.

--ignore-branch-isa
--no-ignore-branch-isa

Estas opciones controlan las comprobaciones de reubicación de ramas para las transiciones de modo ISA no válidas. Si se usa --ignore-branch-isa, entonces el enlazador acepta cualquier reubicación de rama y cualquier transición de modo ISA requerida se pierde en el cálculo de la reubicación, excepto en algunos casos de las instrucciones "BAL" que cumplen las condiciones de relajación y se convierten en instrucciones "JALX" equivalentes, ya que la reubicación asociada se calcula. De forma predeterminada o si se usa --no-ignore-branch-isa, se realiza una comprobación que provoca que la pérdida de una transición de modo ISA genere un error.


--compact-branches
--no-compact-branches

Estas opciones controlan la generación de instrucciones compactas por el enlazador en las entradas de la PLT para MIPS R6.

Para el objetivo pdp11-aout, se pueden producir tres variantes del formato de salida, según lo especificado por las siguientes opciones. La variante predeterminada para pdp11-aout es la opción --omagic, mientras que para otros objetivos, --nmagic es el valor predeterminado. La opción --imagic está definida solo para el objetivo pdp11-aout, mientras que las demás se describen aquí según se aplican al objetivo pdp11-aout.

-N
--omagic

Marca la salida como "OMAGIC" (0407) en la cabecera a.out para indicar que el segmento de texto no debe ser protegido contra escritura y compartido. Dado que tanto el segmento de texto como el de datos son legibles y se pueden escribir, el segmento de datos se asigna inmediatamente contiguo al segmento de texto. Este es el formato más antiguo para los programas ejecutables de PDP11 y es el valor predeterminado para ld en los sistemas PDP11 Unix desde el principio hasta 2.11BSD.

-n
--nmagic

Marca la salida como "NMAGIC" (0410) en la cabecera a.out para indicar que cuando se ejecuta el archivo de salida, la porción de texto será de solo lectura y compartida entre todos los procesos que ejecuten el mismo archivo. Esto implica mover las áreas de datos hacia arriba hasta el primer límite posible de página de 8 KB después del final del texto. Esta opción crea un formato ejecutable puro.

-z
--imagic

Marca la salida como "IMAGIC" (0411) en la cabecera a.out para indicar que cuando se ejecuta el archivo de salida, el programa de texto y las áreas de datos se cargarán en espacios de direcciones separados utilizando la función de espacio de instrucciones y datos separados de la unidad de gestión de memoria en modelos más grandes del PDP11. Esto duplica el espacio de direcciones disponible para el programa. El segmento de texto es de nuevo puro, está protegido contra escritura y es compartible. La única diferencia en el formato de salida entre esta opción y las demás, además del número mágico, es que tanto el segmento de texto como el de datos comienzan en la ubicación 0. La opción -z seleccionó este formato en 2.11BSD. Esta opción crea un formato ejecutable separado.

--no-omagic

Equivalente a --nmagic para pdp11-aout.

ENTORNO

Puede cambiar el comportamiento de ld con las variables de entorno "GNUTARGET", "LDEMULATION" y "COLLECT_NO_DEMANGLE".

"GNUTARGET" determina el formato de archivo de objeto de entrada si no utiliza -b (o su sinónimo
--format). Su valor debe ser uno de los nombres BFD para un formato de entrada. Si no hay ninguna
"GNUTARGET" en el entorno, ld utiliza el formato natural del objetivo. Si "GNUTARGET" está configurado
en "default", BFD intenta descubrir el formato de entrada examinando los archivos de entrada binarios; este
método a menudo tiene éxito, pero existen posibles ambigüedades, ya que no hay un método para garantizar
que el número mágico utilizado para especificar los formatos de archivo de objeto sea único. Sin embargo, el
procedimiento de configuración para BFD en cada sistema coloca el formato convencional para ese sistema primero en
la lista de búsqueda, por lo que las ambigüedades se resuelven a favor de la convención.

"LDEMULATION" determina la emulación predeterminada si no se utiliza la opción -m. La emulación puede
afectar a varios aspectos del comportamiento del enlazador, en particular al script del enlazador predeterminado. Puede listar
las emulaciones disponibles con las opciones --verbose o -V. Si no se utiliza la opción -m y la
variable de entorno "LDEMULATION" no está definida, la emulación predeterminada depende de cómo se
configuró el enlazador.

Normalmente, el enlazador aplicará la desmetilización de símbolos de forma predeterminada. Sin embargo, si "COLLECT_NO_DEMANGLE" está configurada en el entorno, entonces aplicará la no desmetilización de símbolos de forma predeterminada. Esta variable de entorno se utiliza de manera similar por el programa wrapper del enlazador "gcc". El valor predeterminado se puede anular con las opciones --demangle y --no-demangle.

Si la opción específica de PE/COFF --insert-timestamp está activa y la variable de entorno SOURCE_DATE_EPOCH está definida, entonces el valor de la marca de tiempo de esta variable se insertará en la cabecera COFF en lugar de la hora actual.

Si la variable de entorno "LD_STATS" está definida, se registrará la información sobre el uso de recursos del enlazador, tal como si se hubiera utilizado la opción --stats. Si la variable "LD_STATS" tiene un valor de cadena, entonces este se utilizará como el nombre de un archivo en el que se almacenará la información. De lo contrario, la información se enviará al flujo de salida estándar.

VER TAMBIÉN

ar(1), nm(1), objcopy(1), objdump(1), readelf(1) y las entradas de Info para binutils y ld.

DERECHOS DE AUTOR

Copyright (c) 1991-2025 Free Software Foundation, Inc.

Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la GNU Free Documentation License, Versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin Secciones invariantes, sin Textos de portada y sin Textos de contraportada. Se incluye una copia de la licencia en la sección titulada "GNU Free Documentation License".