2011-02-16 206 views
4

我正在將我的項目從vc6轉換爲VS 2010.當我編譯我的項目時,出現如下錯誤,可能是.lib輸入。我在Linker-> Input-> Additional Dependencies中添加了所有這些庫,還在Link-> General-> Additional Library目錄中提供了這些.lib文件的路徑。對此的任何提示將非常有幫助。錯誤LNK2001:無法解析的外部符號

lb0.lib(ob0.obj) :error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" ([email protected]@[email protected]@@Z) 
lb1.lib(ob1.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" ([email protected]@[email protected]@@Z) 
lb2.lib(ob2.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" ([email protected]@[email protected]@@Z) 
lb3.lib(ob3.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" ([email protected]@[email protected]@@Z) 
lb3.lib(ob4.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" ([email protected]@[email protected]@@Z) 
lb3.lib(ob5.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" ([email protected]@[email protected]@@Z) 
lb4.lib(0b6.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" ([email protected]@[email protected]@@Z) 

感謝

+1

我可能是錯的,但我認爲微軟更改了默認TCHAR定義從VC++ 6開始,把char形成爲wchar。可能是你的前面的lib在方法簽名中導出了char *,但是你的新代碼正在尋找wchar。如果是這種情況,那麼您可以重新編譯庫,或更改新項目中的默認字符集。 – Jimmy 2011-02-16 13:00:40

+0

嗨吉米,我的lib和我的項目都只使用wchar。 – Arvind 2011-02-16 13:08:33

回答

7

您需要確定SetLastExP()函數的定義在哪裏。

  • 檢查實現SetLastExP的庫是否已鏈接。
  • 獲取.obj文件並檢查dumpbin是否實現了您期望的裝飾。

    dumpbin /symbols foo.obj | find "External" | find "SetLastExP" 
    
  • 將您看到的裝飾與鏈接器錯誤消息中的裝飾進行比較。

可能該函數被定義爲extern "C",而您的頭文件不反映這一點。

3

有時候,如果你有不同的字符集(Configuration properties - >general)在你的子項目,Visual Studio中顯示了這種類型的錯誤:

error LNK2001: unresolved external symbol" with an *.obj 
相關問題