Biblioteca estática


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 . [1] Este ejecutable y el proceso de compilación se conocen como una 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 objetosdurante la construcción / vinculación para formar un solo ejecutable o cargarse en tiempo de ejecución en el espacio de direcciones de su ejecutable correspondiente en un desplazamiento de memoria estático determinado en tiempo de compilación / tiempo de enlace.

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 invocarán 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.

En Microsoft Windows , es común incluir los archivos de la biblioteca que una aplicación necesita con la aplicación. [2] 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 los archivos de biblioteca correctos estén disponibles. 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.

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 .