“error LNK2019:無法解析的外部符號”的解決方案
在使用vs2008除錯程式的過程中,經常會出現無法解析的外部符號問題,可能的原因有很多種,下面這些是我一年來積累的經驗.
僅供參考.
考慮可能的原因:
[0]出現無法解析可能是因為lib檔案不正確,比如64位的編譯配置,結果使用的是32位的lib包.
[1]只寫了類宣告,但還沒有寫實現類,造成呼叫時無法解析
[2]宣告和定義沒有統一,造成連結不一致,無法解析
[3]沒有在專案屬性頁的連結器的命令列選項加入相應的類包。
[4]沒有在c++包含目錄和庫目錄加入相應的類包路徑(*.h和*.lib),*.h一般在src資料夾中,*.lib一般在lib資料夾
[5]在測試工程中被測檔案目錄可能需要包含被測類的cpp定義檔案
[6]ICE介面測試時,無法解析可能因為被測檔案沒有包含進相關的cpp檔案,另外,在TestSuite_ProjectRun.h檔案中需要包含IProjectRun.h標頭檔案,及相關的標頭檔案(舉例)。
[7]import相關的無法解析內容,解決辦法是在連結器的依賴項中加入相應的動態庫
[8]出現如下錯誤的原因一般是動態庫沒有包進來。__imp
ProjectRun.obj : error LNK2019: 無法解析的外部符號 __imp__StartHistoryLocalModule,該符號在函式 "protected: virtual int __thiscall HiRTDB::CProjectRun::DoStart(void)" ([email protected]@[email protected]@MAEHXZ)
中被引用
[9]error LNK2001: 無法解析的外部符號 __imp___CrtDbgReportW
工程屬性,C/C++,程式碼生成,執行時庫選擇MDd,
[9]無法解析的外部符號"__declspec(dllimport) public: int __thiscall HiRTDB::CTagTree::GetObjectA(int,struct HiRTDB::SBaseReadProps const &,struct HiRTDB::SBaseReadValues &)" ([email protected]@[email protected]@[email protected]@[email protected]@@Z),該符號在函式"public:
int __thiscall HiRTDB::CStringImpl::Get(int,struct HiRTDB::SStringReadProps const &,struct HiRTDB::SStringReadValues &)" (
原因可能是工程配置檔案中有多餘選項,請參考其他模組的配置選項,不要有多餘配置。
[10]在 專案屬性\連結器\輸入\附加依賴項 中 沒有新增***.lib