2010-04-05 15 views
6

Sono in esecuzione Windows 7 e Visual Studio 2008 Pro e sto provando a far funzionare la mia applicazione su Windows XP SP3.Come compilare per Windows XP in Windows 7/Visual Studio 2008

E 'davvero un minimo programma a riga di comando in modo da dovrebbe avere dipendenze ridicole:

// 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; 
} 

Ho letto da qualche parte che defining several constants such as WINVER dovrebbe permettermi di compilare per altre piattaforme. Ho provato il aggiunto il seguente ai miei /D opzioni di compilazione:

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

Ma che ha fatto alcuna differenza. Quando eseguo sulla mia macchina Windows XP (in realtà in esecuzione in un virtualbox) ottengo il seguente errore:

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

Allora, cosa mi sono perso? C'è qualcos'altro richiesto per eseguire programmi compilati MSVC o una diversa opzione del compilatore o qualcos'altro?

+0

Per quello che vale, la più piccola applicazione standard è 'int main() {}', se vuoi provarlo. Per qualcosa che utilizza la libreria standard, forse: '#include int main() {std :: cout << std :: endl;}' – GManNickG

+0

Sì, ma volevo qualcosa che sputasse fuori un output e si fermasse prima di scomparire. –

+0

Per quello che vale, l'applicazione * standard * più piccola è int main() {return 0;} – gregschlom

risposta

10

Ciò che si è perso è molto probabilmente che i programmi VC++ richiedono l'installazione di un runtime (a meno che non si colleghi staticamente, che non è l'impostazione predefinita) - il messaggio di errore che si visualizza è esattamente quello che si ottiene se non sono in ordine.

Prova a installare lo Microsoft Visual C++ 2008 SP1 Redistributable Pack sulla macchina XP: molto probabilmente vedrai che il tuo programma funziona senza modifiche di sorta.

+1

Inoltre, l'opzione per passare a un runtime collegato staticamente potrebbe funzionare correttamente. –

+1

Oppure, in alternativa, compilare con le librerie di runtime statiche: andare su "Proprietà progetto -> C/C++ -> Generazione codice -> Libreria runtime" e selezionare l'opzione senza "DLL" nel nome. –

+0

Accettato: È perfetto. –

3

La risposta di Michael spiega perché non funziona per te e cosa dovresti fare al riguardo. Rispetto a WINVER - non cambiano nulla sul tuo binario, nel senso che inizierebbe a lavorare su XP. Quello che fanno è disabilitare la funzione e le dichiarazioni di tipo nei file di intestazioni di Windows che non sono supportati nella versione del sistema operativo specificata da WINVER. Ciò garantisce che tu non chiami accidentalmente, ad es. alcune funzioni solo per Vista. Tuttavia, non è strettamente necessario necessario - se il tuo codice non si basa su alcuna funzionalità di Vista/7-only, puoi compilare senza ridefinire lo WINVER e funzionerà ancora bene su XP.

3

Basta impostare il compilatore per utilizzare il collegamento statico nelle impostazioni del progetto (Progetto -> Proprietà -> Proprietà di configurazione -> C/C++ -> Generazione codice -> Cambia "Libreria di runtime" in/MT o/MTd anziché default/MD o/MDd)

+0

Funziona perfettamente per me! – Dibsyhex

Problemi correlati