visual studio - studio - ¿Por qué mi aplicación requiere el paquete redistribuible de Visual C++?
como acelerar visual studio 2017 (2)
Estoy escribiendo una aplicación simple de C++
en Visual Studio. También tiene un proyecto de instalación. Funciona bien en mi máquina de desarrollo, pero cuando instalo esta aplicación en la máquina del usuario, requiere el Visual C++ Redistributable Package
. Me pregunto por qué mi aplicación requiere C++ Redistributable
. La biblioteca de tiempo de ejecución estándar de C++
se envía con Windows, ¿no es así?
Aunque algunos comentarios dicen que «se vinculan estáticamente con la biblioteca de tiempo de ejecución, pero puede causar muchos problemas cuando tienes tanto .exe como .dll en tu aplicación.» Esto NO ES VERDADERO. ¡Primero NO vinculamos DLL de forma estática! Vinculamos estáticamente OBJs y LIBs. LIB son bibliotecas estáticas; Las DLL son bibliotecas dinámicas y puede optar por utilizar LIBs (estático) o DLL (dinámico). Depende totalmente de ti elegir. El ÚNICO inconveniente (para los fanáticos de DLL) es que si desea actualizar una biblioteca, debe compilar y vincular de nuevo. Personalmente despliego TODO mi software estático vinculado y por eso gano la bonificación de ni siquiera necesito instaladores. El software que desarrollo es 100% portátil (una característica que en la era previa al instalador era un procedimiento general), y el usuario final es libre de COPIA simple de una carpeta a otra o incluso del disco duro a una unidad flash (o viceversa). versa). El mensaje de error «DLL no encontrado» simplemente no existe ... NUNCA.
Algunas personas piensan enlazar estáticamente como software de juguete: ¡INCORRECTO! Puedo escribir una aplicación completa que se conecta a un DBMS (Oracle, SQL Server, ...) o cualquier otro tipo de aplicación.
La única versión de la biblioteca de tiempo de ejecución de C que envía Microsoft con la mayoría de las versiones de Windows de 32 bits es msvcrt.dll
. Esta biblioteca proporciona un conjunto típico de funciones de biblioteca requeridas por los programas C y C ++. Estos incluyen manipulación de cadenas, asignación de memoria, llamadas de entrada / salida de estilo C, etc.
El compilador de Visual Studio 6.0 enlaza con esta biblioteca, por lo que si está desarrollando en VS 6.0 no debería encontrar ningún problema en la mayoría de los equipos de los usuarios.
Sin embargo, si está desarrollando en VS 2005, VS 2008, VS 2010, VS 2012, VS 2013 o VS 2015, debe distribuir bibliotecas de tiempo de ejecución de C adicionales junto con su aplicación. Esto se debe a que sus compiladores vinculan contra msvcrt80.dll
, msvcrt90.dll
, msvcrt100.dll
, msvcrt110.dll
, msvcrt120.dll
y msvcrt140.dll
, respectivamente, que no se incluyen con Windows.
Soluciones:
La posible solución es vincular estáticamente con la biblioteca de tiempo de ejecución, pero puede causar muchos problemas en caso de que tenga tanto
.exe
como.dll
en su aplicación. No hagas eso .Para ser más específico, me permitiré citar una parte de this respuesta:
Usar / MT es arriesgado si crea DLL así como también un EXE. Terminará con múltiples copias del CRT en su programa. Esto fue especialmente un problema con versiones anteriores de VS donde cada CRT obtendría su propio montón, no tanto con VS2012. Pero aún puede tener problemas de tiempo de ejecución desagradables cuando tiene más de una variable "errno", por ejemplo. Se recomienda utilizar / MD para evitar dicha pérdida.
Otra posible solución es requerir que se instale un paquete redistribuible de Microsoft Visual C ++ en la máquina del usuario.
Se puede hacer especificando este requisito en la propiedad de requisitos previos en su proyecto de instalación.
Además, puede distribuir el
dll
tiempo de ejecución incluyendo en el proyecto de instalación el " módulo de fusión " apropiado. En este caso, no olvide agregar el "módulo de fusión de políticas" apropiado para evitar errores causados por una versión de tiempo de ejecución incorrecta.Finalmente, puede colocar los archivos DLL necesarios en la misma carpeta en la que está instalada su aplicación.
Otras lecturas:
- " Redistribuir archivos de Visual C ++ " - Documentación oficial de MSDN