VS常見錯誤之一:error LNK2019: 無法解析的外部符號


  由於經常使用VS的開發環境,所以經常遇到一些錯誤提示,其中error LNK2019是很常見的一個報錯。今天將此錯誤的原因和常見解決辦法根據自己的經驗小小總結一下。

  問題樣式:

  1>SingleView.obj : error LNK2019: 無法解析的外部符號 __imp__wglCreateContext@4,該符號在函數 "protected: int __thiscall CSingleView::CreateViewGLContext(struct HDC__ *)" (?                                                                CreateViewGLContext@CSingleView@@IAEHPAUHDC__@@@Z) 中被引用

  

  原因:找不到相應的庫文件,即xx.lib文件。找不到庫文件的原因可能有以下幾種:

  ①你使用別人的庫,比如說OPenCV的庫,OpenGL的庫等等第三方庫。常見情況是你只是包含了頭文件,但是沒有引入庫文件

  ②你沒有使用別人的庫,微軟自帶的一些庫也可能出現這樣的問題。這時常見情況是鏈接失敗的函數所在的頭文件在項目屬性的包含目錄下,但是相應的庫文件卻不在項目屬性的默認庫目錄里。比如說常見問題

  樣式里的CreateViewGLContext(struct HDC__ *)函數就是這種情況,此函數在頭文件wingdi.h里定義,這個頭文件在項目屬性中默認的包含目錄下,但是對應的庫文件opengl32.lib卻不在庫目錄里

  ③你使用了自己做的庫文件。這種情況自己沒有試過,看過網上的一些說法

 

  解決辦法:核心是添加相應的庫文件即可

  對於情況①,有兩種辦法,一種是通常配置一下項目屬性就好(在你相應開發環境配置好的前提下),在項目屬性的庫目錄里面添加相應庫文件所在的目錄,然后在鏈接器->輸入->附加依賴項里加入對應的庫文件即可

 

  

  第二種解決辦法是利用預處理命令#pragma comment (lib, "xxx.lib"),關於這條命令的使用方法不是本文的主要目的,讀者可參見網上其他博客。這樣做的前提是所用的庫目錄在VS的默認庫目錄下或者庫文件所在目錄已經被添加到項目的庫目錄里或者相應的庫文件已經被你拷貝到當前項目目錄下,相當於是第一種方法的“代碼化”版本

  對於情況②,你只需要找到函數所在的庫文件(通常按照函數名在網上搜即可找到函數所在的庫文件),然后文件首部添加#pragma comment (lib, "xxx.lib")即可

  對於情況③,因你使用方法不同,可參見情況一和情況二處理


免責聲明!

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



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