He leído argumentos en ambos lados sobre si se debe vincular de forma estática o dinámica a la biblioteca C runtime en proyectos de Visual Studio, y aún no estoy del todo seguro de qué pensar.¿Debo vincular el tiempo de ejecución de Visual Studio C de forma estática o dinámica?
Mi proyecto extrae algunas bibliotecas de terceros (Python, HDF5, Trilinos y Microsoft MPI), cada una de las cuales debe compilarse con la misma biblioteca de tiempo de ejecución que mi último ejecutable (de lo contrario, no pueden vincularse). Al vincular estáticamente, cada una de estas bibliotecas contendrá una copia del tiempo de ejecución de C. Leí que esto puede causar problemas porque el ejecutable final contendrá varias copias del tiempo de ejecución, ninguna de las cuales puede interactuar entre sí. Pero, ¿no se quejaría el vinculador si los mismos símbolos se definieran de forma múltiple?
Me gustaría evitar "DLL Hell" pero me preocupan los errores insidiosos que pueden surgir al vincular estáticamente en varias copias del tiempo de ejecución. ¿Estoy leyendo cosas mal?
Además, estoy usando Visual Studio 2005 y he leído que el tiempo de ejecución del Service Pack 1 no es compatible con versiones anteriores. ¿Esto significa que una aplicación creada sin SP1 no se ejecutará en una máquina que tenga los dlls SP1, incluso si tienen el mismo nombre (por ejemplo, msvcr80.dll)?
Esta es la respuesta que estaba buscando. Parece que los ensamblajes privados son la solución más segura para mi problema. Me recuerda a los paquetes de Mac en que una aplicación se distribuye en una estructura de directorio fija. ¡Gracias! – user76293
Pero los ensamblados privados no serán parcheados por Windows Update, ¿correcto? Por lo tanto, deberá mantener su copia de la biblioteca en tiempo de ejecución actualizada por su cuenta. Ver también http://blogs.msdn.com/larryosterman/archive/2004/04/29/123090.aspx –
Nunca tuve esos ensamblajes privados funcionando si mi carpeta 'application' (Mi aplicación) contiene una mezcla de 32 bits y aplicaciones de 64 bits. No puede simplemente agregar algo como x32 o x64 al nombre de la carpeta del ensamblado, lo que significa que solo puede usar los ensamblajes privados si solo tiene aplicaciones de 32 bits o solo de 64 bits. – Patrick