致命错误 LNK1104:无法打开文件 'kernel32.lib'。

32
自从我在Visual C++ 2010 Express编译器上安装了.NET Framework SDK进行64位编程以来,我一直遇到这个错误。由于我遇到的这个单一错误,我根本无法编译任何简单的程序。我的平台是x86。如果有帮助,这里是一个快照:

enter image description here

我不知道还有什么可以说的了。我昨天刚下载了这个编译器,一切正常。我想从32位编程升级到64位,以便可以使用汇编语言,所以我下载了这个SDK。我在Google上搜索,甚至在Stackoverflow上搜索。Google没有太多帮助,但我在这里找到了一个相似的帖子,但答案并没有解决我的问题。是否有人知道为什么会出现这个错误,以及如何摆脱它?


2
我建议你尝试以下步骤:首先搜索你的Program Files目录,查看kernel32.lib的安装位置,然后检查项目VC++ Directories属性页中列出的Library Directories,并验证路径是否正确。 - Michael Liu
这是由于我在VS2017安装中安装了多个SDK版本,导致路径混乱所引起的。我使用VS2017安装程序删除了所有Win10 SDK和工具集(140和141),更新了我的安装程序,然后通过VS2017安装程序重新安装它们。之后,问题得到解决。 - kayleeFrye_onDeck
13个回答

19

请检查VC++目录,在VS 2010中,这些可以在您的项目属性中找到。检查目录列表中是否包括$(WindowsSdkDir)\lib,如果没有,则手动添加它。如果您正在构建X64平台,请从“平台”ComboBox中选择X64,并确保$(WindowsSdkDir)\lib\x64包含在目录列表中。


1
有很多目录,我该将它添加到哪个目录中呢?例如,有可执行目录、包含目录等等。这里是屏幕截图 - David G
3
你需要检查变量是否存在。从vc++目录窗口,点击任何一个值框,你会注意到一个下拉箭头,点击它并选择编辑。在弹出的新对话框中,展开宏,看看$(WindowsSdkDir)是否存在,并确保它所指向的路径是有效的。如果不存在,你可以简单地用sdk的完整路径替换我的答案中提到的$(WindowsSdkDir)。 - Zaid Amir
图书馆已经有了,但是我只需要在可执行文件中添加 \bin\x64 吗?我在哪里添加它? - David G
这是因为您没有链接到x64库。 - Zaid Amir
除非有一种方法可以在创建所有未来项目时修复此问题,而不必每次都这样做,否则这个答案更像是一个hack而不是一个答案。 - kayleeFrye_onDeck
显示剩余11条评论

19

在项目属性->配置属性->常规中,将平台工具集更改为:"Windows7.1SDK"


4
这对我来说立即就奏效了。经过一段时间,我安装了一些工具,当我回到VC ++项目时,它无法编译(缺少头文件)等等。我开始手动编写包含路径,那样可以运作,然后我遇到了链接错误,之后尝试了这个解决方案,正如我所说,它只是奏效了!! 非常感谢。 - Edward

6

请确保在VC++目录中设置了以下内容(右键单击项目,点击属性页面):

  • 包含目录: $(IncludePath)
  • 库目录: $(LibraryPath)

5

仅适用于命令行(即Makefile)用户:

  1. 当您安装VC++ Express时,它只支持32位。因此,文件会被放置在 C:\Program Files (x86)
  2. 然后,您决定升级到64位能力。因此,您安装了SDK。但它是64位可用的。所以,文件会被放置在 C:\Program Files

您(和我一样)可能已经通过以下方式对您的makefile进行了#1的调整:

MS_SDK_BASE_DOS := C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A
ENV_SET         := LIB="$(MS_SDK_BASE_DOS)\Lib\x64"

但是现在,你需要将调优更改为上面提到的#2,像这样:
MS_SDK_BASE_DOS := C:\Program Files\Microsoft SDKs\Windows\v7.1

不要错过“v7.0A”到“v7.1”的变化。

3
在项目 -> 属性 -> 配置属性 -> VC++目录 -> 库目录 中添加WindowsSdks的库路径。
我添加了以下路径,错误消失了:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;
我的操作系统为Win-7,64位,使用VS 2013和.NET Framework 4.5。

2
我在Windows 10上使用Visual Studio 2017时遇到了不同的问题,但出现了相同的影响。我认为我的问题归结于VS安装在非“C:\"驱动器上。我通过重新安装Windows 10 SDK来解决问题。
首先,我必须卸载Windows SDK(有两个版本已安装)。然后运行可执行文件。安装完成后,运行Visual Studio,一切正常。

2

我遇到了一个类似的错误,当我检查项目属性中的"连接器->输入->附加依赖项"列表时,问题消失了。我发现在"%(AdditionalDependencies)"前面缺少了分号";"。我还发现在列表中有相同的条目出现了两次。你应该分别为调试和发布编辑这个列表。


请为我点赞,提醒我在从调试切换到发布或从Win32切换到x64时设置会发生变化。唉,我正在处理的这个项目有很多先决条件需要设置,而我犯了一个愚蠢的错误,在调整所有值之前忘记切换到正确的配置。 - kayleeFrye_onDeck

1
我刚刚自己解决了这个问题。我的问题有点不同。我在Windows 10上使用Visual Studio。当我创建项目时,"目标平台版本"自动设置为"10.0.15063.0"。但是该SDK版本没有"kernel32.lib",也没有其他必要的头文件和库文件。所以我将"目标平台版本"修改为"8.1"。然后就可以了。
环境: - Windows 10 - Visual Studio 2015 - Visual C++
解决方案: 1. 打开项目的“属性页”; 2. 导航到“常规”页面; 3. 修改“目标平台版本”为所需的目标平台(例如“8.1”)。

0
在Visual Studio 2017中,我进入了“项目属性”->“配置属性”->“常规”,选择了“所有平台”(1),然后选择了“Windows SDK版本”下拉菜单(2),并将其从“10.0.14393.0”更新到已安装的版本(3)。对于我来说,这是“10.0.15063.0”。

enter image description here

附加细节:在我的情况下,这个操作纠正了错误,因为 Windows SDK 版本 可以帮助 VS 选择正确的路径。 VC++ 目录 -> 库目录 ->编辑 -> -> 显示宏 $(WindowsSDK_LibraryPath_x86) 具有上面选择的版本号的路径。


0
如果上面的解决方案不起作用,检查一下在“属性-〉VC++目录-〉库目录”中是否有 $(LibraryPath)。如果缺少它,请尝试添加它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接