2010-06-21 80 views
2

在Visual Studio 2008中,我有一個包含兩個項目的解決方案:一個項目是.dll,另一個是調用.dll的命令行應用程序。Visual Studio 2008中棘手的鏈接錯誤

如果我刪除其中一個文件(「ast.c」),然後直接添加它,我會收到以下錯誤消息。

如何解決此錯誤?

錯誤22錯誤LNK2019:解析外部符號 「__declspec(dllimport的)INT __cdecl ast_get_int_value(結構ast_node *,無效*)」(__imp_ ast_get_int_value @@ YAHPAUast_node @@ PAX @ Zβ)函數引用「雙__cdecl d_low(結構ast_node *,結構ast_node *,結構ast_node *,結構ast_node *,無效*)」(?d_low @@ YANPAUast_node @@ 000PAX @ Z)main.obj主要

回答

2

明白了 - 必須正確點擊該項目,進入「Linker」和「Input」和「Additional Dependencies」,並添加「.. \ $(ConfigurationName)\ dll.lib」。文件「dll.lib」是作爲.dll編譯過程的一部分創建的,我們需要告訴鏈接程序該文件的位置,以便它可以解析任何外部依賴關係。這一勞永逸地解決了鏈接錯誤。

http://www.codeproject.com/KB/DLL/XDllPt1.aspx一些不錯的提示,說明連接過程:

  • 的DLL導出它的符號,並且應用程序進口的DLL符號。編譯應用程序時,編譯器通過包含文件(Test.h)查看DLL符號。鏈接應用程序時,鏈接器通過導入庫(Test.lib)查看DLL符號。
  • 運行應用程序時,DLL必須與EXE位於同一目錄中。在早期版本的Windows中,將應用程序DLL放在Windows或System目錄中是可以接受的做法,但現在認識到這會導致問題,因此不應該這樣做。

,另請參閱:

http://support.microsoft.com/kb/815065

和:

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/a22571ad-ef89-4f94-afca-4f4d32cdd0f2