2010-04-05 15 views
6

Estoy utilizando Windows 7 y Visual Studio 2008 Pro y tratando de conseguir mi solicitud para trabajar en Windows XP SP3.¿Cómo compilo para Windows XP en Windows 7/Visual Studio 2008

Es un programa realmente mínima línea de comandos para debe tener ninguna dependencia ridículos:

// XPBuild.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    printf("Hello world"); 
    getchar(); 
    return 0; 
} 

leí en alguna parte que debe defining several constants such as WINVER me permitirá compilar para otras plataformas. He intentado la añade lo siguiente al /D mis opciones del compilador:

;WINVER=0x0501;_WIN32_WINNT 0x0501;NTDDI_VERSION=NTDDI_WINXP 

Pero eso hizo ninguna diferencia. Cuando corro en mi máquina Windows XP (en realidad se ejecuta en un virtualbox) me sale el siguiente error:

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

Entonces, ¿qué me he perdido? ¿Se necesita algo más para ejecutar programas compilados de MSVC o una opción de compilador diferente o algo más?

+0

Por lo que vale la pena, la aplicación estándar más pequeño es 'int main() {}', si quieres probar eso. Para algo que utiliza la biblioteca estándar, tal vez: '# include int main() {std :: cout << std :: endl;}' – GManNickG

+0

Sí, pero yo quería algo, que escupió parte de la producción e hizo una pausa antes de desaparecer. –

+0

Por lo que vale, la aplicación * estándar * más pequeña es int main() {return 0;} – gregschlom

Respuesta

10

Lo que se ha perdido es que los programas de VC++ requieren la instalación de un tiempo de ejecución (a menos que enlace estáticamente, que no es el predeterminado) - el mensaje de error que muestra es exactamente el que obtiene si no están orden.

intente instalar el Microsoft Visual C++ 2008 SP1 Redistributable Pack en la máquina XP - lo más probable es ver que su programa funciona sin cambio alguno.

+1

Además, la opción de cambiar a un tiempo de ejecución vinculado estáticamente podría funcionar muy bien. –

+1

O, como alternativa, compilar con bibliotecas de tiempo de ejecución estáticas: vaya a "Propiedades del proyecto -> C/C++ -> Generación de código -> Biblioteca de tiempo de ejecución", y elija la opción sin "DLL" en el nombre. –

+0

Aceptado: Eso es perfecto. –

3

respuesta de Michael explica por qué no funciona para usted, y lo que debe hacer al respecto. Con respecto a WINVER, no cambian nada sobre su binario en un sentido que de repente comenzaría a funcionar en XP. Lo que hacen es deshabilitar la función y escribir declaraciones en los archivos de encabezados de Windows que no son compatibles con la versión del sistema operativo especificada por WINVER. Esto garantiza que no llame accidentalmente, p. alguna función solo de Vista. Sin embargo, no es estrictamente necesario que - si el código no se basa en ningún Vista/7-única funcionalidad, puede compilar sin redefinir WINVER, y todavía va a funcionar bien en XP.

3

Simplemente configure el compilador para usar enlace estático en la configuración del proyecto (Proyecto -> Propiedades -> Propiedades de configuración -> C/C++ -> Generación de código -> Cambiar "Biblioteca de tiempo de ejecución" a/MT o/MTd en lugar del default/MD o/MDD)

+0

¡Funciona perfectamente para mí! – Dibsyhex

Cuestiones relacionadas