Biblioteca estática

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En informática, una biblioteca estática o una biblioteca vinculada estáticamente es un conjunto de rutinas, funciones externas y variables que se resuelven en un llamador en tiempo de compilación y se copian. en una aplicación de destino mediante un compilador, enlazador o enlazador, produciendo un archivo objeto y un ejecutable independiente. Este ejecutable y el proceso de compilación se conocen como compilación estática del programa. Históricamente, las bibliotecas sólo podían ser estáticas. Las bibliotecas estáticas se fusionan con otras bibliotecas estáticas y archivos objeto durante la construcción/vinculación para formar un único ejecutable o se cargan en tiempo de ejecución en el espacio de direcciones de su ejecutable correspondiente en un desplazamiento de memoria estática determinado en el tiempo de compilación/enlace.

Ventajas y desventajas

Existen varias ventajas al vincular bibliotecas estáticamente con un ejecutable en lugar de vincularlas dinámicamente. La ventaja más significativa es que la aplicación puede estar segura de que todas sus bibliotecas están presentes y que son la versión correcta. Esto evita problemas de dependencia, conocidos coloquialmente como DLL Hell o, más generalmente, infierno de dependencia. Los enlaces estáticos también pueden permitir que la aplicación esté contenida en un único archivo ejecutable, simplificando la distribución y la instalación.

Con enlaces estáticos, es suficiente incluir aquellas partes de la biblioteca a las que hace referencia directa e indirectamente el ejecutable de destino (o biblioteca de destino). Con las bibliotecas dinámicas, se carga toda la biblioteca, ya que no se sabe de antemano qué funciones serán invocadas por las aplicaciones. Que esta ventaja sea significativa en la práctica depende de la estructura de la biblioteca.

En los enlaces estáticos, el tamaño del ejecutable se vuelve mayor que en los enlaces dinámicos, ya que el código de la biblioteca se almacena dentro del ejecutable en lugar de en archivos separados. Pero si los archivos de la biblioteca se cuentan como parte de la aplicación, entonces el tamaño total será similar, o incluso menor si el compilador elimina los símbolos no utilizados.

Específica del entorno

(feminine)

En Microsoft Windows es común incluir los archivos de biblioteca que una aplicación necesita con la aplicación. En sistemas tipo Unix, esto es menos común ya que se pueden usar sistemas de administración de paquetes para garantizar que estén disponibles los archivos de biblioteca correctos. Esto permite que los archivos de la biblioteca se compartan entre muchas aplicaciones, lo que permite ahorrar espacio. También permite actualizar la biblioteca para corregir errores y fallas de seguridad sin actualizar las aplicaciones que usan la biblioteca. En la práctica, muchos ejecutables (especialmente aquellos destinados a Microsoft Windows) utilizan bibliotecas tanto estáticas como dinámicas.

Enlace y carga

Cualquier función de biblioteca estática puede llamar a una función o procedimiento en otra biblioteca estática. El vinculador y el cargador manejan esto de la misma manera que para otros tipos de archivos objeto. Los archivos de biblioteca estática se pueden vincular en tiempo de ejecución mediante un cargador de vínculos (por ejemplo, el cargador de módulos X11). Sin embargo, es controvertido si dicho proceso puede denominarse enlace estático.

Crear bibliotecas estáticas en C/C++

Las bibliotecas estáticas se pueden crear fácilmente en C o C++. Estos dos lenguajes proporcionan especificadores de clase de almacenamiento para indicar enlaces externos o internos, además de proporcionar otras características. Para crear una biblioteca de este tipo, las funciones/procedimientos exportados y otras variables de objetos deben especificarse para enlace externo (es decir, sin utilizar la palabra clave estática C). Los nombres de archivos de bibliotecas estáticas suelen tener ".a" extensión en sistemas tipo Unix y ".lib" extensión en Microsoft Windows.

Por ejemplo, en un sistema tipo Unix, para crear un archivo llamado libclass.a a partir de archivos class1.o , class2.o, class3.o, se utilizaría el siguiente comando:

ar rcs libclass.a class1.o class2.o class3.o

para compilar un programa que dependa de class1.o, class2.o y class3.o, se podría hacer:

cc main.c libclass.a

o (si libclass.a se coloca en la ruta de biblioteca estándar, como /usr/local/lib)

cc main.c - Clase

o (durante la vinculación)

Id... main.o -lclass...

en lugar de:

cc main.c class1.o class2.o class3.o
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save