LNK2001: 無法解析的外部符號的幾種情況


一般來說,我們引用第三方庫時,需要進行指定依賴項配置,若沒有進行相關配置,則編譯器會出現“LNK2001: 無法解析的外部符號”錯誤。

這個是最常見的問題,具體步驟:
項目、屬性、鏈接器、常規、附加庫目錄:填寫附加依賴庫所在目錄 分號間隔多項
項目、屬性、鏈接器、輸入、附加依賴項:填寫附加依賴庫的名字.lib 空格或分號間隔多項

若已經按照上述步驟進行配置,但編譯器還是報錯,可能情況如下:

1.編譯lib庫和引用lib庫平台不一致

lib庫采用的編譯平台和引用該lib的工程的編譯平不兼容導致的。比如項目采用vs2008編譯,而該lib是用2010編譯的,亦或者項目采用vs2015平台,而lib是vs2008編譯的也可能導致鏈接失敗。

2.編譯lib庫和引用lib庫選項不一致情況

1、一個lib庫采用“多線程 DLL (/MD)”配置,而另外一個項目采用“多線程(/MT)”編譯配置
2、一個lib庫采用“使用 Unicode 字符集”配置,而另外一個項目采用“使用多字節字符集”編譯配置
3、一個lib庫采用選擇“release 版本 ”配置,而另外一個項目采用選擇 “debug 版本 ”編譯配置
4、一個lib庫采用“wind32平台 ”配置,而另外一個項目采用“wind64平台 ”編譯配置

3.沒有添加指定預編譯宏

在使用curl靜態庫時,卻遇到了編譯鏈接錯誤:
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_init
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_setopt
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_perform
1>testcurl.obj : error LNK2001: unresolved external symbol __imp__curl_easy_cleanup

解決方法是,在自己的項目屬性中添加一個預編譯宏,CURL_STATICLIB,

為了避免遇到以上問題建議:

1、引用第三方庫時,確認lib庫是否使用相同編譯平台
2、確認編譯選項是否一致。比如運行時庫和字符集
3、若需要則添加指定編譯宏
4、添加附加庫目錄和附加依賴項
---------------------
作者:Jimmy1224
來源:CSDN
原文:https://blog.csdn.net/c_base_jin/article/details/83010745
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 


免責聲明!

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



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