Tutoriales

Bibliotecas estáticas frente a bibliotecas dinámicas: ¿cuál es la diferencia?

Resumen: esta guía aclara las diferencias en la aplicabilidad de bibliotecas estáticas y dinámicas en un entorno de sistema operativo Linux.

biblioteca estática con biblioteca dinámica Contiene un conjunto de archivos de objetos compilados.Los archivos de objetos son el resultado de la compilación. C programa.

Los archivos de objeto son utilizados por varios programas. Las bibliotecas estáticas y las bibliotecas dinámicas tienen el propósito común de proporcionar código y datos reutilizables que se pueden compartir con diferentes programas.

Diferencia entre biblioteca estática y biblioteca dinámica

La diferencia entre biblioteca estática y biblioteca dinámica.

Los siguientes factores distinguen las bibliotecas estáticas de las bibliotecas dinámicas:

tiempo de enlace del programa

biblioteca estática Debe esperar el tiempo de compilación antes de vincularse con el programa. biblioteca dinámica Es necesario esperar el tiempo de ejecución antes de vincularse con el programa.

En resumen, el ejecutable de un programa contiene una biblioteca estática durante la ejecución, mientras que una biblioteca dinámica debe cargarse en la memoria antes de que el programa en ejecución pueda acceder a ella.

Talla

Las bibliotecas estáticas tienden a ser más grandes antes de que contengan todo el código y los datos que necesita el ejecutable del programa. Las bibliotecas dinámicas son livianas porque están asociadas solo con el código requerido y las referencias de datos requeridas por el ejecutable del programa.

portabilidad

Las bibliotecas estáticas existen independientemente de la disponibilidad de bibliotecas específicas en el sistema que las aloja y, por lo tanto, tienen la propiedad de la portabilidad.

La disponibilidad de las bibliotecas dinámicas depende de la presencia de otras bibliotecas en el sistema que las aloja, por lo que no se pueden mover de un sistema a otro.

eficiencia

Las bibliotecas estáticas se cargan en la memoria solo una vez y varios programas pueden acceder a ellas y compartirlas a la vez, lo que las hace más eficientes. Cada vez que un programa necesita usar/acceder a una biblioteca dinámica, debe cargarse en la memoria. Este enfoque ralentiza el tiempo de ejecución del programa y reduce la eficiencia de las bibliotecas dinámicas.

criterios de usabilidad

Las bibliotecas estáticas son excelentes para programas distribuibles que se pueden ejecutar en diferentes entornos de sistemas operativos. Por otro lado, el entorno ideal para una biblioteca dinámica es un entorno de sistema operativo específico del sistema que no requiere un programa/software distribuible.

crear biblioteca

El comando ar se usa para crear una biblioteca estática, mientras que sonido metálico cualquiera CCG Los compiladores son cruciales en la creación de bibliotecas dinámicas.

Por ejemplo, el proceso de creación detrás de las bibliotecas estáticas se denomina libexample.a requerirá uno o más archivos de objetos, como archivo 1.o, archivo 2.ocon archivo 3.o.

El comando para crear esta biblioteca estática a partir de estos archivos de objetos es el siguiente:
$ ar -rcs libexample.a archivo1.o archivo2.o archivo3.o

El comando se explica de la siguiente manera:

  • -ar es el comando ar de Linux.
  • -r Agregue archivos de objeto file1.o, file2.o y file3.o a la biblioteca estática (libexample.a).
  • -c Cree la biblioteca estática (libexample.a) si no existe.
  • -s Actualice la biblioteca estática (libexample.a) con la tabla de símbolos.

Por otro lado, el comando detrás de la creación de una biblioteca dinámica se llama libexample.so A partir de estos mismos archivos de objeto se verá así:

$ gcc -shared -o libexample.so file1.o file2.o file3.o

El comando se explica de la siguiente manera:

  • -gcc es un programa compilador (para compilar y vincular programas C).
  • -shared Llame a la creación de una biblioteca dinámica (libexample.so) desde un archivo de objeto (file1.o, file2.o, file3.o).
  • -o Especifica el nombre de archivo de la biblioteca dinámica (libexample.so).

extensión de archivo

biblioteca estática con '.a' extensión de archivo (por ejemplo, libexample.a) Por otro lado, las bibliotecas dinámicas con '.so' extensión de archivo (por ejemplo, libexample.so).

vinculación del programa

este -l con -L Las opciones de comando se utilizan para vincular la biblioteca estática al programa a través de sonido metálico cualquiera CCG traductor

Por ejemplo, para vincular un archivo llamado conductor a un nombre libexample.aejecutaremos el comando:

$ gcc -o driver driver.c -L/path/to/lib -lexample

El compilador primero rastreará libexample.a Biblioteca estática en la ruta del directorio /ruta/a/biblioteca vincularlo a conductor (Programa ejecutable).

Con una biblioteca dinámica, -l, -Lcon -rpath Las opciones se utilizan para vincular estas bibliotecas en el programa.Por ejemplo, el siguiente comando vincula el controlador con la biblioteca dinámica libexample.so.

$ gcc -o driver driver.c -L/path/to/lib -lexample -Wl,-rpath=/path/to/lib

este CCG Directorios de búsqueda del compilador /ruta/a/biblioteca Para bibliotecas dinámicas libexample.so vincularlo a conductor (programa ejecutable).

este camino es una biblioteca dinámica (libexample.so) en tiempo de ejecución. El vinculador dinámico es responsable de vincular el archivo ejecutable del programa con el código de función de la biblioteca dinámica.

Accesibilidad del programa

Múltiples programas pueden acceder biblioteca estática al mismo tiempo con biblioteca dinámica Un programa a la vez. Cuando se utiliza una biblioteca estática, el ejecutable del programa precarga los datos de la biblioteca estática.

Con las bibliotecas dinámicas, los datos de la biblioteca se cargan previamente en la memoria en tiempo de ejecución, creando así una rutina de orden de llegada entre los programas que desean usar la biblioteca. Sin embargo, solo los programas que se ejecutan simultáneamente tienen el privilegio de compartir la misma biblioteca dinámica.

A pesar de las ventajas, Dinámica cualquiera quieto Las bibliotecas pueden interferir entre sí, y las bibliotecas de programas son insustituibles en términos de código y tecnología de intercambio de datos entre múltiples programas.

Esta característica reduce significativamente la duplicación de código y ayuda a mejorar la capacidad de mantenimiento del programa. Las bibliotecas también son ideales para implementar la funcionalidad que falta en las bibliotecas de lenguajes de programación estándar.

LEER  Cómo usar la función isalpha() en lenguaje C++

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba