Comando Linux / Unix: ld

4.2 (84.78%) 134 vote[s]


NOMBRE

ld – Usando LD, el enlazador GNU

SINOPSIS

ld [ opciones ] objfile …..

DESCRIPCIÓN

ld combina un número de objetos y archivos, reubica sus datos y ata las referencias de los símbolos. Normalmente el último paso para compilar un programa es ejecutar ld .

ld acepta archivos del Lenguaje de Comandos Linker escritos en un superconjunto de la sintaxis del Lenguaje de Comandos del Editor de Enlaces de AT&T, para proporcionar un control explícito y total sobre el proceso de enlace.

Esta página man no describe el lenguaje de comandos; vea la entrada ld en «info», o el manual ld: el enlazador GNU, para más detalles 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 objetos. Esto permite ld leer, combinar y escribir archivos de objetos en muchos formatos diferentes—por ejemplo, COFF o «a.out». Se pueden enlazar diferentes formatos para producir cualquier tipo de archivo de objeto disponible.

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

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

OPCIONES

El enlazador soporta una plétora de opciones de línea de comandos, pero en la práctica, pocas de ellas se utilizan en un contexto particular. Por ejemplo, un uso frecuente de ld es enlazar archivos de objetos Unix estándar en un sistema Unix estándar compatible. En tal sistema, enlazar un archivo «hello.o»:

Esto le indica a ld que produzca un archivo llamado output como resultado de enlazar el archivo «/lib/crt0.o» con «hello.o» y la biblioteca «libc.a», que vendrá de los directorios de búsqueda estándar. (Vea la discusión de la opción -l abajo.)

Algunas de las opciones de la 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 el que aparece la opción en la línea de comandos, en relación con los archivos objeto y otras opciones de archivo. La repetición de opciones que no son de archivo con un argumento diferente no tendrá ningún efecto adicional, o anulará las ocurrencias anteriores (las que se encuentran más a la izquierda en la línea de comandos) de esa opción. Las opciones que se pueden especificar de forma significativa más de una vez se indican en las descripciones siguientes.

Los argumentos que no son de opción son archivos de objetos o archivos que deben enlazarse entre sí. Pueden seguir, preceder o mezclarse con 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 se invoca el enlazador con al menos un archivo de objeto, pero puede especificar otras formas de archivos de entrada binarios utilizando -l , -R , y el lenguaje de comandos de script. Si no se especifican archivos de entrada binarios, el enlazador no produce ninguna salida y emite el mensaje No hay archivos de entrada .

Si el enlazador no puede reconocer el formato de un archivo de objeto, asumirá que es un script enlazador. Un script especificado de esta manera aumenta el script principal del enlazador usado para el enlace (ya sea el script enlazador predeterminado o el especificado usando -T ). Esta característica permite al enlazador enlazar contra un archivo que parece ser un objeto o un archivo, pero que en realidad sólo define algunos valores de símbolo, o utiliza «INPUT» o «GROUP» para cargar otros objetos. Tenga en cuenta que especificar un script de esta manera simplemente aumenta el script principal del enlazador; utilice la opción -T para reemplazar el script enlazador predeterminado por completo.

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

Para opciones cuyos nombres son múltiples letras, un guión o dos pueden preceder al nombre de la opción; por ejemplo, -trace-symbol y –trace-symbol son equivalentes. Nota – hay una excepción a esta regla. Las opciones de varias letras que empiezan con una «o» minúscula sólo pueden ir precedidas de dos guiones. 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 el indicador NMAGIC en la salida.

Los argumentos de las opciones de varias letras deben estar separados del nombre de la opción por un signo de igual, o bien se deben dar 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 letras múltiples.

Si el enlazador está siendo invocado indirectamente, a través de un controlador de compilador (p.e. gcc ) entonces todas las opciones de la línea de comandos del enlazador deben ser precedidas por -Wl, (o lo que sea apropiado para el controlador de compilador en particular) de esta manera:

Esto es importante, porque de lo contrario el programa del controlador del compilador puede dejar caer silenciosamente las opciones del enlazador, resultando en un mal enlace.

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

-a palabra clave

Esta opción es compatible con la compatibilidad HP/UX. El argumento keyword debe ser una de las cadenas del archivo comprimido , compartido , o por defecto . -un archivo es funcionalmente equivalente a -Bstatic , y las otras dos palabras clave son funcionalmente equivalentes a -Bdynamic . Esta opción puede ser utilizada cualquier número de veces.

-A arquitectura

–architecture= architecture

En la versión actual de ld , esta opción sólo es útil para la familia de arquitecturas Intel 960. En esa configuración ld , el argumento architecture identifica la arquitectura particular de la familia 960, permitiendo algunas salvaguardias y modificando la ruta de búsqueda de la biblioteca de archivos.

Las futuras versiones de ld pueden soportar funcionalidades similares para otras familias de arquitecturas.

-b formato de entrada

–format= input-format

ld puede configurarse para soportar más de un tipo de archivo de objeto. Si su ld está configurado de esta manera, puede utilizar la opción -b para especificar el formato binario de los archivos de objetos de entrada que siguen esta opción en la línea de comandos. Incluso cuando ld está configurado para soportar formatos de objeto alternativos, normalmente no necesita especificar esto, ya que ld debe configurarse para esperar como formato de entrada predeterminado el formato más habitual en cada equipo. input-format es una cadena de texto, el nombre de un formato particular soportado por las bibliotecas BFD. (Puede listar los formatos binarios disponibles con objdump -i …)

Puede que desee utilizar esta opción si está enlazando archivos con un formato binario inusual. También puede utilizar -b para cambiar de formato explícitamente (al enlazar archivos de objetos de diferentes formatos), incluyendo -b input-format antes de cada grupo de archivos de objetos en un formato particular.

El formato por defecto 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 comando MRI

–mri-script= Archivo de comando MRI

Para compatibilidad con enlazadores producidos por MRI, ld acepta archivos de script escritos en un lenguaje de comandos restringido alternativo, descrito en la sección de archivos de script compatibles con MRI de la documentación de GNU ld. Introduzca los archivos de script MRI con la opción -c ; utilice la opción -T para ejecutar scripts de enlazador escritos en el lenguaje de script de propósito general 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 formularios para que sean compatibles con otros enlazadores. Asignan espacio a símbolos comunes incluso si se especifica un archivo de salida reubicable (con -r ). El comando «FORCE_COMMON_ALLOCATION» tiene el mismo efecto.

-e entry

–entry= entry

Utilice entry como símbolo explícito para iniciar la ejecución de su programa, en lugar del punto de entrada predeterminado. Si no hay un símbolo llamado entry, el enlazador intentará analizar entry como un número, y lo usará como dirección de entrada (el número será interpretado en base 10; puede usar un leading 0x para base 16, o un leading 0 para base 8).

-E

-exportación-dinámica

Al crear un ejecutable enlazado dinámicamente, añada 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 utiliza esta opción, la tabla de símbolos dinámicos normalmente contendrá sólo aquellos símbolos a los que hace referencia algún objeto dinámico mencionado en el enlace.

Si utiliza «dlopen» para cargar un objeto dinámico que necesita referirse a los símbolos definidos por el programa, en lugar de a algún otro objeto dinámico, entonces probablemente necesitará usar esta opción al enlazar el programa mismo.

También puede utilizar el script de la versión para controlar qué símbolos deben añadirse a la tabla de símbolos dinámica si el formato de salida lo soporta. Vea la descripción de –version-script en@ref{VERSION}.

-EB

Enlazar objetos de gran tamaño. Esto afecta al formato de salida predeterminado.

-EL

Enlaza objetos de Little-endian. Esto afecta al formato de salida predeterminado.

-f

–auxiliar nombre

Al crear un objeto compartido ELF, establezca el campo interno DT_AUXILIARY con el nombre especificado. Esto le indica al enlazador dinámico que la tabla de símbolos del objeto compartido debe utilizarse como un filtro auxiliar en la tabla de símbolos del objeto compartido name.

Si más tarde enlaza un programa con este objeto de filtro, cuando ejecute el programa, el enlazador dinámico verá el campo DT_AUXILIARY. Si el enlazador dinámico resuelve cualquier símbolo del objeto de filtro, primero comprobará si hay una definición en el objeto compartido name. Si existe, se utilizará en lugar de la definición del objeto de filtro. El objeto compartido name no necesita existir. Por lo tanto, el nombre del objeto compartido puede utilizarse para proporcionar una implementación alternativa de ciertas funciones, tal vez para la depuración 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 aparecen en la línea de comandos.

-F nombre

–filtro nombre

Al crear un objeto compartido ELF, establezca el campo interno DT_FILTER con el nombre especificado. Esto le indica al enlazador dinámico que la tabla de símbolos del objeto compartido que se está creando debe utilizarse como filtro en la tabla de símbolos de la directiva

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *