c++ - 删除对 Windows SDK 版本的依赖

标签 c++ windows visual-studio mpir

我正在尝试编译 MPIR(GMP 的 Windows 友好版本)。我安装了 Visual Studio 2017,所以它应该可以工作,但我收到此错误消息:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.Cpp.WindowsSDK.targets(46,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [C:\mpir\msvc\vs17\lib_mpir_gc\lib_mpir_gc.vcxproj]

我特别需要达到它可以在任何机器上编译的程度,而不仅仅是这台机器,所以在这台机器上安装确切的 SDK 版本不会解决问题。我需要更改一些内容才能使用 Visual Studio 2017 进行构建。

正在寻找C:\mpir\msvc\vs17\lib_mpir_gc\lib_mpir_gc.vcxproj ,我找到了这一行:

<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

这看起来很有希望,但删除它没有任何效果;错误信息保持不变。

我可以更改什么来消除此错误?

总结一下我相信这应该是可能的原因:

如果您编写一个 C++ 程序,比如说在最简单的情况下,在一个名为 foo.cpp 的文件中,并使用命令行编译器编译它 cl foo.cpp它将自动编译并链接到当前 Visual Studio 安装使用的任何 SDK 版本以生成 foo.exe它将(除非你使用一些仅在更高版本的 Windows 中可用的非常专业的 API)在至少从 Vista 开始的任何 Windows 上运行。

完全一样cl.exe由 msbuild 调用。所以我不是在要求新功能。相反,生成上述错误消息是因为某些事情超出了它的方式 打破了默认的“正常工作”场景并将锁定添加到特定的 SDK 版本。我想问的是如何解除锁定并返回到默认情况,在默认情况下它只适用于 Visual Studio 随附的任何 SDK 版本。

最佳答案

如评论所述,这是不可避免的。

如果您使用 Windows 8.1 SDK 构建,您将获得在 Windows 8.1 或更高版本上运行的版本。如果您使用 Windows 10 SDK 进行构建,则可以将其功能限制为 Windows 8,或者您可以选择 Windows 10 构建(例如 1607)。当然,如果您选择一个新的 SDK 来使用新的 Windows 10 功能,您将无法在缺少该功能的 Windows 8.1 上运行它。

但是,如果您选择 Windows SDK,那么您将构建哪个 Windows 版本?哪个<windows.h>你会用吗?

[编辑] 至于可移植的 C++ 程序,它们显然不包括 <windows.h> ,并且它们不直接链接到 Windows API。相反,它们依赖于 Microsoft 的 C++ 标准库(又名 MSVCRT)实现

[编辑2] 我刚刚数过,我的 Visual Studio 2017 安装 (15.7.5) 有 12 个不同的 SDK 选项。的确,有些是针对 ARM 的,但这只是基本前提的变体:您选择的 SDK 会影响您可以运行生成的应用程序的机器。

关于c++ - 删除对 Windows SDK 版本的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55805532/

相关文章:

windows - 如何获取和打印环境变量的值?

visual-studio - ASP.NET MVC 查看代码格式 - 大括号 <% } %>

c++ - postgresql 在数据库服务器中消耗更多内存以进行长时间运行的连接

c++ - 在全局范围内调用 operator new

c++ - 无法在Windows 10上安装MinGW

windows - POVRY for windows : using the command line to render several pov files

c++ - 如何检索 C++ 类成员变量名?

visual-studio - 使用 NUnit,我需要使用 Visual Studio 中的哪种项目类型来创建我的测试项目?

c++ - 在排序列表中恰好找到 N 个连续的

c++ - 我怎样才能正确解析我的文件? (使用中断/继续)