Qt技巧:Error LNK2019解決辦法

在編譯工程的時候經常會碰到 " LNK2019:無法解析的外部符號... " 的報錯。一般來說,碰到這個錯誤有一下幾種情況:

1、頭文件中聲明瞭函數或者類型,但是沒有相關的實現源文件

解決:在編譯結果中找到並定位該函數,刪去多餘的定義並對未實現的定義進行實現;注意刪去Debug和Release文件夾,並重新構建。

2、調用了第三方庫,但是未鏈接成功

解決:重新添加庫的.lib和.dll及相關.h文件,刪除Debug和Release文件夾並重新構建。

================================================================================

PS:

我在調用HIDAPI的項目中,卸載重裝VS後遇到LNK2019 error,但是以上方法都不起作用。最後解決問題頗費波折:

①首先刪去Debug和Release文件夾,並重新構建,無效;

②重新載入.lib和.dll及.h,重新構建,無效;

③重新編譯第三方庫,注意平臺對應(Qt 用msvc2015_x86,則VS2015編譯平臺選擇Win32;Qt 用msvc2015_x64,則VS2015編譯平臺選擇x64),無效;

④重裝Qt、Visual Studio,無效;

⑤刪除Qt緩存,包括:

  C:\Users\jiche\AppData\Local\QtProject

  C:\Users\jiche\AppData\Roaming\QtProject

最終解決問題。分析原因可能是之前工程鏈接庫文件出錯,但是配置已經記錄到工程配置文件和Qt緩存中,即使重裝Qt,緩存文件還在。因此只有清楚了Qt的緩存才能奏效。

 

Qt重新構建的文件殘留問題無力吐槽~只能說習慣就好~


================================================================================

2017-5-12 更新

導入加載了第三方的Qt工程到新的Qt開發環境中,老是出現“xxx不存在”的報錯,概要信息顯示:


Running Windows Runtime device detection.

No winrtrunner.exe found.


嘗試了各種方法,包括清除Qt工程的cache,重新編譯第三方庫,重載庫,都無效。最後發現工程中添加了庫文件的.c和.h源文件,將.c從項目列表去除後,刪掉build文件夾和.user文件重新編譯,編譯成功。再重新添加該庫的.c源文件,編譯成功。


難道是Qt在之前編譯的時候把.c也一起重新編譯但是編譯無法完成才報錯的嗎?望有識之士解解惑!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章