2014-04-09 57 views
0

我的系統中有一個makefile項目。最近,我增加了一些新的功能,這使得使用下列Windows的API:鏈接器錯誤,同時鏈接一些Windows API

RegOpenKeyEx 
RegEnumKeyEx 
RegCloseKey 
RegGetValue 

對於有我加入了windows.h頭文件以及這些API。代碼在我的機器中編譯和鏈接很好。但是,我的同事機器中的鏈接失敗。我們都在研究64位Windows機器。 在他的電腦我的錯誤:

error LNK2001: unresolved external symbol __imp_RegOpenKeyExW

error LNK2001: unresolved external symbol __imp_RegGetValueW

error LNK2001: unresolved external symbol __imp_RegCloseKey

error LNK2001: unresolved external symbol __imp_RegEnumKeyExW

我試了一下: 由於所使用的圖書館是Advapi32.libC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64

我嘗試添加以下行:

LINKFLAGS += -L "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64"

我增加了圖書館的環境變量路徑PATH

I co將lib綁定到輸出文件夾。

沒有工作。

正如我前面所說,代碼在我的電腦中正常工作,但在另一箇中失敗。

+0

您是否使用相同的IDE?我以前有過這樣的情況,因爲某種原因'#define'錯了,並且從'windows.h'中排除了一些函數# – Bowdzone

+0

@bowdzone這是一個鏈接器錯誤 –

+0

@DavidHeffernan ... ups – Bowdzone

回答

4

註冊表功能要求您將Advapi32.lib傳遞給鏈接器。這是你錯過的一步。

+0

感謝您的回覆。爲什麼它在我的系統上運行,而不是在其他系統上運行?我是製作文件的新手,文件是由其他人編寫的。 – sajas

+0

很難說。你沒有提供你正在使用的編譯器的細節。或者make文件中有什麼。或者機器之間有什麼不同。所以不,我不能建議一個詳細的修復。 –

0

如果您使用visual stdio,請檢查您的項目屬性與您朋友的項目屬性,並檢查包含.lib的鏈接庫路徑+庫名稱。看來在你的朋友電腦沒有得到解決符號庫。編譯時間檢查僅使用頭文件完成。鏈接時應該在庫中找到yor函數的定義。從 :http://social.msdn.microsoft.com/Forums/vstudio/en-US/6bcae3d1-85b6-471d-a4ee-7b455b21460b/how-do-i-link-libraries-that-are-sitting-in-different-directories-from-the-command-line?forum=vcgeneral

CL main.obj ab1.lib ab2.lib de1.lib de2.lib gh1.lib /Fetestmain.exe /鏈接/ LIBPATH:C:\測試\ AB

命令行/ LIBPATH:C:\ test \ de/LIBPATH:C:\ test \ gh

「/ link」非常重要...不要使用「/ LINK」,大寫的LINK無法識別。