我最近从Visual Studio Express 2010升级到Visual Studio 2012 Express for Windows Desktop。我知道之前缺乏针对Windows XP的兼容性,但认为这是由Update 1(我已安装)解决的。
但是,我仍然难以使用我使用2012 Express编译的C ++应用程序来定位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 :(得分:1)
检查项目的“配置属性 - &gt; 链接器 - &gt; 系统 - &gt; 子系统”属性。
如果为空,请填写(/SUBSYSTEM:CONSOLE)
或(/SUBSYSTEM:WINDOWS)
。
答案 1 :(得分:1)
这有效:
配置属性 - &gt;链接器 - &gt;系统 - &gt;子系统= / SUBSYSTEM:WINDOWS
配置属性 - &gt;一般 - &gt;平台工具集 - &gt; SubsystemVisual Studio 2012 - Windows XP(v110_xp)
使用Visual Studio 2012 Express Update 3。
答案 2 :(得分:1)
使用GNU GCC工具链,兄弟,用mingw重新编写。 MSVS实际上只是最小化依赖性,但其中一些仍然保留在exe中。只需在gcc中编译支持完全静态链接,具有较小的exe大小和稳定的兼容性。
答案 3 :(得分:0)
该消息表明您的构建没有生成32位应用程序 - 例如,如果它是依赖于版本的API,您会看到另一个错误,指示无法找到该符号。由于您已指示在配置管理器中使用正确的目标平台,请检查属性资源管理器以确保没有冲突的参数或默认值。如果您看到选项/ MACHINE:X64的链接,那么您已经发现了问题。
如果这不起作用,我想您可以尝试运行Sysinternals进程资源管理器,以查看哪些cl / link实际上是使用哪些参数启动的。希望有所帮助。