2013-01-13 11 views
6

Ich habe kürzlich von Visual Studio Express 2010 auf Visual Studio 2012 Express für Windows Desktop aktualisiert. Ich bin mir der früheren mangelnden Kompatibilität mit Windows XP bewusst, dachte aber, dass dies durch Update 1 (das ich installiert habe) behoben wurde.MS Visual Studio 2012 Express für Windows Desktop - Targeting für Windows XP

Allerdings habe ich immer noch Schwierigkeiten mit Windows XP mit den C++ - Anwendungen, die ich mit 2012 Express kompiliert habe. Ich habe das Platform Toolset auf "Visual Studio 2012 - Windows XP (v110_xp)" gesetzt, aber das macht keinen Unterschied. Wenn ich versuche, meine kompilierte Anwendung auf meinem Windows XP-System auszuführen (ich verwende Windows XP über VirtualBox), erhalte ich den Fehler, dass meine Anwendung "keine gültige Win32-Anwendung ist".

Ich habe auch versucht, die CLR-Unterstützung auf "Keine Common Language Runtime-Unterstützung" und die Laufzeitbibliothek auf "Multi-Thread (/ MT)" einzustellen.

Selbst bei einem sehr einfachen Rohling C++ Projekt mit dem folgenden Code, ich kann es einfach nicht auf XP laufen:

#define _WIN32_WINNT 0x0501 
#define WINVER 0x0501 
#define NTDDI_VERSION 0x0501 

#include <iostream> 

int main() 
{ 
    std::cout << "TEST" << std::endl; 

    std::cout << std::endl << std::endl << "Press ENTER to close this window."; 
    std::cin.get(); 
    return 0; 
} 

Kann mir jemand sagen, wo ich falsch gehe mit meinem Compiler/Projekt Einstellungen?

Ps.s. Ich habe die verteilbaren MS VC++ 2010 und 2012 Pakete auf meiner virtuellen Maschine XP installiert. Anwendungen, die ich mit Visual Studio Express 2010 kompiliert habe, funktionieren gut auf meinem virtuellen Computer XP.

+0

Überprüfen Sie Ihre Zielplattform in Build -> Configuration Manager. – shf301

+0

Sie können mit VC 10 Toolchain kompilierte Programme auf XP ausführen. Das ist im Wesentlichen das Gleiche wie das Kompilieren mit VS 2010, aber Sie haben nicht angegeben, dass Sie VC 11 Toolchain in der Frage benötigen. –

+0

@ shf301 - Zielplattform ist Win32. – Colin

Antwort

0

Die Nachricht gibt an, dass Ihr Build keine 32-Bit-Anwendung erzeugt. Wenn es beispielsweise eine versionsabhängige API wäre, würden Sie einen weiteren Fehler sehen, der besagt, dass das Symbol nicht gefunden werden kann. Da Sie angegeben haben, dass Sie die richtige Zielplattform im Konfigurationsmanager verwenden, überprüfen Sie Ihren Eigenschaftsexplorer, um sicherzustellen, dass keine widersprüchlichen Argumente oder Standardwerte vorliegen. Wenn Sie einen Link mit der Option/MACHINE: X64 sehen, dann haben Sie das Problem gefunden.

Wenn das nicht funktioniert, könnten Sie versuchen, Sysinternals Process Explorer auszuführen, um zu sehen, welche cl/link tatsächlich mit welchen Argumenten gestartet werden. Ich hoffe, das hilft.

1

Überprüfen Sie Ihr Projekt "Konfigurationseigenschaften ->Linkers ->-System ->Subsystem" Eigenschaften.
Wenn leer, füllen Sie es mit (/SUBSYSTEM:CONSOLE) oder (/SUBSYSTEM:WINDOWS).

1

Dies funktioniert:

Konfigurationseigenschaften -> Linker -> System -> Subsystem = /SUBSYSTEM: WINDOWS

Konfigurationseigenschaften -> Allgemein -> Plattform Tool Set -> SubsystemVisual Studio 2012 - Windows XP (v110_xp)

Verwenden von Visual Studio 2012 Express-Update 3.

1

Verwenden Sie GNU GCC Werkzeugkette, bro, die mit Mingw redistrebutiert. MSVS minimiert tatsächlich Abhängigkeiten, aber einige von ihnen bleiben immer noch in exe. Einfaches Kompilieren in gcc unterstützt die vollständige statische Verknüpfung, mit kleiner exe-Größe und stabiler Kompatibilität.