Una compilación estática es una versión compilada de un programa que se ha vinculado estáticamente con bibliotecas.
Enlace
En informática , vincular significa tomar uno o más objetos generados por compiladores y ensamblarlos en un solo programa ejecutable . Los objetos son módulos de programa que contienen códigos de máquina y definiciones de símbolos , que vienen en dos variedades:
- Los símbolos definidos o exportados son funciones o variables que están presentes en el módulo representado por el objeto y que deberían estar disponibles para su uso por otros módulos.
- Los símbolos no definidos o importados son funciones o variables a las que este objeto llama o hace referencia a él, pero que no se definen internamente.
A continuación, un programa enlazador resuelve las referencias a símbolos indefinidos descubriendo qué otro objeto define un símbolo en cuestión y reemplazando los marcadores de posición con la dirección del símbolo. Los enlazadores pueden tomar objetos de una colección llamada biblioteca . El programa final no incluye toda la biblioteca, solo aquellos objetos que se necesitan. Existen bibliotecas para diversos fines, y una o más bibliotecas del sistema suelen estar vinculadas de forma predeterminada.
Vinculación dinámica
Los entornos de sistemas operativos modernos permiten la vinculación dinámica o el aplazamiento de la resolución de algunos símbolos indefinidos hasta que se ejecuta un programa. Eso significa que el ejecutable aún contiene símbolos indefinidos, además de una lista de objetos o bibliotecas que proporcionarán definiciones para estos. La carga del programa también cargará estos objetos / bibliotecas y realizará un enlace final.
La vinculación dinámica ofrece tres ventajas:
- Las bibliotecas de uso frecuente (por ejemplo, las bibliotecas del sistema estándar) deben almacenarse en una sola ubicación, no duplicarse en cada binario.
- Si una biblioteca se actualiza o se reemplaza, todos los programas que la usen dinámicamente se beneficiarán inmediatamente de las correcciones. Las compilaciones estáticas deberían volver a vincularse primero.
- El tamaño del archivo ejecutable binario es más pequeño que su contraparte enlazada estáticamente.
Edificio estático
En un programa construido estáticamente , no se produce ningún enlace dinámico: todos los enlaces se han realizado en tiempo de compilación .
Las compilaciones estáticas tienen un comportamiento muy predecible (porque no dependen de la versión particular de las bibliotecas disponibles en el sistema final) y se encuentran comúnmente en herramientas forenses y de seguridad para evitar una posible contaminación o mal funcionamiento debido a bibliotecas rotas en la máquina examinada. La misma flexibilidad que permite que una biblioteca actualizada beneficie a todas las aplicaciones vinculadas dinámicamente también puede evitar que las aplicaciones que asumen la presencia de una versión específica de una biblioteca en particular se ejecuten correctamente. Si cada aplicación en un sistema debe tener su propia copia de una biblioteca dinámica para asegurar el funcionamiento correcto, los beneficios de la vinculación dinámica son discutibles.
Otro beneficio de las compilaciones estáticas es su portabilidad: una vez que se ha compilado el archivo ejecutable final, ya no es necesario mantener los archivos de la biblioteca a los que hace referencia el programa, ya que todas las partes relevantes se copian en el archivo ejecutable. Como resultado, al instalar un programa construido estáticamente en una computadora, el usuario no tiene que descargar e instalar bibliotecas adicionales: el programa está listo para ejecutarse.
Ver también
Referencias
- Levine, John R. (2000) [octubre de 1999]. Enlazadores y cargadores . La Serie Morgan Kaufmann en Ingeniería de Software y Programación (1 ed.). San Francisco, Estados Unidos: Morgan Kaufmann . ISBN 1-55860-496-0. ISBN 978-1-55860-496-4 .
- Keren, Guy (2002). Creación y uso de bibliotecas "C" estáticas y compartidas . Grupo de programadores Little Unix (LUPG).