risorse | vs2013-xp

Compilare per Windows XP con Visual Studio 2013 Express for Windows Desktop

La configurazione predefinita di Visual Studio 2013 Express for Windows Desktop genera binari che non sono compatibili con Windows XP. La ragione è che a partire da Visual Studio 2012 l'SDK di riferimento è quello di Windows 8, che non è conforme all'API di Windows XP:[2]

…the Windows 8 SDK headers and libs may have removed deprecated Windows XP APIs with no mitigation.

L'esecuzione di un programma compilato con l'SDK 8 su Windows XP produce il messaggio d'errore:

«program.exe» is not a valid Win32 application.

Il Visual Studio 2012 Update 1 e il Visual Studio 2013 contengono, assieme al nuovo SDK, anche quello di Windows 7. Essendo quest'ultimo compatibile con Windows XP, è di nuovo possibile creare applicativi funzionanti anche su quel sistema operativo.

Le istruzioni per attivare l'SDK di Windows 7 di Visual Studio 2013 Express for Windows Desktop dall'IDE sono riportate in [2]; per attivarlo dalla linea di comando, la procedura è la seguente:

Nota: la macro _USING_V110_SDK71_ va definita sia per i file C++ che per quelli delle risorse (*.rc).

Nota: gli asterischi in LNKFLAGS stanno ad indicare che l'impostazione del sotto-sistema corrisponde a quella originale del progetto, ciò che conta è la specifica addizionale della versione, che è diversa per le due piattaforme x86/x64.

I binari preparati con l'SDK vecchio dipendono comunque dal nuovo run-time, non ce n'è uno dedicato[2]:

The redist (runtime, e.g. msvcr110.dll) is the same for all platforms, no separate redist for XP.

La citazione si riferisce a Visual Studio 2012; per il Visual Studio 2013, il runtime C è msvcr120.dll, msvcp120.dll quello del C++.

Conclusioni

C'è qualche controindicazione a compilare binari in questa modalità? Sì, se si ha l'intenzione di farli girare su sistemi operativi più moderni[2]:

…if your application compiles and runs we cannot guarantee it will continue to do so in future releases and updates of Visual Studio.

Riferimenti

  1. “Visual C++ Compiler Flag for Visual Studio 2013 for Targeting XP”. StackOverflow.com. <http://stackoverflow.com/questions/23359943/visual-c-compiler-flag-for-visual-studio-2013-for-targeting-xp>. Visitato il 15/09/2014.
  2. “Windows XP Targeting with C++ in Visual Studio 2012”. Visual C++ Team Blog. <http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx>. Visitato il 15/09/2014.
  3. “/SUBSYSTEM (Specify Subsystem)”. MSDN. <http://msdn.microsoft.com/en-us/library/fcc1zstk%28v=vs.110%29.aspx>. Visitato il 15/09/2014.

Pagina modificata il 15/09/2014