2013-02-24 1129 views
29

自從我在Visual C++ 2010 Express編譯器上安裝用於64位編程的.NET Framework SDK後,我一直收到此錯誤。由於我遇到了這個單一的錯誤,我甚至無法編譯一個簡單的程序。我的平臺是x86。這裏是一個快照,如果有幫助:致命錯誤LNK1104:無法打開文件'kernel32.lib'

enter image description here

我不知道該說些什麼。我昨天剛剛下載了這個編譯器,它工作正常。我想從32位編程升級到64位,所以我可以使用Assembly,所以我下載了這個SDK。我搜索谷歌,甚至在這裏Stackoverflow。谷歌沒有多大幫助,但我發現了一個似乎與我的類似的帖子here,但答案沒有多大的公正。有誰知道爲什麼這個錯誤正在發生,我怎麼能擺脫它?

+2

我試試這個:首先搜索你的Program Files目錄,看看kernel32.lib的安裝位置,然後檢查項目的VC++目錄屬性頁面列出的庫目錄,並驗證路徑是否正確。 – 2013-02-24 15:49:44

+0

這是由於我的VS2017安裝的多個SDK安裝之間的路徑混淆引發的。我使用VS2017安裝程序刪除所有Win10 SDK和工具集(140和141),更新了我的安裝,然後通過VS2017安裝程序重新安裝它們。之後,問題解決了。 – 2017-05-18 01:05:17

回答

16

檢查VC++目錄,在VS 2010中可以在您的項目屬性中找到這些目錄。檢查目錄列表中是否包含$(WindowsSdkDir)\lib,如果沒有,手動添加它。如果您正在構建X64平臺,則應從「平臺」組合框中選擇X64,並確保$(WindowsSdkDir)\lib\x64包含在目錄列表中。

+0

有很多目錄。我如何知道將其添加到哪一個?例如,有可執行目錄,包含目錄等。[這是一個截圖](http://gyazo.com/2ee0b79d39dcbfde56d6417a4fc9260b)。 – 0x499602D2 2013-02-24 16:03:37

+0

您可能需要修改所有這些。 sdk的Bin目錄進入可執行目錄屬性,lib目錄進入庫等 – 2013-02-24 16:08:45

+2

我添加了它們,我仍然收到相同的錯誤。 – 0x499602D2 2013-02-24 16:14:54

5

請確保您有在VC++目錄(右鍵項目,點擊屬性頁),

  • 包含目錄:$(INCLUDEPATH)
  • 列表項目庫目錄:$(LibraryPath)
2

我得到了類似的錯誤,當我在項目屬性中檢查了我的「鏈接器 - >輸入 - >附加依賴項」列表時,問題停止了。我錯過了一個分號「;」就在「%(AdditionalDependencies)」之前。 我也有兩次相同的條目。您應該單獨編輯調試和發佈此列表。

+0

+投票提醒我,從調試切換到發佈或從Win32切換到x64時,設置會發生變化。 Bah,這個項目我正在處理很多前置請求,然後我可以做任何事情,並且在調整所有值之前,我犯了一個笨蛋錯誤,並忘記切換到正確的配置... – 2015-02-10 01:12:03

5

對於命令行(即 - 生成文件)只有用戶:

  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」 的變化,也是如此。)

18

改變平臺工具集:在 「Windows7.1SDK」項目屬性 - > conf iguration屬性 - >常規

+4

這個工作瞬間完成我。我(隨着時間的推移)安裝了一些工具,當我回到我的VC++項目,它不會編譯(缺少標題)等。我開始手代碼包括路徑,工作,然後我打鏈接錯誤,然後我試過這個解決方案,正如我所說的,它只是工作!非常感謝。 – Edward 2014-08-11 22:39:34

+2

這爲什麼有效?它有什麼作用? – Sqeaky 2016-02-12 18:14:49

0

enter image description here

格羅的解決方案爲我工作。
在Visual Studios 2012中,請執行以下步驟。
- 轉到解決方案資源管理
- 右鍵點擊你的項目
- 轉到屬性
- 配置屬性 - >常規
- 平臺工具集 - >變化Windows7.1SDK

0

如果以上解決方案不起作用,請檢查您是否在屬性 - > VC++目錄 - >庫目錄中有$(LibraryPath)。如果你錯過了,嘗試添加它。

2

在項目 - >屬性 - >配置屬性 - > VC++目錄 - >庫目錄中添加WindowsSdks的lib路徑。

我添加以下路徑和錯誤去::

C:\ Program Files文件(x86)的\微軟的SDK \的Windows \ v7.1A \ Lib文件;

我的系統是的Win-7位,64位,VS 2013的.NET Framework 4.5

0

操作系統:Win10,Visual Studio的2015

解決方案: 進入控制面板 - >卸載程序--- MSvisual studio ---->更改---->整理=修復

並修復它。 請注意,您必須連接到互聯網,直到修復完成。

祝你好運。

1

我在使用Visual Studio 2017的Windows 10上遇到了不同的問題,但效果相同。我認爲我的問題歸結爲VS被安裝到「C:\」以外的驅動器上。我通過重新安裝Windows 10 SDK

解決了這個問題首先,我必須卸載Windows SDK(安裝了兩個版本)。然後運行可執行文件。一旦安裝,運行visual studio,它工作正常。

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。具體而言,如在此批處理文件(我目錄實際上有4個不同的文件)設置的命令提示符下VS2017:

%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat" 

,因爲我不願意改變「爲安裝」的批處理文件&hellip之一;更因爲該批處理文件調用另一個又一:

@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 Studio 2017企業版2017版本15.1(26403.0)中也是可重現的…當創建一個新的Visual C++ Win32控制檯應用程序並嘗試編譯時。

實際上,除非創建了空白應用程序,否則默認模板還包含對<SDKDDKVer.h>的引用,並且由於我得到此附加錯誤:Error (active) E1696 cannot open source file "SDKDDKVer.h"。所以我created an empty C++ project

0

的Visual Studio 2017年,我去項目屬性 - >配置屬性 - >一般,選擇所有平臺(1),然後選擇下拉(2)Windows SDK版本和從10.0.14393.0更新到一個已安裝(3)。對我而言,那是10.0.15063.0。

enter image description here

其他細節:此糾正錯誤,在我的情況,因爲的Windows SDK版本幫助VS選擇正確的路徑。 VC++目錄 - >庫的目錄 - >編輯 - > - >示出了宏$(WindowsSDK_LibraryPath_x86)與上面選擇的版本號的路徑。

相關問題