2010-02-15 149 views
3

我正在使用Visual Studio 5.0我有DLL和一個靜態庫。我的意圖是使用靜態庫中定義的靜態函數。我已將頭文件包含在預期的源cpp中,並且還給出了項目依賴關係中的路徑。它仍然給我鏈接器錯誤。將靜態庫鏈接到一個DLL

以下是鏈接錯誤

錯誤LNK2019:無法解析的外部符號 「公用:靜態布爾__cdecl GPH :: ISA(類PtOnDemand &,wchar_t的常量*)」(ISA @ GPH @@ SA_NAAVPtOnDemand @? @ HandleObjectBegin @ PtXMLP @@ AAEHPBDPAPBD @ Z) 1>。\ ReleaseU/epptxml.dll:@ PB_W @ Z)在函數「private:int __thiscall PtXMLP :: HandleObjectBegin(char const *,char const * *)致命錯誤LNK1120:1個未解析的外部設備

任何建議

+2

禁用名稱通過包裝原型完全重整你應該向我們展示生成文件/項目文件和鏈接器錯誤。和所有的答案更新您的視覺工作室版本+1 ...良好的主,5.0是古老的。 – Tim

回答

3

可能是因爲鏈接器使用不同的設置進行編譯,鏈接器沒有找到您的功能。像釋放vs調試,unicode與非unicode,調用約定的差異。這可能會導致名稱被改變。如果.h文件是用C語言編寫,而不是C++,你可能需要在

extern "C" 
    { 
    // function prototypes go here. 
    } 
+1

+1:基於Sameer對其他答案的評論,這幾乎可以肯定是這種情況。 –

+0

+1,如上所述,鑑於有問題的函數需要wchar_t指示unicode。此外,IsA聽起來像MFC中常見的IsKindOf類型函數(例如RTTI替代品) –

+0

我在我的win32應用程序中使用cpprestsdk。它一直在尋找圖書館的dll(cpprestsdk)。這個解決方案根本不適用於我:( – Marss

0

首先,它的時間來獲得新版本的Visual Studio :-) 但它可能是您使用它的遺留支持。

無論如何,只包括頭文件是不夠的。您還需要確保告訴鏈接器靜態庫文件的位置(應該是.a文件)以及庫的名稱。

+0

@fuzz我已經這麼做了 –

1

嗯,我並不完全瞭解Visual Studio 5.但是,您必須添加要靜態鏈接爲您的項目的附加依賴項的庫。

+0

@simon我已經這樣做了 –

2

您還必須將lib文件包含到您的項目中,以便將其鏈接到其中。注意確保關於VS5,但在6上這是在Project/Add to Project/Files下。或者,您可以將其包含在項目屬性中的鏈接器選項下。

+0

@shane我已經完成了 –

+0

@Sameer,聽起來你應該調查jdv的答案。看看添加_MBCS和UNICODE作爲預處理器定義的效果 –