Qt5部署Windows應用

本文地址:http://www.cnblogs.com/neochin/p/3267097.htmlhtml

概述:windows

Qt5應用程序的部署與以前版本之間的差別,主要是須要增長Qt裏plugins/platforms/下的dll的部署。app

官方文檔:http://doc-snapshot.qt-project.org/qt5-stable/qtdoc/deployment-windows.html函數

 

測試環境與工具:工具

Windows 8 64bit測試

Windows Xp 32bitui

Qt 5.1.0 Mingw4.8 32bit spa

Dependency Walker 2.2插件

 

步驟:code

用簡單的Qt Gui應用程序myapp舉例說明。

  1. Release發佈應用程序,並將該exe放到應用程序目錄"/myapp/"中,目錄結構爲:"/myapp/myapp.exe"。
  2. 使用Dependency Walker打開myapp.exe,查看依賴的dll。也能夠運行程序,記下 程序提示缺乏的dll。
  3. 找到Qt的dll目錄,個人在"D:\Qt\Qt5.1.0\5.1.0\mingw48_32\bin"下,把缺乏的dll複製到"/myapp/"下(有些缺乏的dll是系統目錄下的,不用複製,你只用把qt dll目錄有的複製過來便可)。此時雙擊程序已經能夠運行了,但還沒能部署完。
  4. 在"/myapp/"目錄下,新建文件夾"platforms",把"D:\Qt\Qt5.1.0\5.1.0\mingw48_32\plugins\platforms"目錄下的qwindows.dll(可能不僅缺乏這個dll,依狀況而定)複製進來,目錄結構爲"/myapp/platforms/qwindows.dll",如今就成功部署了。

 

我還想問點爲何:

如下是本身測試獲得的結論。

  • qwindows.dll是The Qt Windows platform plugin,對平臺的支持使用插件的方式提供。
  • 在已安裝了的Qt機器下,不復制qwindows.dll時,爲何程序也能夠運行?QCoreApplication中有QCoreApplication::libraryPaths()函數及相關函數能夠對庫目錄動態設置。經過如下代碼:
    QApplication a(argc, argv);
    qDebug()<<a.libraryPaths();

    可獲得默認的庫目錄,在我測試環境下目錄爲:"D:/Qt/Qt5.1.0/5.1.0/mingw48_32/plugins", "D:/projects/qt_code/build-myapp/release"。由第一個目錄看得出來,爲何在本身機器上能默認找到platforms/qwindows.dll了。

  • 上一點中提到的plugins目錄,應用程序是如何知道要去設置這個庫目錄的? 應用程序用什麼方式獲得Qt的安裝目錄,並取得標準插件目錄?Qt目錄是經過讀註冊表而來,仍是Qt工程在編譯的時候,就把安裝目錄固定死,植入了App.EXE中?       答案是:這個目錄是固定死的,可是是在QtCore.dll中。  我想,這應該是Qt在安裝的時候,修改過或是臨時生成QtCore.dll,因此QtCore.dll中這個值,跟安裝時候的配置有關。   下面可能就有這樣一個問題:若是你的Qt在安裝在D盤,後來你用剪切的方式,把Qt目錄移到了E盤,QtCore.dll便不能幫你找到plugins/目錄了。
相關文章
相關標籤/搜索