簡體   English   中英

如何在Windows上構建64位MinGW Qt應用程序(使用Qt Creator)

[英]How to build 64-bit MinGW Qt application on Windows (with Qt Creator)

我正在尋找(並且肯定我不是唯一一個)在Windows上構建基於MinGW的64位Qt程序的最直接方式。 直線向前意味着最小的努力和時間(例如,用於建造和設置)。 目前,我使用MinGW / OpenGL和QtCreator運行qt-project.org網站的常規官方開發環境,適用於Windows 32位。 當然我已經閱讀了qt-project.org的(未完成的...)64位wiki頁面,我也閱讀了不同的stackoverflow問題,但我仍然感到困惑。 我知道如何在其他帖子中處理如何構建64位Qt的主題,但這不是我的問題,我需要的是概述和最有利的64位MinGW端口。

讓我感到困惑的一件事是,來自mingwbuilds sourceforge項目的“x64-Qt-5.2.1 + QTCreator-3.0.1-(gcc-4.8.2-seh).7z”包中的DLL似乎是32位。

為了澄清我的問題,我還要問一些相關的問題:

  • 我是否需要首先構建64位開發環境以生成64位可執行文件,還是可以保留正常的默認環境並僅使用64位工具鏈交換MinGW工具鏈?
  • 我在哪里可以獲得用於部署的64位Qt庫,或者我是否還需要自己構建它們? 或者我在哪里可以獲得包括64位庫在內的64位開發環境?
  • 如果我必須自己構建,哪個MinGW 64位端口最有利?

非常感謝你的幫助。

更新3/11/2019:從Qt 5.12開始,Qt Project在64位模式下正式支持MinGW-w64。 您可以從Qt安裝程序安裝它,或者自己從Qt的源代碼構建它們(它們已經解決了阻止成功構建的問題)。

事先更新:我認為rubenvb的答案現在是這個問題的最佳答案:MSYS2包含一個用MinGW-w64構建的最新Qt,這是構建64位Qt應用程序所需要的。 我建議在rubenvb的答案中使用Qt wiki鏈接進行部署; 它大大改善了。

Qt64-NG

我建議從Qt64-NG項目安裝你的Qt版本。

該項目使用MinGW-w64提供最新的x64 Qt版本。 MinGW-w64項目的GCC編譯器也包含在安裝程序版本中(但不包含在7z中)。 您將需要在MinGW-w64中使用相同版本的GCC來構建Qt以構建您自己的應用程序,因此我建議您選擇安裝程序。

您需要選擇具有所需異常堆棧幀展開方法的構建。 問題sjlj vs dwarf vs seh之間有什么區別? 描述了不同Qt版本中存在的異常處理程序類型之間的差異。 在GCC 4.8發布之前,SJLJ是唯一的選擇,但后來的GCC版本支持SEH。 雖然SEH更有效,但任何一種選擇都可行。

安裝后

安裝Qt后,可以將Qt / qt-ver / qt-ver / bin和Qt / qt-ver / mingw64 / bin目錄添加到環境變量中的User或System Path變量中,這樣就可以使用MinGW -w64的GCC用於從您首選的構建過程構建。 執行此操作后,Qt Creator將自動檢測MinGW-w64作為已安裝的編譯器。

如果您不想添加到路徑中,可以手動為Qt Creator設置的版本指定編譯器。 您可能需要通過選擇選項>構建和運行下的qmake.exe來添加Qt版本。 您還需要在Build&Run> Debuggers選項卡下選擇gdb.exe作為調試器。 它將位於Qt / qt-ver / qt-ver / mingw64 / bin。

您可以將MinGW-w64工具鏈與其他工具鏈交換。 要在Qt Creator中執行此操作,您可以在套件之間創建和交換。

部署

您可以使用Qt64-NG構建進行開發和部署。 要進行部署,您需要打包應用程序需要與您的應用程序一起運行的文件,這樣您的最終用戶就不必再執行任何額外的安裝步驟。

首先,創建一個部署文件夾(可能帶有您的應用程序名稱)並將應用程序exe文件復制到該文件夾​​。 如果你正在使用Qt Creator,你可以在側欄的Projects選項卡或應用程序的.pro文件中找到應用程序exe的路徑(如果在那里指定的話)。

有兩種方法可以復制運行應用程序所需的dll依賴項。 您可以手動復制所需的文件,也可以使用windeployqt,這是Qt安裝提供的程序,它將自動復制(大部分)所需的依賴關系,以便部署到剛創建的應用程序部署文件夾。

手動復制文件

將以下dll文件從Qt / qt-ver / qt-ver / bin和Qt / qt-ver / mingw64 / bin文件夾復制到應用程序部署文件夾。 一些dll文件將位於兩個文件夾中,並且任一位置都可以使用:

icudt54.dll
icuin54.dll
icuuc54.dll
libgcc_s_sjlj.dll or libgcc_s_seh.dll (corresponds with chosen stack unwinding method)
libssp-0.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll

您還需要包含與您在項目中使用的Qt模塊相對應的任何Qt5 * .dll文件。

接下來,您需要復制Qt所需的任何插件DLL文件。 Qt將默認在應用程序部署文件夾/插件中查找插件。 您可以在Qt / qt-ver / qt-ver / plugins中找到要復制的插件文件夾。 例外的是platforms文件夾,它將嘗試在您的應用程序部署目錄/平台上找到它。 以下目錄結構指示復制最小項目的文件的位置。 將任何其他所需的插件(包括包含文件夾)復制到deployment / plugins文件夾。

/部署

/platforms
/plugins
icudt54.dll
icuin54.dll
icuuc54.dll
app.exe
libgcc_s_seh-1.dll
libssp-0.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll

/部署/平台

qwindows.dll

/部署/插件/ imageformats

qjpeg.dll

Windeployqt

您可以在Qt / qt-ver / qt-ver / bin文件夾中找到windeployqt.exe。 Windeployqt要求您的Qt / qt-ver / qt-ver / bin和mingw64 / bin文件夾位於用戶或系統路徑變量中才能正常工作。

要使用windeployqt,請打開命令窗口並切換到應用程序部署目錄。 可以在Qt Deployment中找到運行它的語法。 您可能希望按如下方式運行它:

windeployqt.exe app.exe

Windeployqt(Qt 5.4.1)會將您的imageformats和iconengines插件文件夾復制到應用程序部署目錄級別而不是插件文件夾中。 這是正確的位置,因為它改變了Qt查找這些文件夾的位置。

故障排除

您可以通過在未安裝Qt開發庫的計算機上和路徑中運行應用程序來測試您是否擁有正確的文件。 如果您的應用程序啟動時沒有錯誤,您將知道Qt找到了所需的依賴項,並且您可以將應用程序打包以進行分發。

如果您遇到錯誤,請參閱Tripleboot部署指南 您還可以嘗試使用Process Explorer查看應用程序在提供缺少依賴項錯誤時嘗試加載的依賴項。

打包

應用程序經常與歸檔和/或安裝程序一起分發。 Qt安裝程序框架提供了一種方便的方法來打包您的Qt應用程序以作為安裝程序可執行文件進行分發。

您可以安裝MSYS2,其中包括軟件包管理器和包含Qt的軟件包的預構建版本,您也可以在MSYS2環境之外使用,例如Qt Creator(順便提一下,它也在存儲庫中)。

安裝很簡單:

  1. 網頁下載安裝程序。
  2. 打開MSYS2命令提示符並安裝Qt:

    pacman -Sy mingw-w64- {i686,x86_64} -qt5

  3. Qt的qmake安裝在<msys2>/mingw{64,32}/bin ,可從相應的命令提示中訪問。

以同樣的方式,您可以安裝開發所需的數百個其他庫和工具。

至於應用程序部署的其余部分,我將向您推薦Windows部署的Qt項目Wiki頁面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM