INSTITUTO TECNOLOGICO SUPERIOR DE COATZACOALCOSTrabajo: Bibliotecas Estaticas y Dinamicas Presenta: Nolasco Avendaño Raúl Asignatura: Topicos Selectos de Programación Catedratrico: Ing. Israel Morales Reyes Carrera: ISC-3D Coatzacoalcos, Veracruz a 7 de Octubre del 2010 y debe ser realizado cada vez que alguno de los módulos es recompilado. Los compiladores comerciales proporcionan tanto las bibliotecas estándar como las personalizadas.1 librería2 ) de la RAE. las referencias para saltos y otras llamadas a rutinas se almacenan en una dirección relativa o simbólica. maletín. juego (kit) de herramientas). la acepción correcta es biblioteca. consiste en un conjunto de rutinas que se copian en una aplicación por el compilador o el enlazador. porque es la traducción correcta de library. mientras que el término inglés para librería es bookstore o book shop (literalmente: tienda de libros). pero los programadores también pueden crear sus propias bibliotecas personalizadas. que no puede resolverse hasta que todo el código y las bibliotecas son asignadas a direcciones estáticas finales. equipo. Biblioteca estatica Una biblioteca estática. El enlazador resuelve todas las direcciones no resueltas convirtiéndolas en direcciones fijas o relocalizables (desde una base común) cargando todo el código y las bibliotecas en posiciones de memoria en tiempo de ejecución. también conocido como archivo. Este proceso de enlazado puede durar incluso más tiempo que el proceso de compilación. biblioteca y librería.¿Que es una librería? Se emplea el término librería para referirse a una biblioteca. por la similitud con el original inglés library. La palabra library tiene un significado adicional en el ámbito de la informática: Conjunto de programas estándar y subrutinas que están almacenadas y disponibles para su utilización. caja. son correctos según las definiciones (biblioteca. aunque en términos formales. . librería o librero). produciendo archivos con código objeto y un fichero ejecutable independiente. La dirección real. Ambos términos. la biblioteca estándar de C). se conoce como una construcción estática de la aplicación objetivo. estuche. o bien bookshelf (estantería o mueble para guardar libros. y el archivo ejecutable. La mayoría de los lenguajes compilados tienen biblioteca estándar (por ejemplo. Este proceso. También es habitual referirse a ella con el término de origen anglosajón toolkit (conjunto. Si cambiamos una dinámica. la tiene en su código y no tiene que ir a leer el fichero de la librería dinámica para encontrar la función y ejecutarla. Cuando llama a una función de la librería. y y Un programa compilado con librerías estáticas es. en principio. ya que se hace copia de todo lo que necesita. pero es un inconveniente si tocar eso nos hace cambiar los ejecutables (por ejemplo. a los ejecutables no les afecta. Un programa compilado con librerías estáticas se puede llevar a otro ordenador sin necesidad de llevarse las librerías. Si cambiamos una librería estática. hemos añadido un parámetro más a una función de la librería. más rápido en ejecución. Esto es una ventaja si hemos cambiado la librería para corregir un error (se corrige automáticamente en todos los ejecutables).Ventajas e inconvenientes de las bibliotecas estáticas y Un programa compilado con librerías estáticas es más grande. y . los ejecutables ya hechos dejan de funcionar). los ejecutables se ven afectados. a ctest1. -lctest 5. Comprobar el contenido de la biblioteca ar -t libctest.o ctest2.c -L. así como la utilización de la biblioteca en el programa prog./prog .c. Compilar para obtener los objetos gcc -Wall -c ctest1. Reunir los objetos compilados en una biblioteca con la utilidad ar ar -cvq libctest. Compilar la aplicación y enlazarla con la biblioteca gcc -static -o prog prog.o 3.a 4.c ctest2.Ejemplo de los pasos para generar una biblioteca estática que incluya los objetos de los ficheros ctest1.c 2.c y ctest2. 1.c. Ejecutar la aplicación . b) Cargando y descargando dinámicamente la biblioteca durante la ejecución.Bibliotecas dinámicas Una librería de enlace dinámico. es un archivo que contiene funciones y/o recursos (mapas de bits. y . etc. pero también pueden ser guardados en archivos con extensiones EXE (ejecutable). m s uno por cada biblioteca dinámica que use dicho programa. en adelante DLL (Dynamic Link Library). en lugar de ser enlazadas en tiempo de compilación. uno para el programa principal. su carga deja de ser un inconveniente y pasa a ser una ventaja y Las bibliotecas dinámicas deben contener código reubicable. La biblioteca debe estar disponible durante la fase de compilación/enlazado. usando para ello las funciones de sistema del cargador de enlace dinámico. en cambio.) que podrían ser llamados desde cualquier aplicación Windows. Hay dos formas diferentes de usar este tipo de bibliotecas. DRV (controlador de dispositivo) y FON (fuente de Windows). es que las primeras se cargan porque el programa que las ha de utilizar lo pide a Windows y las demás. a) Enlazando dinámicamente en tiempo de carga. La mayoria de librerías de enlace dinámico se guardan en archivos que tienen extensión DLL. Los objetos compartidos no se incluyen en el ejecutable. Las bibliotecas dinámicas provocan una sobrecarga en el sistema debido a varios elementos: y La carga del programa se realiza en varios pasos. Si la biblioteca dinámica es muy utilizada. De hecho. ya que la posición de carga dentro del espacio de direcciones virtuales del proceso no se sabrá hasta el momento de la carga Enlace dinámico significa que las subrutinas de una biblioteca son cargadas en un programa en tiempo de ejecución. definiciones de fuentes. se cargan porque están referenciadas en archivos de inicialización de Windows. Estas referencias pueden ser creadas por el propio Windows o por el programa de instalación de alguna aplicación. La diferencia entre las librerías de enlace dinámico con extensión DLL y el resto. se puede considerar que Windows está construído sobre una gran cantidad de DLL's. Se trataba de una característica del MTS (Michigan Terminal System). En el momento adecuado el cargador localiza las bibliotecas en el disco y añade los datos relevantes de éstas en el espacio de memoria del proceso. Algunos sistemas operativos sólo pueden enlazar una biblioteca en tiempo de carga. las bibliotecas enlazadas dinámicamente se denominan DLL (dynamic-link library). por su naturaleza. construido a finales de los 60. tiene tan sólo las limitaciones establecidas por las licencias de software. en tiempo de ejecución). La mayor parte de la labor de enlazado se realiza en el momento en que la aplicación se carga (tiempo de carga o loadtime) o durante la ejecución (tiempo de ejecución o runtime).se mantienen como archivos independientes separados del fichero ejecutable del programa principal. es de hecho parte del sistema operativo subyacente. el uso de las bibliotecas enlazadas dinámicamente en la arquitectura de una aplicación no significa necesariamente que puedan ser sustituidas. El enlazador realiza una mínima cantidad de trabajo en tiempo de compilación. esa biblioteca es una biblioteca enlazada dinámicamente. llamado por el cargador. Sin embargo. El enlace dinámico se desarrolló originalmente en los sistemas operativos Multics a partir de 1964. otros son capaces de esperar hasta después de que el proceso haya empezado a ejecutarse y enlazar la biblioteca sólo cuando efectivamente se hace referencia a ella (es decir. Los plugins son un uso común de las bibliotecas enlazadas dinámicamente. registra que rutinas de la biblioteca necesita el programa y el índice de nombres o números de las rutinas en la biblioteca. antes de que el proceso comience su ejecución. que son especialmente útiles cuando unas bibliotecas pueden ser sustituidas por otras con una interfaz similar. El enlace dinámico. . Se puede decir que un software tiene una "arquitectura de plugin" si utiliza bibliotecas con una funcionalidad básica con la intención de que puedan ser sustituidas. El necesario código enlazado. pero diferente funcionalidad. Esto último se denomina "retraso de carga".6 En Microsoft Windows. En cualquier caso. libctest.1.1) 3.1 . Ejemplo de los pasos para generar una biblioteca dinámica que incluya los objetos de los ficheros ctest1. son independientes de la Inconvenientes Tienen que estar presentes en la carpeta del sistema antes de ser utilizadas El tiempo de acceso a la DLL por parte de la aplicación que la usa es más lento.o (La opción -shared produce un objeto compartido que puede ser enlazado) (La opción -Wl pasa opciones al enlazador. Se reduce el tamaño de las aplicaciones que utilizan la DLL por la reutilización de su código.so.so.c y ctest2. Reunir los objetos compilados en una biblioteca con la utilidad gcc gcc -shared -Wl. 1.so.1. Mejora en el tiempo de compilación y/o carga de la aplicación (debido al menor tamaño del código) Ahorro de espacio en disco.c.c (-fPIC indica al compilador que debe generar código independiente de la posición.Ventajas e inconvenientes del uso de DLL¶s Ventajas Una función definida dentro de una DLL está disponible para cualquier aplicación Windows.0 libctest. necesario para que pueda ser compartido en ejecución por más de una aplicación) 2. Las DLL's aplicación.c para enlace dinámico en tiempo de carga.-soname. y utilización de la biblioteca en el programa prog. Crear enlaces para referenciar la biblioteca con nombres estándar ln -sf libctest.1.1 -o libctest.so ln -sf libctest.0 libctest.so.so.so. Compilar para obtener los objetos gcc -Wall -fPIC -c ctest1.0 *.c ctest2. En este caso le dice que se refiera internamente a la biblioteca como libctest. Comprobar las dependencias de bibliotecas dinámicas que tiene el ejecutable ldd prog 6./prog Estructura de una DLL de 32 bits Una DLL se puede dividir. Compilar la aplicación y enlazarla con la biblioteca dinámica gcc -o prog prog. básicamente. funciones. Funciones que contiene la DLL: Son las funciones que contiene la DLL y que fueron declaradas por el programador de la misma. -lctest 5. Ejecutar la aplicación . .:$LD_LIBRARY_PATH ldd prog 7. y es la que se encarga de cargar la DLL (cuando se vaya a usar) y descargarla de la memoria (cuando se deje de usar). Para poder hallar las bibliotecas dinámicas en ejecución hay que indicarle al sistema en qué directorio están almacenadas.c -L. etc. Para esto se usa la variable LD_LIBRARY_PATH export LD_LIBRARY_PATH=. Punto de entrada y salida a la DLL: Es la función principal de la DLL. Dicha función se llama DllEntryPoint.) que use la DLL.4. en tres partes: Archivo de cabecera: Contendrá todas las declaraciones y/o definiciones (de variables.
Report "Investigación Bibliotecas Estáticas y Dinámicas"