MS的Visual Studio 2012 Express的Windows桌面 - 针对Windows XP

问题描述:

我最近从Visual Studio Express的2010升级到Visual Studio 2012 Express的Windows桌面。我知道以前缺乏兼容性,目标是Windows XP,但认为这已通过更新1(我已安装)解决。MS的Visual Studio 2012 Express的Windows桌面 - 针对Windows XP

然而,我仍然有困难与C++应用程序我一直在使用2012点快速编译针对Win XP的。我已将平台工具集设置为“Visual Studio 2012 - Windows XP(v110_xp)”,但这没有什么区别。当我尝试在我的Windows XP系统(我通过VirtualBox运行Windows XP)上运行我编译的应用程序时,出现错误,我的应用程序“不是有效的Win32应用程序”。

我自己也尝试设置CLR支持“无公共语言运行库支持”和运行时库“多线程(/ MT)”。

即使使用下面的代码一个非常基本的空白C++项目,我不能让它在XP上运行:

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

谁能告诉我在哪里,我要和我的编译器去错了/项目设置?

P.s.我已在我的XP虚拟机上安装了MS VC++ 2010和2012可再发行组件包。我使用Visual Studio Express 2010编译的应用程序在我的XP虚拟机上正常工作。

+0

检查你的目标平台的构建 - >配置管理器。 – shf301

+0

您当然可以在XP上运行使用VC 10 toolchain编译的程序。这与使用VS 2010进行编译基本相同,但是您并没有声明您需要在该问题中使用VC 11工具链。 –

+0

@ shf301 - 目标平台是Win32。 – Colin

该消息表明您的构建没有生成32位应用程序 - 例如,如果它是与版本相关的API,则会看到另一个错误,指示无法找到该元件。既然您已经指出您在配置管理器中使用了正确的目标平台,请检查您的资源管理器以确保您没有冲突参数或默认值。如果你看到选项/ MACHINE:X64的链接,那么你已经发现了问题。

如果不工作,我想你可以尝试运行的Sysinternals的Process Explorer,看看哪些CL /链接实际上正在与参数启动。希望有所帮助。

检查项目的 “配置属性 - >链接 - >系统 - >子系统” 属性。
如果为空,与(/SUBSYSTEM:CONSOLE)(/SUBSYSTEM:WINDOWS)填充它。

这工作:

配置属性 - >链接器 - >系统 - >子系统= /子系统:WINDOWS

配置属性 - >常规 - >平台工具 - > SubsystemVisual工作室2012 - Windows XP中(v110_xp)

使用Visual Studio 2012快速更新3

使用与mingw重新编译的GNU GCC工具链bro。 MSVS实际上只是最小化依赖关系,但其中一些仍然保持在exe中。只需编译gcc suports全静态链接,具有较小的exe大小和稳定的兼容性。