Getting fatal error LNK1181: cannot open input file 'kernel32.lib'
I was a happy man until a few hours back when I was playing with some C, C++ programs built using Visual Studio 2008 on my work and home machines. I could write some program on my workstation, copy the solution to my personal laptop at home and thereby continue from where I left in office. Things were good until I installed the latest Windows SDK v6.1 on my Vista laptop while trying my hands on Windows PowerShell.
I realized a day or so later after installing SDK v6.1 that now I could not build my application written in C or C++. I could compile it but not link it during build process from within Visual Studio. Funny though I realized I could not even build a very basic Win32 console application.
I started getting the following error:
fatal error LNK1181: cannot open input file 'kernel32.lib'
I did something while troubleshooting it and now also started seeing:
Error spawning 'rc.exe'. Project myProject
I did check on the Internet and found all sorts of reasoning around this. One thing looked clear that installing the latest SDK v6.1 had caused me all these headaches. Some links suggested rebooting the server, some talked about low system memory, some said remove the latest SDK v6.1, and some also suggested to reinstall Visual Studio. But somehow I felt this can be fixed without reinstallation of VS2008 or un-installation of SDK v6.1 or etc etc and etc.
I opened the cool Process Monitor tool and found the following:
28836 11:51:31.5538847 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\VC\lib\kernel32.lib NAME NOT FOUND
28837 11:51:31.5539987 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\VC\lib\kernel32.lib NAME NOT FOUND
28839 11:51:31.5542065 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\kernel32.lib NAME NOT FOUND
28841 11:51:31.5543630 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\kernel32.lib NAME NOT FOUND
28842 11:51:31.5544705 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\i386\kernel32.lib PATH NOT FOUND
28844 11:51:31.5545935 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\i386\kernel32.lib PATH NOT FOUND
28846 11:51:31.5547253 devenv.exe 5528 QueryOpen D:\Program Files\Microsoft SDKs\Windows\v6.1\lib\kernel32.lib PATH NOT FOUND
28847 11:51:31.5548633 devenv.exe 5528 QueryOpen D:\Program Files\Microsoft SDKs\Windows\v6.1\lib\kernel32.lib PATH NOT FOUND
28848 11:51:31.5550927 devenv.exe 5528 QueryOpen D:\Program Files\Microsoft SDKs\Windows\v6.1\lib\kernel32.lib PATH NOT FOUND
28849 11:51:31.5552863 devenv.exe 5528 QueryOpen D:\Program Files\Microsoft SDKs\Windows\v6.1\lib\kernel32.lib PATH NOT FOUND
28850 11:51:31.5556190 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\kernel32.lib NAME NOT FOUND
28851 11:51:31.5559045 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\kernel32.lib NAME NOT FOUND
28852 11:51:31.5561361 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\lib\kernel32.lib PATH NOT FOUND
28853 11:51:31.5563280 devenv.exe 5528 QueryOpen E:\Program Files\Microsoft Visual Studio 9.0\lib\kernel32.lib PATH NOT FOUND
It was crystal clear that while trying to link Visual Studio was encountering a file not found kind of error and hence could be the resulting failure.
------ Build started: Project: aa, Configuration: Debug Win32 ------
Linking...
LINK : fatal error LNK1104: cannot open file 'kernel32.lib'
Build log was saved at "file://xxxxxxxxxxx\Visual Studio 2008\Projects\myProject\myProject\Debug\BuildLog.htm"
myProject - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Similarly rc.exe showed NOT FOUND.
It looked simple yet intriguing as to why the default path was changed for Visual Studio.
I realized that the path it was trying to look at for these files did not even exist, lest I could just have copied these files to the corresponding location.
Looked at the Environment variables from Visual Studio 2008 command prompt and found that WindowsSdkDir environment variable was pointing to D:\Program Files\Microsoft SDKs\Windows\v6.1\ which did not exist.
Tried changing this to the path where I did find the above files on my box which was pointing to C:\program files\microsoft sdks\windows\v6.0A\ (So yes it pretty much looked like after installing SDK v6.1 my environment variable WindowsSdkDir had changed). Tried logging off/rebooting, no luck.
Finally figured out that in order to get things back to normal I had to update the following registry key:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\MicrosoftSDKs\Windows\CurrentInstallFolder
I changed this value to point to the original location which was C:\Program Files\Microsoft SDKs\Windows\v6.0A\ in my case.
I wasted a lot of time on this, so thought of sharing with a wider audience.
bye!
Comments
Anonymous
January 29, 2009
PingBack from http://www.clickandsolve.com/?p=2173Anonymous
February 20, 2009
Thanks! Don't forget to restart VS 2008 if you have it open. Saved me a lot of time.Anonymous
May 19, 2009
I got this after installing SP1 for VS2008. And ... I don't have the HKEY_CURRENT_USERSOFTWAREMicrosoftMicrosoftSDKs key in my registry :( But my symptoms are just like yours. Any ideas? Thanks!Anonymous
May 19, 2009
Daniel, I would suggest running the Process Monitor tool and see where VS is looking for the missing files. This path must be getting governed by some Env variable or Registry key. That is what I can suggest for now.Anonymous
May 19, 2009
Thanks. I installed Windows SDK for Windows Server 2008 ... and that corrected it. Thanks for your great post!Anonymous
November 23, 2009
Thanks very much for the trouble of typing out the problem...i am about to correct my problem too...great post ^^Anonymous
December 13, 2009
The comment has been removedAnonymous
March 02, 2010
Thank you for your time! I had the same problem and I resolve it in 5 minutes.Anonymous
June 13, 2010
Thank you so much, Great post, saves a lot of time. this happened for me when I installed WSDK v7.0Anonymous
August 21, 2010
sorry i didnt understand how to solve it by command prompt & i didnt find that path in registry...would u explain me more??pleaaase...Anonymous
August 26, 2010
Thanks guys, installed MicrosoftSDK and it worked ...Anonymous
October 18, 2010
Thanks. BTW, it's HKEY_LOCAL_MACHINE, not HKEY_CURRENT_USER.Anonymous
October 25, 2010
Thank you very much. Installed MS SDK for windows 7 and it solved my issue.. www.microsoft.com/.../details.aspxAnonymous
February 15, 2011
THANK YOU! I spent all day trying to figure this out! That was an utterly obnoxious error. I thought my install was corrupt or maybe I messed up my settings when I was playing with Allegro and Ogre. I tried reinstalling (takes forever) and updating the libraries... and still it wasnt fixed... This worked flawlessly. Now I can finally sleep o___o Thank you. "LINK : fatal error LNK1104: cannot open file 'kernel32.lib'" So this gets more hits, because others like me with this error will probably do the same thing I did XD Copy paste it into google and look around frantically.Anonymous
March 13, 2012
Muito obrigado, tive o mesmo problema e foi resolvido facilmente graças a sua ajuda. ObrigadoAnonymous
August 28, 2013
Wored for except that my SDK path was in HKEY_LOCAL_MACHINE, not in HKEY_CURRENT_USERAnonymous
March 11, 2014
Thank you buddy for sharing, You have saved me a big deal of time.Anonymous
April 07, 2016
Thanks.