【问题标题】:How do I compile for Windows XP with Visual Studio 2012?如何使用 Visual Studio 2012 为 Windows XP 编译?
【发布时间】:2012-10-19 07:17:24
【问题描述】:

好的,所以我在 Windows 7 x64 中使用 Visual Studio 2012 进行编程和编译。我的应用程序在那里运行良好,但是当我尝试从 Windows XP SP3 虚拟机执行它时,我立即收到“xxxx.exe 不是有效的 win32 应用程序”。

正在使用静态链接编译应用程序,即使用/MT。我在 targetver.exe 中将 _WIN32_WINNT 设置为 0x0501;配置管理器设置为 Win32,Linker 高级选项 中的目标机器设置为 MACHINEX86。

我的 targetver.h 看起来像这样:

#include <winsdkver.h>

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

#include <SDKDDKVer.h>

我也尝试使用 /MD 进行编译并安装 .NET Framework,但这也无济于事。

我一无所知,我真的需要一些帮助,因为我需要让它在 Windows XP 上工作。

【问题讨论】:

  • VC++ 2012 RTM不支持 WinXP。你安装CTP of WinXP targeting with VC++ 2012了吗?请参阅this blog article 了解更多信息。
  • 哦,这解释了一切。本可以节省我几个小时试图让它工作的时间。我会看看这些链接,谢谢。
  • 请注意Visual Studio 不是编程语言;这是一个开发环境。它支持多种语言(C#、VB.NET、C++ 等)。您使用的 语言 是 C++,这就是您的问题应该解决的问题。大多数时候,语言和 IDE 之间存在重要区别。 :-)
  • 是的,我知道肯。如果这个问题有任何误导性,我很抱歉。我无意说 Visual Studio 是一种编程语言,我只是想指出它是我的开发环境,正如你所说,因为它似乎是我的问题的原因。还是谢谢。
  • 刚刚尝试了CTP for WinXP Targetting(希望我使用该链接进行了正确的格式化)并且它完美地工作。我想我不需要切换回 Visual Studio 2010。非常感谢,如果可以的话,我会支持你;可悲的是,我不能。然而。

标签: c++ c visual-c++ windows-xp visual-studio-2012


【解决方案1】:

VC++ 2012 RTM不支持 Windows XP - 2012 年晚些时候在 Visual Studio 2012 Update 1 中提供了支持。

CTP of Windows XP targeting with VC++ 2012 可以安装,但您必须静态链接 CRT 才能进行部署。请参阅this blog article 了解更多信息。

Visual Studio 2012 Update 1 添加了对在 Windows XP 上运行使用 VC++ 2012 构建的应用程序的官方支持以及动态链接 CRT 的能力。

【讨论】:

  • 我的应用程序也有同样的问题,但我使用的是 Visual Studio 2015。但我不知道如何使用静态链接进行编译。
  • @Bart :使用 VC++ 2015,您不需要静态链接(当然,如果您愿意,也可以)。相反,您需要进入项目属性并将“平台工具集”选项更改为“Visual Studio 2015 - Windows XP (v140_xp)”。如果该选项不存在,那么您需要重新运行 VS 设置并自定义安装选项以包括 WinXP 支持。
  • (我不确定过去时形式是否正确(因为假定 RTM 不可用而选择),但答案不应该是它如何变化的历史记录(即属于修订历史),它不应该有元信息(例如为什么答案改变了 - 这就是 cmets 的用途)。答案应该是当前最好的版本。随意恢复或将其放入其他形式。 )
【解决方案2】:

应该做两件事:

  • 配置属性 → 常规页面,将平台工具集更改为:Visual Studio 2012 - Windows XP (v110_xp) ;

  • 菜单链接器 → 系统。将子系统更改为:控制台/Windows。

详细解释在这里:http://software.intel.com/en-us/articles/linking-applications-using-visual-studio-2012-to-run-on-windows-xp

【讨论】:

  • 链接(实际上)已损坏(“您要查找的文章已停用!”)。
【解决方案3】:

生成EXE文件时,32位的版本会在项目文件夹bin\x86\Release中。

【讨论】:

  • 在提出问题时(2.5 年前)VS 2012(没有任何更新的生产版本)无法针对 XP 开箱即用。此后的更新早已解决了这个问题。
  • @MichaelPetch:更新提供了一个可用的解决方案,但您仍然需要在项目设置中切换工具链。所以它仍然不是“开箱即用的目标 XP”。
  • @BenVoigt:我倾向于不同意。这是一个项目设置。这就像说任何不是项目默认设置的东西都不是开箱即用的。或者优化不是开箱即用的。如果您必须不遗余力地从 MS 下载更多文件并将它们集成到环境中,那么我不会认为它们是开箱即用的。例如,出于这个原因,我不考虑开箱即用地创建 ATL 和 WTL 项目。
  • @MichaelPetch:好的,我只是说这是一个我们应该期待看到的问题,因为它不是“默认正确的”。
  • @BenVoigt:我不反对这一点。出于这个原因,我没有否决或投票结束这个问题。如果今天问这个问题,答案会有所不同,因为这只是说他们应该将他们的 VS2012 升级到最新的 Service Pack 并使用项目设置来打开所需的行为。因为这个答案来晚了,所以我回复这个帖子很晚。
猜你喜欢
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2023-03-17
  • 2020-02-13
  • 2013-05-06
  • 2012-06-23
  • 2014-07-10
  • 1970-01-01
相关资源
最近更新 更多