Enlazador

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 18 de febrero de 2022; las comprobaciones requieren 4 ediciones .

Linker (también editor de enlaces , del inglés  link editor, linker ) es un programa de herramientas que realiza enlaces ( "linking" ): toma uno o más módulos de objetos como entrada y ensambla un archivo de módulo de biblioteca o ejecutable a partir de ellos.

Inicialmente, antes de la llegada de las bibliotecas dinámicas , los cargadores podían realizar algunas funciones del enlazador [1] , pero ahora, con mayor frecuencia, la carga de programas se asigna a un proceso separado [2] .

Para enlazar módulos, el enlazador usa tablas de símbolos creadas por el compilador en cada uno de los módulos objeto . Estas tablas pueden contener caracteres de los siguientes tipos:

Para la mayoría de los compiladores, un archivo de objeto es el resultado de compilar un archivo fuente . Si un programa se crea a partir de varios archivos de objetos, el enlazador ensambla estos archivos en un solo archivo ejecutable calculando y sustituyendo direcciones en lugar de símbolos, ya sea en el momento del enlace (enlace estático) o en el tiempo de ejecución (enlace dinámico).

El enlazador puede extraer archivos de objetos de colecciones especiales llamadas bibliotecas . Si no se definen todos los símbolos a los que hacen referencia los archivos de objetos de usuario, el enlazador busca sus definiciones en las bibliotecas que el usuario le ha dado como entrada. Normalmente, el vinculador predeterminado utiliza una o más bibliotecas del sistema. Cuando se encuentra un archivo objeto que contiene la definición de algún símbolo buscado, el enlazador puede incluirlo (el archivo) en el archivo ejecutable (en el caso de un enlace estático) o diferirlo hasta que se inicie el programa (en el caso de un enlace dinámico) .

El trabajo del enlazador es definir y enlazar referencias a nombres no definidos en cada módulo. Para cada nombre importado, su definición se encuentra en otros módulos, la mención del nombre se reemplaza por su dirección .

El enlazador normalmente no realiza la verificación de tipo o conteo de los parámetros de procedimiento y función. Si es necesario combinar módulos de objetos de programas escritos en lenguajes fuertemente tipados, una utilidad adicional debe realizar las comprobaciones necesarias antes de iniciar el enlazador.

Véase también

Notas

  1. John R. Levine. Enlazadores y Cargadores. - 1999. - S. 1 .
  2. Corporación IBM. IBM OS Linkage Editor and Loader  (indefinido) . — 1972.

Literatura