visual studio moneda example dlls create crear dll static-libraries

studio - Archivos DLL y LIB: ¿qué y por qué?



dll visual studio (5)

Sé muy poco sobre las DLL y las LIB salvo que contienen un código vital necesario para que un programa se ejecute correctamente: bibliotecas. Pero, ¿por qué los compiladores los generan en absoluto? ¿No sería más fácil incluir todo el código en un solo ejecutable? ¿Y cuál es la diferencia entre DLL y LIB?


Hay bibliotecas estáticas (LIB) y bibliotecas dinámicas (DLL).

Las bibliotecas se utilizan porque es posible que tenga un código que quiera usar en muchos programas. Por ejemplo, si escribe una función que cuenta el número de caracteres en una cadena, esa función será útil en muchos programas. Una vez que obtiene esa función funcionando correctamente, no desea tener que volver a compilar el código cada vez que la usa, por lo que coloca el código ejecutable para esa función en una biblioteca, y el enlazador puede extraer e insertar el código compilado en su programa. . Las bibliotecas estáticas a veces se llaman ''archivos'' por este motivo.

Las bibliotecas dinámicas dan un paso más. Parece un desperdicio tener múltiples copias de las funciones de la biblioteca ocupando espacio en cada uno de los programas. ¿Por qué no pueden todos compartir una copia de la función? Esto es para lo que son las bibliotecas dinámicas. En lugar de construir el código de la biblioteca en su programa cuando se compila, puede ejecutarse asignándolo a su programa a medida que se carga en la memoria. Múltiples programas que se ejecutan al mismo tiempo y usan las mismas funciones, todos pueden compartir una copia, guardando la memoria. De hecho, puede cargar bibliotecas dinámicas solo según sea necesario, dependiendo de la ruta a través de su código. No tiene sentido que las rutinas de la impresora ocupen la memoria si no está imprimiendo. Por otro lado, esto significa que debe tener una copia de la biblioteca dinámica instalada en cada máquina en la que se ejecuta su programa. Esto crea su propio conjunto de problemas.

Como ejemplo, casi todos los programas escritos en "C" necesitarán funciones de una biblioteca llamada "C biblioteca de tiempo de ejecución", aunque pocos programas necesitarán todas las funciones. El tiempo de ejecución de C viene en versiones estáticas y dinámicas, por lo que puede determinar qué versión utiliza su programa según las necesidades particulares.


Otra diferencia radica en el rendimiento.

Como el DLL se carga en tiempo de ejecución por el .exe (s), el .exe (s) y el DLL funcionan con el concepto de memoria compartida y, por lo tanto, el rendimiento es bajo en relación con el enlace estático.

Por otro lado, un .lib es un código que está vinculado estáticamente en tiempo de compilación en cada proceso que solicita. Por lo tanto, el .exe (s) tendrá memoria única, lo que aumenta el rendimiento del proceso.


Otro aspecto es la seguridad (ofuscación). Una vez que se extrae un fragmento de código de la aplicación principal y se coloca en una Biblioteca de vínculos dinámicos "separada", es más fácil atacar, analizar (aplicar ingeniería inversa) el código, ya que se ha aislado. Cuando el mismo fragmento de código se guarda en una Biblioteca LIB, es parte de la aplicación de destino compilada (vinculada), y por lo tanto es más difícil aislar (diferenciar) ese fragmento de código del resto de los binarios de destino.


Una DLL es una biblioteca de funciones que se comparten entre otros programas ejecutables. Simplemente busque en su directorio windows / system32 y encontrará docenas de ellos. Cuando su programa crea una DLL, normalmente también crea un archivo lib para que la aplicación * .exe pueda resolver los símbolos declarados en la DLL.

A .lib es una biblioteca de funciones que están vinculadas estáticamente a un programa, NO son compartidas por otros programas. Cada programa que se vincula con un archivo * .lib tiene todo el código en ese archivo. Si tiene dos programas, A.exe y B.exe, que enlazan con C.lib, cada A y B contendrán el código en C.lib.

La forma de crear archivos DLL y libs depende del compilador que use. Cada compilador lo hace de manera diferente.


Una razón importante para crear una DLL / LIB en lugar de simplemente compilar el código en un archivo ejecutable es la reutilización y reubicación. La aplicación Java o .NET promedio (por ejemplo) probablemente usará varias bibliotecas de terceros (o framework). Es mucho más fácil y rápido compilar contra una biblioteca preconstruida, en lugar de tener que compilar todo el código de terceros en su aplicación. La compilación de su código en las bibliotecas también fomenta las buenas prácticas de diseño, por ejemplo, el diseño de sus clases para ser utilizado en diferentes tipos de aplicaciones.