繁体   English   中英

如何在 MSVS 中为 Windows XP 编译 C++ 应用程序?

[英]How to compile C++ app for Windows XP in MSVS?

当我阅读这篇文章时,下载最新的MSVS 2022然后安装工具集C++ Windows XP Support for VS 2017 (v141) tools [Deprecated]就足够了。

之后在项目属性中的 Visual Studio 中设置此工具集。 根据链接的文章,在 XP 支持下编译 C++ 应用程序就足够了。

但是,如果我在 XP 64 位 SP2 上运行我的.exe文件,则会显示错误,即在KERNEL32.DLL中找不到CompareStringEx function 。

因此,使用这个工具集似乎是不够的。 还需要别的东西。

在其他一些地方,我发现还需要在编译时添加定义/D_USING_V110_SDK71_并在链接时添加选项/SUBSYSTEM:CONSOLE,5.01 在我的项目属性中,我也尝试添加这两个选项,但CompareStringEx仍然在最终应用程序的导入表中。

正如@BenVoigt 所建议的那样,我确实定义了/DWINVER=0x0502 /D_WIN32_WINNT=0x0502 Also set C++ standard to /std:c++14 (I would set C++11 but this MSVS version allows to set only C++14 at minimum). 在我的代码中,C++11 的std::mutex可能使用了一些非 XP 符号,例如InitializeSRWLock等最终 EXE。

有谁知道编译完全与 XP 兼容的应用程序所需的一切?

TL;DR For Window XP VC++ REDIST support, install https://aka.ms/vs/15/release/VC_redist.x86.exe on your Windows XP system

-或者-

如果您正在执行“并行应用程序本地部署”,则使用C:\Program Files\Microsoft Visual Studio\2022\<edition>\VC\Redist\MSVC\14.16.27012\x86\Microsoft.VC141.CRT

For Windows XP targeting, you use the v141_xp Platform Toolset installed by Visual Studio (VS 2017, VS 2019, or VS 2022) which is the latest VS 2017 ( v141 ) C++ compiler using an included Windows 7.1A SDK.

如果您正在进行 DirectX 开发,请务必阅读这篇博文,了解使用 Windows 7.1A SDK 的各种含义。

要部署到 Windows XP,您可以安装最新的 VS 2017 Visual C++ REDIST 或使用 VS 2019 Visual ZF6F87C9FDCF8B3C3F07F93F1EE871916.7 至 VS。 之后,REDIST DLL 本身与 Windows XP 不兼容

在安装了 VS 2022 的开发系统上,您将拥有一组更新的 Visual C++ REDIST 文件,这些文件与您的v141_xp平台工具集构建的 EXE 二进制兼容,但这些 VC++ REDIST DLL 与 Windows XP兼容。

IOW:如果您查看dumpbin /imports的 14.30(v143 版本)、14.29(v142 最新版本)和/或 14.16( msvcp140.dll最新版本)副本的转储箱 /imports,您将看到不同的导入。 位于msvcp140.dll C:\windows\SysWOW64文件夹中的 msvcp140.dll 将是 14.30 版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM