1. 程式人生 > >Qt技巧:Error LNK2019解決辦法

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也一起重新編譯但是編譯無法完成才報錯的嗎?望有識之士解解惑!