Visual Studio 2010 Express + Win SDK = 无法打开输入文件'kernel32.lib'

20
我曾使用VS2008 express和win SDK编译x64。最近重建了我的机器(升级到了64位的Windows 7)并安装了最新的Express。按照相同的步骤允许x64目标,但是我的源码不再链接。无论我做什么,我总是得到这个错误消息:

“LINK: 致命错误 LNK1181: 无法打开输入文件 'kernel32.lib' ”

有趣的是,32位编译运行良好。

这是一种已知的问题吗?谷歌没有给我提供任何解决方法,只是提到了几次同样的问题。

在Win 7 SDK上使用VS 2010来定位64位是否可行?

谢谢

Pawel
5个回答

27

最终解决方案非常简单。诀窍是指向VS在我这种情况下不正确的win SDK。 项目属性 -> VC++目录 -> 库目录应该指向C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64


4
你现在是我最喜欢的人。 :-) - kmort

12

我发现的另一件非常简单的事情,是去项目属性->常规中设置平台工具集为Windows7.1SDK。不知道为什么这样做可以起作用...


我在“常规”下没有看到“平台工具集”,我只看到“输出目录”、“中间目录”、“配置类型”、“公共语言运行时支持”和“生成日志文件”。不过,Pawel的答案对我有效。 - davidA
当我从VS 2013社区版升级到2017社区版时,这个答案对我有用。 - Hugo Rune

2
我曾遇到同样的问题,这里的答案对我有所帮助,但我还需要做更多的事情。
我的Windows SDK安装文件已经损坏,所以我缺少了所有放在C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\(其中x64文件夹内的文件是正常的)目录下的.lib文件。因此,我按照这里所说的重新安装了Windows SDK。然后,我就可以在VS2010和VS2013中将平台工具集设置为Windows7.1SDK。
这样做是因为平台工具集会改变Visual Studio中的$(WindowsSdkDir)路径(这些路径保存在系统注册表中),如果找不到Kernel32.lib,则路径会出现错误。

1
感谢@Matthieu的编辑。我尝试过另一种方法,就是安装VS2010 Express,这样我就可以将平台工具集设置为VS100而不是Windows7.1SDK - 这对我也起作用。我这样做是因为我的团队中其他人都在使用这个设置,我们想避免以后出现冲突。 - Eric Omine

1
如果以上解决方案都不起作用,请停下来进行一次检查。我曾经因为使用错误的-G配置字符串而遇到了这个误导性的错误。
首先,从VS命令提示符中运行,而不是常规命令提示符。您可以在“开始菜单 -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015”中找到它。
这将设置所有正确的VS工具路径等。
现在看看cmake有哪些生成器... cmake -help 以下是此平台上可用的生成器: Visual Studio 15 [arch] = 生成Visual Studio 15项目文件。 可选[arch]可以是“Win64”或“ARM”。 Visual Studio 14 2015 [arch] = 生成Visual Studio 2015项目文件。 可选[arch]可以是“Win64”或“ARM”。 Visual Studio 12 2013 [arch] = 生成Visual Studio 2013项目文件。 可选[arch]可以是“Win64”或“ARM”。 Visual Studio 11 2012 [arch] = 生成Visual Studio 2012项目文件。 可选[arch]可以是“Win64”或“ARM”。 Visual Studio 10 2010 [arch] = 生成Visual Studio 2010项目文件。 可选[arch]可以是“Win64”或“IA64”。
然后选择适当的字符串添加的arch。
创建_build目录 cd _build 运行cmake .. -G "Visual Studio 15 Win64" 在子目录中运行cmake使得清理更容易,因为您可以只删除该目录中的所有内容。

我升级到了Visual Studio 15,但没有注意到我想要生成2012版。


0

顺便说一下,当整个v8.1 SDK安装(文件+注册表键)消失时,我在使用Visual Studio 2013时遇到了同样的问题,这可能是由于安装Emborlandero RAD Studio引起的。

设置WindowsSdkDir环境变量没有效果,因为Studio本身(devenv.exe,通过Process Explorer检查环境)和从vcvarsall.bat调用的批处理文件实际上擦除了该变量,因为它们找不到v8.1 SDK。

Visual Studio不允许以机器特定的目录以机器范围的方式进行配置(将这种机器依赖性放入每个项目文件中的建议是荒谬的),而且在及时的情况下重新安装v8.1 SDK是不可能的。暂时解决Studio工作的快速方法是在InstallationFolder下添加字符串值。

Software/Microsoft/Microsoft SDKs/Windows/v8.1/

与其v8.0版本相同的内容。这是在HKLM/Wow6432Node下的,但普通的HKLMHKCU也应该可以工作。

这立即使Studio重新工作,甚至不需要重新启动。


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