0

幫助我們, 我一直在尋找很長時間。無法解析的外部符號

我使用visual studio 2010,我試圖包括一個外部庫,但我得到一個無法解析的外部錯誤。

外部工程通過以下方式

backend.cpp 
//some functions 
frontend.cpp 
//some functions 
header.h 

我建立使用SCons的這個項目組成文件的話,我包括在項目中的.lib文件,並refered其路徑和我複製.h文件到msvc目錄。

VS似乎訪問和讀取backend.cpp功能(從自動完成),但是當我運行該項目,它說,存在未解決的外部@調用的函數

+1

您是否已將'lib'添加到項目設置的'Additional libraries'部分? –

+0

我將它添加到其他依賴關係 –

+1

確切的錯誤消息會有幫助,鏈接器缺失的函數的* complete *函數聲明也會有幫助。 –

回答

2

我不是一個Visual Studio專家,但我想它能夠自動完成您的代碼與它相關聯,找到您的源代碼的標題。

無法解析的外部意味着編譯器無法在鏈接過程中找到對象文件。這可能意味着您無法正確添加lib文件,或者您缺少一些.cpp文件。

+0

我應該將.cpp文件添加到他的項目中,否則lib和.h文件就足夠了,特別是.h接口後端和前端文件 –

+0

不,您不應該添加.cpp文件。所有你需要做的就是將.lib文件添加到'Additional Dependencies',你說你已經做了。你是否這樣做過「所有配置」? –

+0

我的意思是你可能會錯過一些.cpp文件,因爲你沒有提供完整的錯誤信息。也許這是另一個文件,甚至與圖書館沒有任何關係,儘管我不認爲這是事實。 – ivarec

1

這可能是由於各種原因而發生的。但是,它們最終都是以下之一:

  • 您未鏈接正確的.lib文件。
  • 您在程序中使用的符號名稱與.lib中提供的符號名稱不同。

第一個很容易檢查,所以請仔細檢查一下。

第二個更棘手。程序中使用的符號名稱會在錯誤消息「無法解析的外部符號abc」中輸出,或者其他任何內容。庫中可用的符號可以使用以下命令列出:dumpbin /all name.lib

如果您找不到問題,請發佈您正在獲取的確切錯誤和dumpbin程序的輸出。

+0

錯誤LINK2019:無法解析的外部符號「public:void_thiscall IStruct :: init(void)」(?init @ IStruct @ QAEXXZ)在函數「private:void _thiscall Main :: on_donebutton_clicked(void)」中引用(?on_donebutton_clicked @ Main @@ AAEXXZ)。 –

+0

我打開了vs命令行,然後導航到.lib文件的目錄,然後輸入了您給我的命令,輸出結果是如何存儲該庫的描述 –

+0

如果'dump/all'命令沒有報告任何符號,可能是您的圖書館沒有正確構建。您應該嘗試手動構建而不是使用scons。 – rodrigo