今天在 Visual Studio 2017 中,我遇到了同样的问题。
就我而言,原因是 NETFXSDKDir ( NETFXSDKDir=C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1
) 中的环境设置不佳。它需要改为NETFXSDKDir=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x86
。具体来说,在这个批处理文件(我的目录实际上有 4 个不同的文件)中为 VS2017 的命令提示符设置:
%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
因为我不愿意更改其中一个“已安装”批处理文件……甚至更多,因为该批处理文件又调用了另一个:
@call "%~dp0vcvarsall.bat" x86 %*
...而不是对于我特定的 C++ 命令行应用程序,我只是添加了显式路径文本:;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x86
对于“库目录”中的总字符串,如下所示:$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x86
. (右键单击项目,属性→配置属性→VC++目录→库目录。)这解决了我的“致命错误LNK1104:无法打开文件'kernel32.lib'”错误。我在这个 GitHub 问题中找到了这个提示。
请注意,这在 Visual Studio 2017 Enterprise 2017 版本 15.1 (26403.0) 中是可重现的,即使在成功“修复”安装之后……在创建新的 Visual C++ Win32 控制台应用程序并尝试编译时。
事实上,除非创建了一个空白应用程序,否则默认模板还包括对<SDKDDKVer.h>
我得到这个附加错误的引用:Error (active) E1696 cannot open source file "SDKDDKVer.h"
. 所以我创建了一个空的 C++ 项目。