Windows todavía usan DLL y los programas de Mac parecen no usar DLL en absoluto. ¿Son beneficios o desventajas de usar cualquiera de estas técnicas?
Ambos usan bibliotecas compartidas, solo usan un nombre diferente.
Si la instalación de un programa incluye toda la DLL necesaria para que funcione al 100%, ¿será lo mismo que vincular estáticamente todas las bibliotecas?
Algo. Cuando vincula estáticamente las bibliotecas a un programa, obtendrá un archivo único, muy grande, con archivos DLL, tendrá muchos archivos.
El archivo estáticamente vinculado no necesitará el paso "resolver bibliotecas compartidas" (que ocurre mientras se carga el programa). Hace mucho tiempo, cargar un programa estático significaba que todo el programa se cargaba primero en la memoria RAM y, luego, se producía el paso "resolver bibliotecas compartidas". Hoy, solo las partes del programa, que en realidad se ejecutan, se cargan a pedido. Entonces, con un programa estático, no necesita resolver los archivos DLL. Con las DLL, no necesita cargarlas todas a la vez. Por lo que respecta al rendimiento, deberían estar a la par.
Que deja el "DLL Hell". Muchos programas en Windows traen todas las DLL que necesitan y las escriben en el directorio de Windows. El efecto neto es que los últimos programas instalados funcionan y todo lo demás puede estar roto. Pero hay una solución alternativa: instalar los archivos DLL en el mismo directorio que el EXE. Windows buscará primero el directorio actual y luego las diversas rutas de Windows. De esta forma, perderás un poco de espacio en el disco pero tu programa funcionará y, lo que es más importante, no romperás nada más.
Se podría argumentar que no se deben instalar DLL que ya existen (con la misma versión) en el directorio de Windows, pero entonces eres vulnerable a alguna mala aplicación que sobrescribe la versión que necesitas con algo que rompe tu cuello. El inconveniente es que debe distribuir soluciones de seguridad para su aplicación usted mismo; no puede confiar en Windows Update o cosas similares para proteger su código. Este es un lugar difícil; los crackers están ganando mucho dinero por cuestiones de seguridad y a la gente no le gustará cuando alguien robe sus datos bancarios porque no emitió correcciones de seguridad lo suficientemente pronto.
Si va a admitir su aplicación muy estrechamente para muchos, por ejemplo, 20 años, la instalación de todas las DLL en el directorio del programa es para usted. De lo contrario, escriba un código que verifique que estén instaladas las versiones adecuadas de todas las DLL y cuéntele al usuario al respecto, para que sepan por qué su aplicación comienza a fallar repentinamente.
posible duplicado de [Cuándo utilizar bibliotecas dinámicas frente a estáticas] (http://stackoverflow.com/questions/140061/when-to-use-dynamic-vs-static-libraries) –