Mi entorno C ++ preferido actual es la edición gratuita y en gran medida excelente Microsoft Visual Studio 2005 Express. De vez en cuando he enviado archivos .exe de lanzamiento a otras personas con resultados satisfactorios. Sin embargo, recientemente hice el perturbador descubrimiento de que los agradables resultados se basaban en más suerte de la que me gustaría. Intentar ejecutar uno de estos programas en una caja XP vieja (cosecha de 2001, no escrupulosamente actualizada) me dio nada más que un desagradable mensaje "El sistema no puede ejecutar x.exe" (o similar).
Algunas búsquedas en Google revelaron que con este conjunto de herramientas, incluso especificar un enlace estático da como resultado un hello-world.exe simple que realmente depende de archivos .dll adicionales (msvcm80.dll, etc.). Un sistema de planificación de versiones increíblemente elaborado (¿archivos de manifiesto, alguien?) No permitirá que el .exe se ejecute sin las versiones .dll correctas. No quiero ni necesito estas cosas, solo quiero un .exe autónomo anticuado que no haga nada más que operaciones Win32 con el mínimo común denominador y se ejecute en cualquier sistema operativo win32 antiguo.
¿Alguien sabe si es posible hacer lo que quiero hacer con mi conjunto de herramientas existente?
Gracias.
fuente
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease'
. ¿Hay algún otro lugar para cambiar el tipo de construcción? Estoy construyendo la aplicación wxWigets, muy parecida a @BillForster. Entonces, ¿tendré que reconstruir wxWidgets? ¿Cómo puedo hacer eso?Mi experiencia en Visual Studio 2010 es que se necesitan dos cambios para no necesitar DLL. Desde la página de propiedades del proyecto (haga clic con el botón derecho en el nombre del proyecto en la ventana del Explorador de soluciones):
En Propiedades de configuración -> General, cambie el campo "Uso de MFC" a "Usar MFC en una biblioteca estática".
En Propiedades de configuración -> C / C ++ -> Generación de código, cambie el campo "Biblioteca en tiempo de ejecución" a "Multihilo (/ MT)"
No estoy seguro de por qué se necesitaban ambos. Usé esto para eliminar una dependencia en glut32.dll.
Agregado más tarde: al realizar estos cambios en las configuraciones, debe realizarlos en "Todas las configuraciones" --- puede seleccionar esto en la parte superior de la ventana Propiedades. Si realiza el cambio solo en la configuración de depuración, no se aplicará a la configuración de la versión y viceversa.
fuente
He tenido este mismo problema de dependencia y también sé que puede incluir las DLL de VS 8.0 (¡solo liberar! ¡No depurar! --- y su programa también debe liberarse) en una carpeta con el nombre apropiado, en el carpeta principal con su .exe:
Cómo: implementar con XCopy (MSDN)
También tenga en cuenta que se garantiza que las cosas saldrán mal si necesita tener código C ++ y C en el mismo .exe vinculado estáticamente porque obtendrá conflictos de vinculadores que solo se pueden resolver ignorando el libXXX.lib correcto y luego vinculando dinámicamente (DLL) .
Por último, con un conjunto de herramientas diferente (VC ++ 6.0) las cosas "simplemente funcionan", ya que Windows 2000 y versiones posteriores tienen instaladas las DLL correctas.
fuente
Con respecto a la respuesta de Jared, tener Windows 2000 o mejor no necesariamente solucionará el problema en cuestión. La respuesta de Rob funciona, sin embargo, es posible que esta solución introduzca problemas de seguridad, ya que las actualizaciones de Windows no podrán parchear las aplicaciones creadas como tales.
En otra publicación, Nick Guerrera sugiere empaquetar Visual C ++ Runtime Redistributable con sus aplicaciones, que se instala rápidamente y es independiente de Visual Studio.
fuente