2017-01-02 65 views
0

使用MSVC 2015年版14.0.25431.01更新3WaitOnAddress懸而未決

.cpp文件有#include <windows.h>

了VC++包括在項目屬性路徑是$(VC_IncludePath);$(WindowsSDK_IncludePath);。這是默認安裝,並沒有被篡改。

程序使用幾個WINAPI功能和沒有錯誤, 編譯,但如果我重建計劃(ReleasUnicode/Win32的),我收到一個鏈接錯誤:

LNK2019 unresolved external symbol [email protected]

所有其他WinAPI的功能得到解決。

經過幾小時的追蹤和錯誤,我發現手動將文件C:\ Program Files(x86)\ Windows Kits \ 10 \ Lib \ 10.0.14393.0 \ um \ x86 \ synchronization.lib添加到項目中可以解決此問題錯誤。另一方面,將其路徑C:\Program Files (x86)\Windows Kits\10\Lib\10.0.14393.0\um\x86添加到VC++包含目錄中並不能解決錯誤。

爲什麼會發生此錯誤?我想我已經正確地包含了庫路徑和頭文件,並且所有其他的WinAPI調用都能正常工作。

+0

什麼是Windows版本? –

+0

Windows 10企業評估版本10.0.14393 – jamacoe

回答

2

documentation說,你必須鏈接到synchronization.lib(見要求部分)。

正常情況下,您只需將synchronization.lib添加到要鏈接到的庫的列表中,即Project Properties-> Linker-> Input-> Additional Dependencies

大多數WINAPI功能都可以通過KERNEL32.LIB,USER32.LIB和默認連接其他圖書館,但這些API需要你顯式地鏈接到synchronization.lib

注意,這是不同的從包含在源代碼中的頭文件,頭文件包含聲明,而.lib文件包含您鏈接到應用程序的實現,或者.lib文件指向應用程序在運行時加載的.dll文件。

+0

從這個特定的MSDN頁面我得到了對synchronization.lib的提示,但我不明白它說明我將明確地鏈接到它。它不同於其他WinAPI調用在鏈接時的行爲對我來說是不可預測的。 – jamacoe

+0

該文檔沒有明確說明你需要做的每一件事情,它只是聲明你必須:包括Windows.h(或SyncAPI.h),並鏈接到synchronization.lib - 從這你需要和期望檢查你的設置,並鏈接到synchronization.lib,如果尚未完成。 (不管使用Visual Studio或其他東西) – nos

+0

@jamacoe - 「它不同於其他WinAPI調用行爲」 - 當然不是。對於任何WinAPI,你必須包含一些庫作爲鏈接器輸入 – RbMm

相關問題