6

我最近从 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;
}

谁能告诉我我的编译器/项目设置哪里出错了?

Ps 我已经在我的 XP 虚拟机上安装了 MS VC++ 2010 和 2012 可再发行包。我使用 Visual Studio Express 2010 编译的应用程序在我的 XP 虚拟机上运行良好。

4

4 回答 4

1

这有效:

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

配置属性 -> 常规 -> 平台工具集 -> SubsystemVisual Studio 2012 - Windows XP (v110_xp)

使用 Visual Studio 2012 Express 更新 3。

于 2013-06-27T19:29:17.843 回答
1

兄弟,使用 GNU GCC 工具链,用 mingw 重新分发。MSVS 实际上只是最小化了依赖关系,但其中一些仍然保留在 exe 中。只需在 gcc 中编译,即可支持全静态链接,exe 体积小,兼容性稳定。

于 2013-10-31T22:35:00.687 回答
1

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

于 2013-03-25T08:28:17.627 回答
0

该消息表明您的构建没有生成 32 位应用程序 - 例如,如果它是依赖于版本的 API,您会看到另一个错误,表明找不到符号。由于您已在配置管理器中表明您正在使用正确的目标平台,因此请检查您的属性资源管理器以确保您没有冲突的参数或默认值。如果您看到带有选项 /MACHINE:X64 的链接,那么您已经找到了问题所在。

如果这不起作用,我想您可以尝试运行 Sysinternals 进程资源管理器以查看哪个 cl/link 实际是使用哪些参数启动的。希望有帮助。

于 2013-01-29T17:28:50.703 回答