1. 程式人生 > >Qt打包程式出現的問題及解決方案

Qt打包程式出現的問題及解決方案

首先宣告本人使用的Qt版本是qt-msvc2015_64-5.6.1, Visual Studio版本是VS2015。

Matlab中的m檔案轉化成dll檔案 ,再用Qt呼叫這些dll檔案)後用Debug編譯成功後執行也沒有問題,便想著將Qt程式打包出來,這樣就能在別的電腦上執行,而不需要在別人電腦上安裝Qt了。本人在打包Qt程式時使用了常用的方法用windeployqt來打包,具體流程參考QT5的程式打包釋出,對於一般的程式而言,windeployqt會自動尋找依賴庫並拷貝過來,如果按照上述文章操作應該執行是沒有問題的。

但是本人的Qt程式裡連線了mysql資料庫,並且還呼叫了用VS2015編譯器編譯的Matlab的dll檔案

,所以按照上述方法操作以後,執行還是會報錯,本人花了三天時間找遍了網上各種資料加不斷除錯終於找出瞭解決方案,下面分享一下:

windeployqt只會把你Qt程式所需要的庫拷貝過來,但它不會自動拷貝mysql的庫,也不會自動拷貝執行Matlab的dll檔案所需要的庫函式,所以你點選exe可能出現以下錯誤


ILLE1.dll是我用Matlab的deploytool工具將需要用到的m檔案轉化成的dll檔案,這些dll檔案你需要自己新增(複製到與exe同級的目錄即可),另外還要加上ssleay32.dlllibeay32.dll,這兩個檔案在Matlab的安裝目錄 \bin\win64下。

解決了這一問題,接下來你可以進入,但

如果你Qt程式中用到了連線mysql資料庫,就要把mysql安裝目錄\lib\libmysql.dll複製過來。

接下來你可以執行,但中途可能會崩潰,因為一旦遇到要執行matlab的dll檔案時還是會崩潰,這是因為打包出來的程式可能沒有安裝VS的執行時庫(你是哪個版本的VS就安裝哪個版本的執行時庫),我的是VS2015。

解決辦法:首先要設定使用者變數,在使用者變數中新建一個使用者變數,圖中的變數值應該是你們VS的安裝目錄\VC,這樣做是為了消除用命令列裡的Warning : Can not find Visual Studio installation directory,VCINSTALLDIR is not set 這個警告的。


然後再用windeployqt重新打包一次程式(記住把原來裡面的檔案都刪掉,重新操作),目的是為了讓windeployqt自動新增VS的執行時庫到目錄中,這樣你會多一個這個檔案(64或32看你係統位數),如果沒有安裝此執行庫的,就安裝它

注意:如果遇到找不到mclmcrrt9_2.dll檔案這種錯誤的,千萬別去Matlab安裝資料夾

裡找這個檔案,因為你一旦把這個檔案加進來,執行Matlab的dll檔案時程式就會崩潰

(我也不知道為什麼崩潰,但就是會崩潰),正確的處理方式就是安裝上面的這個

vcredist_x64(VS執行庫),因為根本就用不到mclmcrrt9_2.dll這個檔案。

這樣應該差不多就大功告成了,最後展示一下最終生成的目錄,畫紅線的是你所需要加的庫檔案,最後一個vcredist_x64一定要安裝


文章所述內容是本人做專案過程中親身經歷的bug,解決bug後拿出來分享一下,希望能幫到大家。