2012-06-13 48 views
0

我有一個討厭的鏈接器錯誤的問題,並希望找到一個解決方案的提示。需要幫助解決鏈接器錯誤LNK2001視覺工作室2010

我明白錯誤的方式,鏈接器無法找到類'BFStream'中名爲'read'的函數的實現。代碼包含BFStream類的頭文件。有一個導入庫QRFound.lib,它接收來自QRFound.dll的導出函數。 dll和lib都在文件系統的lib目錄中。 lib目錄在兩個位置的項目屬性中提供:VC++目錄 - >庫目錄和鏈接器 - >其他庫目錄。 QRFound.lib在Linker-> Input-> Additional Dependencies中指定,並且在列表中第一個。

我知道QRFound.dll包含BFStream :: read的實現,因爲我使用dependency walker來查看它。但C++的裝飾是從哪個有我可疑鏈接錯誤略有不同:[email protected]@@[email protected]

鏈接器錯誤是:

1>  Creating library C:\MyProj\Debug\MyDisplay.lib and object C:\MyProj\Debug\MyDisplay.exp 
1>MyCmdReceiver.obj : error LNK2001: unresolved external symbol "public: bool __thiscall BFStream::read(char *,__int64)" ([email protected]@@[email protected]) 
+1

QRFound.dll的出處是什麼? 它可能是由不同的C++編譯器構建的,通常,從DLL導出C++接口是一個糟糕的主意:堅持使用C接口或使用COM。 –

回答

3

運行在你的符號undname.exe工具產生:

Undecoration of :- "[email protected]@@[email protected]" 
is :- "public: bool __thiscall BFStream::read(char *,int)" 

所以,是的,顯然是在最後一個參數不匹配,__int64不匹配int。你沒有發佈方法的實際聲明,所以我不能想出一個像樣的猜測如何發生這種不匹配。我懷疑這是一種宏觀湯的問題。

+0

不知道這個工具;謝謝! –

+0

'布爾讀取(char * s,streamsize n)'其中streamsize是... – kevincw01

+0

看起來像streamsize在iosfwd中被維護,VS頭部爲'typedef _Longlong streamsize;'所以我猜我需要指定32位因爲我在32位平臺上。不知道該去哪裏...... – kevincw01

0

我懷疑你調用不同的編譯器內置的DLL。

如果您有DLL的源代碼,請使用您當前的編譯器構建它:名稱修改將保持一致,並且您應該能夠解決問題。

如果您沒有該DLL的源代碼,請查看它是否具有COM接口。

+0

不幸的是沒有源或COM接口。 – kevincw01