面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志
Posted
技术标签:
【中文标题】面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志【英文标题】:Visual C++ Compiler Flag for Visual Studio 2013 for Targeting XP 【发布时间】:2014-04-29 08:52:52 【问题描述】:我想使用针对 XP 环境的 Visual Studio 2013 创建一个 C++ 程序,我知道项目属性 -> 配置选项卡中的 UI 选项来设置平台工具集顶部 Windows v120_xp,我想实现使用命令行选项。如何做到这一点。
对于 Visual Studio 2012,我知道该选项
设置 CL=/D_USING_V110_SDK71_;%CL%
我正在寻找类似的选项是 Visual Studio 2013。你能帮忙吗?
【问题讨论】:
【参考方案1】:_USING_V110_SDK71_ 宏与构建与 XP 兼容的程序无关,它只是一个副作用。基本选项是 linker 选项,/SUBSYSTEM。请注意此选项如何让您指定主要和次要子系统版本号。如果您将此选项设置为 5,1,您的程序只能在 XP 上运行。从 VS2012 开始,默认设置为 6,0,即当前一代 Windows 的版本号。运行此类程序需要 Vista 或更高版本。
这实际上是一件大事,降级版本号会打开 Windows 中的一些应用程序兼容填充程序,这些填充程序旨在处理一个宣布它对现代 Windows 版本一无所知的程序。尤其是 Aero 对窗口指标撒谎的方式,旨在让一个古老的程序仍然可以在宽窗口边框下运行。
CRT 也受到影响,与线程和本地化相关的相当模糊的细节。当然需要测试。请牢记支持这种古老操作系统的成本。
最后但同样重要的是,您还需要使用适当的 SDK 版本。最后一个仍然与 XP 兼容的是 v7.1。如果您从命令行构建,那么您将获得 8.1,您需要首先通过设置 %WindowsSdkDir% 环境变量来修复它。并且您需要在#include Windows.h 的标头中设置目标 Windows 版本,希望是预编译的标头。将_WIN32_WINNT定义为0x501以匹配XP,避免意外使用XP上没有的winapi函数。
【讨论】:
看起来好像 Visual Studio 2013 安装程序实际上也安装了最新的 SDK,特别是 7.1A。除非您特别需要 Windows SDK 中的某些东西,否则您只需要 VS 2013。以上是关于面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Visual Studio 2012 在 XP 上定位 .NET 4.0.3?应用程序无法运行“不是有效的 Win32 应用程序”
Visual Studio 2012 上的计算机错误中缺少 GDAL201.dll
Visual Studio 2012 为 XP 编译 - 无效 win32 - v110_xp
在 Visual Studio 2013 XP 工具集上构建提升
Windows 7 XP 模式和 Visual Studio 2003
我可以在 Windows XP 上使用 Visual Studio 2010 远程调试器从 Visual Studio 2012 调试 .Net 4.0 应用程序吗?