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

时间:2013-02-24 15:37:15

标签: visual-studio-2010 visual-c++ libraries

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

enter image description here

我不知道还有什么可说的。我昨天刚下载了这个编译器,它运行正常。我想从32位编程升级到64位,所以我可以使用Assembly,所以我下载了这个SDK。我在谷歌搜索,甚至在Stackoverflow上搜索。谷歌没有多大帮助,但是我找到了一篇与我的相似的帖子here,但答案并没有太多正义。有谁知道为什么会出现这个错误以及如何摆脱它?

14 个答案:

答案 0 :(得分:18)

将平台工具集更改为:项目属性下的“Windows7.1SDK” - >配置属性 - >一般

答案 1 :(得分:17)

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

答案 2 :(得分:5)

确保您拥有VC ++目录(右键单击项目,单击属性页),

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

答案 3 :(得分:5)

仅限命令行(即 - makefile)用户:

  1. 安装VC ++ Express时,它仅为32位。因此,事情进入 C:\ Program Files (x86)
  2. 然后,您决定升级到64位功能。因此,您安装SDK。但它具有64位能力。因此,事情进入 C:\ Program Files
  3. 你(像我一样)可能会将你的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”的变化。)

答案 4 :(得分:3)

在项目中添加WindowsSdks的lib路径 - >属性 - >配置属性 - > VC ++目录 - > 图书馆目录

我添加了以下路径并且错误变为::

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Lib;

我的系统是 Win-7,64位,VS 2013,.net framework 4.5

答案 5 :(得分:2)

我遇到了类似的错误,当我检查项目属性中的“链接器 - >输入 - >附加依赖关系”列表时,问题就停止了。我错过了一个半冒号“;”就在“%(AdditionalDependencies)”之前。 我也有两次相同的条目。您应该分别编辑此列表以进行调试和发布。

答案 6 :(得分:1)

我在使用Visual Studio 2017的Windows 10上遇到了不同的问题,但效果相同。我认为我的问题归结为VS被安装到“C:\”以外的驱动器上。我通过重新安装Windows 10 SDK

解决了这个问题

首先我必须卸载Windows SDK(安装了两个版本)。然后运行可执行文件。一旦安装,运行visual studio,它工作正常。

答案 7 :(得分:0)

enter image description here

gero的解决方案对我有用。
在Visual Studios 2012中,请执行以下步骤   - 转到解决方案资源管理器
  - 右键单击​​您的项目
  - 转到属性
  - 配置属性 - >一般
  - 平台工具集 - > 更改为Windows7.1SDK

答案 8 :(得分:0)

如果上述解决方案无效,请检查您是否在“属性 - > VC ++目录 - >图书馆目录”中有 $(LibraryPath)。如果您错过了它,请尝试添加它。

答案 9 :(得分:0)

操作系统:Win10,Visual Studio 2015

解决方案: 转到控制面板--->卸载程序--- MSvisual studio ---->改变---->组织=修复

并修复它。 请注意,您必须连接到互联网才能修复完毕。

祝你好运。

答案 10 :(得分:0)

今天在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。具体来说,对于VS2017的命令提示符,此批处理文件中设置(我的目录实际上有4个不同的文件):

%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'”错误。我在this GitHub issue中找到了提示。

注意,即使在成功进行“修复”安装...创建新的Visual C ++ Win32控制台应用程序并尝试编译之后,这在Visual Studio 2017 Enterprise 2017版本15.1(26403.0)中也是可重现的。

实际上,除非创建了空白的应用程序,否则默认模板还会包含对<SDKDDKVer.h>的引用,并且我会收到此额外错误:Error (active) E1696 cannot open source file "SDKDDKVer.h"。所以我created an empty C++ project

答案 11 :(得分:0)

Visual Studio 2017 中,我转到项目属性 - &gt; 配置属性 - &gt; 常规,已选择所有平台 (1),然后选择 Windows SDK下的(2)下拉列表版本,并从 10.0.14393.0 更新为已安装(3)的版本。对我来说,那是 10.0.15063.0。

enter image description here

其他详细信息: 这更正了我的错误,因为 Windows SDK版本有助于VS选择正确的路径。 VC ++目录 - &gt;图书馆目录 - &gt; 修改 - &gt; - &gt;显示宏 $(WindowsSDK_LibraryPath_x86)的路径上面选择了版本号。

答案 12 :(得分:0)

我刚刚遇到并自己解决了这个问题。我的问题有点不同。我在Windows 10上使用Visual Studio。创建项目时,Target Platform Version被自动设置为10.0.15063.0。但是此版本的SDK没有kernel32.lib,其他必需的头文件和lib文件也没有。因此,我将Target Platform Version修改为8.1。而且有效。

环境

  • Windows 10
  • Visual Studio 2015
  • Visual C ++

解决方案

  1. 打开项目的Property Page;
  2. 导航到General页;
  3. Target Platform Version修改为所需的目标平台(例如8.1)。

答案 13 :(得分:0)

来自 SunsetQuest 的帖子帮助我指出了一个简单的错误。我正在用 VS2019 编译 OpenCV 4.5.1。我未能在属性页上正确设置 Platform: x64。之后,我必须添加 msvcprtd.lib、ucrtd.lib 的路径和 x64\kernel.lib 的路径。谢谢