Compartir tecnología

Cómo funciona el enlazador, la diferencia entre enlaces estáticos y enlaces dinámicos, cómo crear y utilizar bibliotecas de enlaces dinámicos

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

El vinculador juega un papel vital en el desarrollo de programas. Es responsable de integrar múltiples archivos objeto y archivos de biblioteca en un archivo ejecutable. Antes de profundizar en cómo funciona el vinculador, la diferencia entre vínculos estáticos y dinámicos, y cómo crear y usar bibliotecas de vínculos dinámicos, primero describamos las funciones básicas del vinculador.

Cómo funciona el enlazador

Enlazador Es una herramienta responsable de combinar uno o más archivos objeto y archivos de biblioteca en un archivo ejecutable. Sus principales funciones incluyen:

  1. Análisis de símbolos : Identifique y procese todos los símbolos (nombres de funciones y variables) en el programa, asegurando que cada símbolo tenga una definición única. Para los símbolos a los que se hace referencia pero no están definidos (símbolos externos), el vinculador busca una definición en una biblioteca proporcionada u otro archivo objeto.

  2. reiniciar : Ajuste el código y las direcciones de datos en cada módulo a la dirección de memoria final. La reubicación incluye la corrección de la dirección en el código y el ajuste de la posición del segmento de datos para garantizar que todas las referencias apunten a la ubicación de memoria correcta.

  3. fusionar segmentos: Fusiona segmentos del mismo tipo (como segmentos de código, segmentos de datos, etc.) de diferentes archivos de destino en un segmento continuo.

  4. biblioteca de procesamiento : Vincula el código de la biblioteca requerido por el programa con el archivo objeto. El vinculador puede manejar dos tipos de bibliotecas: bibliotecas estáticas y bibliotecas dinámicas.

  5. Generar archivo ejecutable: El resultado final es un archivo ejecutable que se puede ejecutar en el sistema operativo.

La diferencia entre enlaces estáticos y enlaces dinámicos

Enlace estático yEnlace dinámico Son dos modos de trabajo del enlazador, cada uno con diferentes características y escenarios de uso.

enlace estático
  • concepto : En los enlaces estáticos, el código de la biblioteca se copia en el momento de la compilación y se incrusta en cada ejecutable que lo utiliza. De esta manera, el archivo ejecutable generado contiene todo el código requerido y no depende de archivos de biblioteca externos.

  • ventaja

    • Fuerte independencia: el archivo ejecutable generado contiene todas las dependencias y no requiere archivos de biblioteca adicionales en tiempo de ejecución.
    • Buena compatibilidad: el tiempo de ejecución no depende de la versión de la biblioteca instalada en el sistema y no encontrará el problema de "conflicto de versión de la biblioteca".
  • defecto

    • Tamaño de archivo grande: cada archivo ejecutable contiene el código de biblioteca completo, lo que aumenta el tamaño del archivo.
    • Problema de actualización: si la biblioteca se actualiza, todos los programas que la utilizan deben volver a compilarse.
  • Extensión de biblioteca estática

    • Ventanas: .lib
    • Unix/Linux: .a
enlace dinámico
  • concepto : En los enlaces dinámicos, el código de la biblioteca se carga en tiempo de ejecución y no está incrustado en el archivo ejecutable. El ejecutable contiene solo referencias a bibliotecas y el sistema operativo carga el código de la biblioteca en tiempo de ejecución.

  • ventaja

    • Tamaño de archivo pequeño: el archivo ejecutable no contiene código de biblioteca, solo referencias a la biblioteca.
    • Fácil de actualizar: la actualización de las bibliotecas no requiere volver a compilar el programa, solo reemplazar los archivos de la biblioteca.
    • Alta eficiencia de memoria: varios programas pueden compartir instancias de memoria del mismo archivo de biblioteca, lo que reduce el uso de memoria.
  • defecto

    • Fuertes dependencias: el archivo ejecutable debe poder encontrar y cargar la versión correcta del archivo de la biblioteca cuando se ejecuta.
    • Problemas de compatibilidad: la falta de coincidencia de la versión del archivo de la biblioteca puede provocar que el programa falle.
  • Extensión de biblioteca dinámica

    • Ventanas: .dll(Biblioteca de vínculos dinámicos)
    • Unix/Linux: .so(Objeto compartido)

Crear y utilizar bibliotecas de enlaces dinámicos

Crear biblioteca de enlaces dinámicos

En diferentes sistemas operativos, los métodos para crear bibliotecas de vínculos dinámicos son ligeramente diferentes. A continuación se muestran algunos pasos y comandos comunes:

Cree una biblioteca de enlaces dinámicos en Linux
  1. Escribir código de biblioteca

    Cree un archivo fuente C que contenga las funciones que queremos colocar en la biblioteca dinámica.

    // example.cpp
    #include