stringtranslate.com

biblioteca estática

En informática , una biblioteca estática o 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 , vinculador o enlazador, produciendo un archivo objeto. y un ejecutable independiente . [1] 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 la 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ífico del entorno

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

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

Creando 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 el enlace externo (es decir, sin utilizar la staticpalabra clave C ). Los nombres de archivos de bibliotecas estáticas suelen tener la extensión " .a " en sistemas tipo Unix [1] y la extensión " .lib " 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 usaría el siguiente comando: [1]

ar rcs libclass.a clase1.o clase2.o clase3.o

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

cc principal.c libclass.a

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

cc principal.c -lclass

o (durante la vinculación)

ld... principal.o -lclase...

en lugar de:

cc principal.c clase1.o clase2.o clase3.o

Ver también

Referencias

  1. ^ abc "Bibliotecas estáticas". TLDP . Consultado el 3 de octubre de 2013 .
  2. ^ Anderson, Rick (11 de enero de 2000). "El fin del infierno de las 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 son utilizadas únicamente por esa aplicación.