一、问题点:我在Qt5.3.1上开发完一个应用程序后,在开发机上运行良好,当我部署到其他机器时(release版本发布)弹出如下图错误后崩溃:
二、已采取应对措施
1、复制所需的*.dll(Qt5Core.dll...)到应用程序同一目录;
2、复制platforms目录到应用程序同一目录;
3、复制libEGL.dll,libGLESv2.dll,D3DCompiler_43.dll到应用程序同一目录。
三、应用程序机构图
注:图中hellworld.exe为测试程序,能正常运行,crm.exe为发布程序不能正常运行。
四、寻求帮助
请问还有哪些可能的因素会造成此问题,分别有哪些解决办法,谢谢不吝指教!
巴扎黑2017-04-17 14:03:03
您的映像,我也看不到,一直處於載入狀態。關於Qt開發,本人,簡單說一下,
Qt的版本號碼一般是三位數字,建議在選擇版本的時候,選擇大的版本。例如:4.8.0、5.0.0、5.3.0、5.7.0...最後一個數字盡量為0.這樣的版本來說,相對於其他末尾非零數字的比較穩定吧。題主選的5.3.1,個人感覺不太好,但這次您的問題不在這裡。
以下方法本人經過測試,覺得是比較方便可行的,如果不行,請參考他人方案。
其實Qt的應用程式的發布很簡單,這麼好的框架,Qt肯定考慮到怎麼方便的發布程式。
Qt一次寫,多編譯發行,實現了他的跨平台性。不同的平台除了一些特殊的函式庫以外,幾乎使用的都是Qt的函式庫。發布的程式不能運行,多數都是庫的不完整性造成的。由於開發機器上已經配置了Qt的環境路徑,所以在資料夾下直接運行,不會出錯。但是純淨的機器,就很容易出錯。多數是缺少Qt庫文件。
windeployqt
這是Qt官方自帶的一個小程序,從名字可以看出win deploy(發布) qt.
1.release您的程式;
2.進入release資料夾下,除了可執行的程式外,其他都刪除,沒有用
3.win下,按住shift
鍵,滑鼠右鍵,選擇在此開啟指令視窗
4.Qt環境路徑先配置。直接敲打windeployqt my.exe
,回車
5.查看您的release文件,多了好多文件,把整個文件夾拷貝到,乾淨的機器上,程序完美運行;
5.經過以上步驟,還好多不能運作的,請查看rp。
怪我咯2017-04-17 14:03:03
不知是我網路還是SF自身原因,目前暫時看不到你的圖片(無限loading)。
在Windows下發佈的話,根據你.pro專案文件裡面的"QT += ",這行所有的相關dll都要拷貝。
例如QT += core gui network opengl widgets
需要拷貝:
Qt5Core.dll
libEGL無視。
Qt5Gui.dll
Qt5Network.dll
Qt5OpenGL.dll
Qt5Widgets.dll
libEGLpendllll>Qt5Widgets.dll
然後根據你的編譯器(MSVC或MinGW),還要拷貝相關的dll,具體依賴的dll可以用Dependency Walker
這個軟體查看。
最後是platform的Windows目錄,也許只要qwindows.dll就可以了。
大家讲道理2017-04-17 14:03:03
除了樓上說的 windeployqt,還可以用【dependency walker】看生成的 exe 的 dll 依賴,然後把所有的 dll 都拷貝了就好。