我在 C 構建中收到了臭名昭著的錯誤訊息:“無法打開包含檔案:'ctype.h'”。我知道類似的問題已經被問過多次,但我的情況似乎有所不同,因為我使用的是最新的 Visual Studio 2022,而且行為似乎有所不同。
我有一堆現有的 C 專案,它們使用帶有 DirectX 6 的普通 32 位 Windows API,我使用 VC 構建工具 2015 和 Windows SDK 8.1 來編譯它,在以前版本的 Visual Studio 中沒有任何問題。在 Visual Studio 2019 中一切都很好,不需要特殊設定,直到我卸載它并安裝了 Visual Studio 2022。
現在我可以打開我的解決方案,它很好地顯示他們正在使用我與 VS2022 一起安裝的 C 構建工具 2015,并且解決方案還正確顯示他們使用 Windows 8.1 SDK。但是 VS2022 安裝中沒有 Windows 8.1 SDK,我是單獨安裝的。我還嘗試“修復”VS2022 安裝,但這只會洗掉我所有的 UI 首選項,但沒有修復構建中的任何內容。另外,我嘗試重新安裝 Windows 8.1 SDK,但它說它已經可以了。

在查看 Visual Studio 時,我看不到任何可以設定默認包含和 lib 目錄的地方,我只能列出現在正在使用的內容。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
所以它說winnt.h從 windows kits 8.1 找不到ctype.h. 是的,ctype.h該檔案夾或周圍的任何地方都沒有,我只能看到它C:\Program Files\Microsoft Visual Studio\2022\Professional\SDK\ScopeCppSDK\vc15\SDK\include\ucrt
,我認為它是帶有 VC 2015 構建工具的檔案夾。所以這似乎是正確的,但我想知道為什么在專案設定中設定 VC 2015 構建工具時,這個檔案夾不是默認包含目錄的一部分。因為似乎 VS2022 正確選擇了我的 Windows 8.1 SDK,但沒有正確選擇舊的 C 編譯器。
當我嘗試將 ctype.h 所在的檔案夾添加到包含檔案夾時,我收到另一種型別的錯誤,指出其他檔案與這些包含檔案不兼容。當然,這個目錄系統需要同步。那么請問正確的使用方法是什么?
另外,我嘗試將 VC 構建工具切換到 2022 版本。不幸的是,這也不能解決問題。并且沒有安裝 Windows 10 SDK,該軟體希望與舊 Windows 保持兼容,所以我不需要它。
uj5u.com熱心網友回復:
我發現了一個相關的錯誤報告:https ://developercommunity.visualstudio.com/t/windows-81-sdk-1/151682
盡管微軟員工拒絕接受它是一個錯誤,但它也發生在我身上。當我只安裝 Windows 8.1 SDK 時,不能用它編譯任何專案。我什至嘗試在 VS2022 中創建一個新的 Windows API 專案,該專案已創建,但提交編譯時出現相同的錯誤。
所以我嘗試安裝 Windows 10 SDK(從安裝的 VS2022,但這可能并不重要),這添加了一些現在有助于編譯 Windows 8.1 SDK 專案的缺失檔案。問題似乎解決了,我的舊 C 現在可以使用 Windows 8.1 SDK 和 C 構建工具 2015 和 2022 進行編譯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/428292.html
