關於各種無法解析的外部符號問題的相應解決方案【轉】


原文: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]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM