原文:http://blog.csdn.net/enotswn/article/details/5934938 以下有補充
考慮可能的原因:
- [0]出現無法解析可能是因為lib文件不正確,比如64位的編譯配置,結果使用的是32位的lib包.
- [1]只寫了類聲明,但還沒有寫實現類,造成調用時無法解析
- [2]聲明和定義沒有統一,造成鏈接不一致,無法解析
- [3]沒有在項目屬性頁的鏈接器的命令行選項加入相應的類包。
- [4]沒有在c++包含目錄和庫目錄加入相應的類包路徑
- [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)" (?DoStart@CProjectRun@HiRTDB@@MAEHXZ) 中被引用
- [9]error LNK2001: 無法解析的外部符號 __imp___CrtDbgReportW 工程屬性,C/C++,代碼生成,運行時庫選擇MDd,
- [10]無法解析的外部符號"__declspec(dllimport) public: int __thiscall HiRTDB::CTagTree::GetObjectA(int,struct HiRTDB::SBaseReadProps const &,struct HiRTDB::SBaseReadValues &)" (__imp_?GetObjectA@CTagTree@HiRTDB@@QAEHHABUSBaseReadProps@2@AAUSBaseReadValues@2@@Z),該符號在函數"public: int __thiscall HiRTDB::CStringImpl::Get(int,struct HiRTDB::SStringReadProps const &,struct HiRTDB::SStringReadValues &)" (?Get@CStringImpl@HiRTDB@@QAEHHABUSStringReadProps@2@AAUSStringReadValues@2@@Z) 中被引用:
原因可能是工程配置文件中有多余選項,請參考其他模塊的配置選項,不要有多余配置。
-
[11]MSVCRTD.lib(exe_main.obj) : error LNK2019: 無法解析的外部符號 _main,該符號在函數 "int __cdecl invoke_main(void)"中被引用:
產生這個問題的真正原因是C語言運行時找不到適當的程序入口函數。
一般情況下,如果是windows程序,那么WinMain是入口函數,在VS2017中新建項目為“win32項目”;如果是dos控制台程序,那么main是入口函數,在VS2017中新建項目為“win32控制台應用程序”。並修改相應C/C++預處理器及鏈接器中的子系統項。
另外也有可能是引入的第三方庫將main函數的函數名重定義了。比如SDL中 #define main SDL_main 這句。所以我們寫的main就沒有真正的意義了 程序也就找不到入口了 。我們應該 #undef main
- [12]必須定義入口點
同[11]
