[C con Clase] Asunto DLL

Steven Davidson steven en conclase.net
Jue Dic 21 12:14:27 CET 2006


Hola Abel,

El pasado 2006-12-21 05:30:27, Abel escribió:
 
A> Hola a todos,
A>   por el momento me encuentro trabajando con LabWindows y tuve tambien el mismo problema que alguien de la lista, resulta que mi ejecutable no funciona en otra computadora donde no esté instalado un DLL, osea busca ese DLL y no lo encuentra. Mi pregunta general es: 
A>   - Qué es exáctamente un DLL?

La sigla DLL significa "Dynamically Linked Library", que traducido viene a ser: "Biblioteca Enlazada (Ligada) Dinámicamente".

Típicamente, al generar el fichero ejecutable, enlazamos una o más bibliotecas agregando sus contenidos a tal fichero. Esto se llama un enlazado estático, ya que podríamos decir que las bibliotecas [estáticas] están dentro del fichero ejecutable. La ventaja es que el fichero ejecutable es singular y sin dependencias de otros ficheros. Esto supone que el tamaño del fichero ejecutable aumenta, ya que contiene el código del programa a ejecutar más todo el contenido de las bibliotecas enlazadas. Esto puede ser una desventaja, ya que se demora la carga del fichero para ser ejecutado y a veces no hay espacio para ello ya que toda la información se carga de una sola vez. La otra desventaja es que si queremos cambiar la implementación de las bibliotecas, porque posteriormente se hizo una mejora o se descubrió errores, tenemos que reenlazar todo el proyecto lanzando otro fichero ejecutable.

Una alternativa es cargar las bibliotecas dinámicamente, o sea, en tiempo de ejecución. El programa es quien se encarga de usar las bibliotecas que interesan. Esto se hace a través del sistema operativo, el cual gestiona la carga y liberación de las DLL's. La ventaja es que el fichero ejecutable ya no tiene que ser tan grande, porque ahora se encarga de la lógica del programa, dejando la gestión de las bibliotecas a otros partidos. Por ejemplo, las implementaciones son cosa de los diseñadores de las bibliotecas, por lo que pueden ser modificadas sin tener que modificar el fichero ejecutable. Además, el programa puede seleccionar qué funciones usar dependiendo de las DLL's que existan. El típico criterio es las diferentes versiones existentes de una misma DLL. De esta manera, el programa puede elegir una versión actualizada o una versión anterior por motivos de compatibilidad.

La otra ventaja es que la DLL se carga una sola vez y reside en memoria hasta que ya no haga falta. Al ocurrir esto, el S.O. puede compartir la misma DLL con otros programas que requieran la misma biblioteca. De esta manera, no tenemos varios programas con código "repetido", como suele ocurrir con las bibliotecas estáticas. Por ejemplo, la implementación de las bibliotecas ANSI C se puede crear una DLL la cual es compartida por todos los programas y así se puede eliminar esa parte del fichero ejecutable. Además ahorramos espacio al existir una sola copia de las funciones en memoria.

Las DLL's sólo existen bajo aquellos sistemas operativos que permitan tal técnica. El término DLL existe bajo MS-Windows, mientras que bajo Unix se llama "Shared Objects" u Objetos Compartidos, teniendo la extensión ".so".


Espero haber aclarado el tema.

Steven


Más información sobre la lista de distribución Cconclase