1. lnk2019
LNK2019錯誤一般是 compile 能找到 header(.h)文件,但是在鏈接時找不到需要的 lib 庫文件或者是 dll 文件。
一般認爲在編譯 OSG 簡單示例的時候遇到這樣的錯誤是因爲錯誤的設置了 lib2。OSG 的 lib 目錄中一般有兩組文件名相似的 lib 文件,其中一組以 d 結尾,例如:osgDBd.lib, osgViewerd.lib,這個表示該 lib 是用於調試 debug,而不帶 d 的一組是用於 release 版本。
如果沒有正確的指定 lib 文件,那麼一般會出現 error LNK2019 錯誤。比如,編譯時指定的是 debug, 但是依賴項設置的卻是不帶 d 的那一組 release 版本的 lib 文件;或者是編譯時指定 debug,但是依賴項設置的是帶 d 的一組。只要編譯的選項和調用的 lib 一致即可解決這個問題。
不過我仔細檢查了自己調用的 lib,編譯的選項和調用的 lib 都是 debug 版本的。
後來發現,開發機器是64位的,而編譯選項的目標平臺(platform)選擇的卻是 win32,修改爲 x64 之後解決了這個鏈接錯誤。
也看到有人說1,前面函數聲明與後面的函數定義參數類型不同時,有時 compile 能夠通過,但是 link 的時候會出現 error LNK2019 錯誤。
參考鏈接:
- error LNK2019: unresolved external symbol
- 求助:最簡單的OSG例子編譯出錯
- error LNK2019: unresolved external symbol "__declspec(dllimport)
2. lnk2001
一般來說,我們引用第三方庫時,需要進行指定依賴項配置,若沒有進行相關配置,則編譯器會出現“LNK2001:無法解析的外部符號”錯誤。 (與LNK2019有區別:LNK2019是配置錯了,而這裏是沒有找到)
這個是最常見的問題,具體步驟:
項目->屬性->鏈接器->常規->附加庫目錄:填寫附加依賴庫所在目錄(分號間隔多項);
項目->屬性->鏈接器->輸入->附加依賴項:填寫附加依賴庫的名字.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,
4.如果上述3點都沒能解決這個問題,則把源文件添加進工程,這是迫不得已之法,但也是最根本的解決之道!
爲了避免遇到以上問題,建議:
1)引用第三方庫時,確認lib庫是否使用相同編譯平臺
2)確認編譯選項是否一致,比如運行時庫和字符集
3)若需要則添加指定編譯宏
4)添加附加庫目錄和附加依賴項
參考鏈接:
https://blog.csdn.net/c_base_jin/article/details/83010745
3. error C2001: newline in constant
這個錯誤開發中難免會遇到
一是可能由於疏忽可能括號、引號等不匹配造成;
二是由於編碼方式引起,解決:由於包含漢子,將其文本編碼改爲utf8.或者 將源碼文件用其它編輯器打開,保存爲utf8+bom編碼格式。
注意:有時有的中文標點同樣會報錯。
參考鏈接:
https://blog.csdn.net/allen807733144/article/details/85243819