Biblioteca estática - Static library

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 un compilador , enlazador o enlazador copia en una aplicación de destino , produciendo un objeto. archivo 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 solo podían ser estáticas . Las bibliotecas estáticas se fusionan con otras bibliotecas estáticas y archivos de objeto durante la construcción / vinculación para formar un solo 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 tiempo de compilación / tiempo de enlace.

Ventajas y desventajas

Hay varias ventajas de vincular estáticamente bibliotecas con un ejecutable en lugar de vincularlas dinámicamente . La ventaja más significativa es que la aplicación puede tener la certeza de que todas sus bibliotecas están presentes y de que son la versión correcta. Esto evita problemas de dependencia, conocidos coloquialmente como DLL Hell o, más generalmente, infierno de dependencia . La vinculación estática también puede permitir que la aplicación esté contenida en un solo archivo ejecutable, simplificando la distribución y la instalación.

Con la vinculación estática, es suficiente incluir aquellas partes de la biblioteca a las que el ejecutable de destino (o biblioteca de destino) hace referencia directa e indirectamente. 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 el enlace estático, el tamaño del ejecutable se vuelve mayor que en el enlace dinámico, 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, el tamaño total será similar o incluso menor si el compilador elimina los símbolos no utilizados.

Específico del entorno

En Microsoft Windows , es común incluir los archivos de la biblioteca que una aplicación necesita con la aplicación. En sistemas similares a Unix, esto es menos común, ya que los sistemas de administración de paquetes se pueden usar 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 que la biblioteca se actualice 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.

Vinculación 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 de objeto . Los archivos de la biblioteca estática se pueden vincular en tiempo de ejecución mediante un cargador de vinculación (por ejemplo, el cargador del módulo X11 ). Sin embargo, es controvertido si un proceso de este tipo puede llamarse enlace estático .

Creando bibliotecas estáticas en C / C ++

Las bibliotecas estáticas se pueden crear fácilmente en C o en 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 el enlace externo (es decir, sin usar la staticpalabra clave C ). Los nombres de archivos de bibliotecas estáticas suelen tener la extensión " .a " en sistemas similares a Unix y la extensión " .lib " en Microsoft Windows .

Por ejemplo, para crear un archivo llamado libclass.a a partir de los 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 depende 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 la biblioteca estándar, como / usr / local / lib )

cc main.c -lclass

o (durante la vinculación)

ld ... main.o -lclass ...

en lugar de:

cc main.c class1.o class2.o class3.o

Ver también

Referencias

  1. ^ a b c "Bibliotecas estáticas" . TLDP . Consultado el 3 de octubre de 2013 .
  2. Anderson, Rick (11 de enero de 2000). "El fin del infierno DLL" . microsoft.com. Archivado desde el original el 5 de junio de 2001 . Consultado el 31 de agosto de 2013 . Las DLL privadas son DLL que se instalan con una aplicación específica y solo las usa esa aplicación.