我在C++构建中得到了一条臭名昭著的错误消息:“无法打开包含文件:'ctype.h'”。我知道已经多次问过类似的问题,但我的情况似乎不同,因为我使用的是最新的Visual 2022,而且行为似乎不同。
我有许多现有的C++项目,它们在DirectX 6中使用普通的32位Windows,我使用VC++ build tools 2015和WindowsSDK8.1编译它,没有在以前版本的Visual中出现任何问题。在VisualStudio2019中一切都很好,在我卸载并安装Visual 2022之前,不需要特殊的设置。
现在我可以打开我的解决方案了,它很好地显示了它们正在使用C++ build tools 2015,这是我和VS2022一起安装的,并且解决方案还正确地显示了它们使用Windows8.1SDK。但是Windows8.1SDK并不存在于VS2022安装中,而是单独安装的。我还试图“修复”VS2022安装,但这只删除了我的所有UI首选项,但没有修复任何在构建中的内容。另外,我试图重新安装Windows8.1SDK,但它说已经可以了。

在查看Visual时,我看不到设置默认包含目录和库目录的任何地方,只能列出现在正在使用的目录。VS2022显示了以下列表:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include
C:\Program Files\Windows Kits\10\Include\10.0.10240.0\ucrt
C:\Program Files (x86)\Windows Kits\8.1\Include\um
C:\Program Files (x86)\Windows Kits\8.1\Include\shared
C:\Program Files (x86)\Windows Kits\8.1\Include\winrt我收到的实际错误消息如下:
c:\program files (x86)\windows kits\8.1\include\um\winnt.h(31): fatal error C1083: Cannot open include file: 'ctype.h': No such file or directory所以它说,WindowsKids8.1中的winnt.h找不到ctype.h。是的,在那个文件夹或任何地方都没有ctype.h,我只能在C:\Program Files\Microsoft Visual Studio\2022\Professional\SDK\ScopeCppSDK\vc15\SDK\include\ucrt中看到它,我认为它是带有VC++ 2015构建工具的文件夹。因此,这似乎是正确的,但我想知道为什么当VC++ 2015构建工具设置在项目设置中时,这个文件夹不是默认包含目录的一部分。因为VS2022似乎正确地选择了我的Windows8.1SDK,但没有正确地选择旧的C++编译器。
当我试图添加ctype.h所在的文件夹以包含文件夹时,我会收到另一种类型的错误,即其他文件与这些包含的文件不兼容。当然,这个目录系统需要同步。那么,请问使用这个的正确方法是什么呢?
此外,我试图将VC++构建工具切换到2022年版本。不幸的是,这也不能解决这个问题。而且Windows 10 SDK没有安装,该软件希望与旧的Windows兼容,所以我不需要它。
发布于 2022-02-08 16:13:58
我发现了一个相关的bug报告:https://developercommunity.visualstudio.com/t/windows-81-sdk-1/151682
虽然微软员工拒绝接受它是一个错误,但它也发生在我身上。当我只安装Windows8.1SDK时,无法用它编译任何项目。我甚至尝试在VS2022中创建一个新的Windows项目,这个项目是创建的,但是编译失败了。
因此,我尝试安装Windows10SDK(从安装了VS2022,但这可能并不重要),这增加了一些缺失的文件,现在帮助编译Windows8.1SDK项目。问题似乎已经解决了,我以前的C++代码现在可以用Windows8.1SDK和C++构建工具2015和2022年编译。
https://stackoverflow.com/questions/71035431
复制相似问题