Hice algunos juegos con Visual C ++ 2015 y OpenGL. Cuando lo ejecuté en mi máquina no había ningún problema, pero cuando lo ejecuté en otras máquinas, muestra que faltan algunas DLL. Quiero saber cómo asegurarme de que no sucederá la próxima vez y ¿qué cosas debo tener en cuenta para evitar problemas de archivos perdidos?
c++
visual-studio
Ankit singh kushwah
fuente
fuente
Respuestas:
Debe instalar los redistribuibles para la versión de Visual Studio que utilizó en cualquier máquina que quiera ejecutar los ejecutables, por ejemplo Debe https://www.microsoft.com/en-us/download/details.aspx?id=48145 para VS2015 . También es posible que necesite redists para DirectX u otros componentes.
Los instaladores de aplicaciones generalmente instalan todos los redistribuibles para cualquiera de sus dependencias. Puede realizar dicho instalador con InnoSetup, NSIS, WIX u otras herramientas.
Es posible hacer ejecutables que no necesitan ningún redistribuible, pero luego está limitado a un subconjunto de la funcionalidad principal de Windows, que generalmente no es suficiente para crear ningún tipo de juego significativo o aplicación grande. Los propios instaladores son un ejemplo de aplicaciones que no necesitan dependencias para ejecutarse.
fuente
MSVCRT.DLL
(incluido con el propio Windows) en lugar deMSVCPxxx.DLL
(versiones específicas de la versión incluidas con los lanzamientos de Visual Studio).Uso Dependency Walker para rastrear las DLL que faltan:
También hay una opción de tiempo de compilación en VS para vincular estáticamente las DLL:
fuente
Para Visual C ++, tiene algunas opciones de cómo manejar la redistribución: ejecute un EXE desde su instalador (con derechos de administrador), use un módulo de combinación MSM con su instalador MSI o incluso DLL lado a lado. Ver MSDN para los detalles.
El mayor problema es OpenGL. La única versión de OpenGL que se incluye con Windows es un procesador de software OpenGL 1.5. Cualquier otra cosa requiere la instalación de un ICD de terceros.
fuente
Descargo de responsabilidad: esta es una solución , no una solución a su respuesta, pero aún así, una posibilidad muy viable.
Si desea estar absolutamente seguro de que no hay dependencias de VS en sí, pero viene con sus propios inconvenientes, en la configuración de generación de código puede elegir ir con Multi Threaded (MT) / Multi Threaded Debug (MD) (para compilaciones de depuración) ) en lugar de MT DLL (MTd) / MT Debug DLL (MDd).
¿Cuáles son los inconvenientes?
¿Y cuáles son los pros?
Mira este enlace para obtener una explicación más elaborada y las fallas y caídas que puede encontrar al usar un tiempo de ejecución estático.
Otra solución sería colocar todas las DLL necesarias donde está su binario. Su aplicación no se beneficiará de las actualizaciones (a las bibliotecas de tiempo de ejecución), pero eso es todo.
La solución real es distribuir la aplicación en modo dll de liberación / no depuración (MTd) y proporcionar el instalador redistribuible VC ++ correcto (y cualquier otro instalador de biblioteca que pueda usar, por ejemplo, OpenAL, DirectX9, PhysX), y dejar que el usuario ejecute eso antes de ejecutar su aplicación (como señalaron otras respuestas).
También asegúrese de informar al usuario que posiblemente necesita actualizar sus controladores de GPU (ya que también contienen múltiples tiempos de ejecución para muchas aplicaciones, por ejemplo, OpenGL, Vulcan).
fuente
Mi solución fue copiar y pegar la DLL que causó el error en la carpeta donde se encuentra el archivo .sln en Visual Studio. Después de la
#include
sección, lo escribí#pragma comment (lib, "lost DLL name with .dll")
y lo resolví!Nota: Resolví el problema que encontré con una DLL de biblioteca de terceros (vulkan api). Tal vez no se sabe, pero el 90% funcionará buena suerte :)
fuente