Linux 下交叉編譯 Windows 的 QT 程式

自己平常有在用 QT 的程式來操作、監控機器的一些狀態,因此會和Linux程式共用一些 .h 或 .c 檔,因此 QT 的程式也要隨著 Linux 產品的程式更新一並重新編譯。但手動在 Windows 上每版重編是一項不切實際的工作,因此要在 Linux 上的 autobuild server 上,可以達成自動重編 QT 程式。

本文是參考這篇,然後整理起來的。QT 是使用 Windows 5.12.8 搭配 Ubuntu 18.04 的環境。

建立 QT Sample 程式

我們以簡單的程式做範例,一個表單加上一個按鈕。

簡單程式

原始碼檔案

編譯 Linux 上的 QT5 源始碼

由於 QT5 的編譯步驟多,所以可以藉助一個整理好的工具 MXE (M Cross environment) 來一次做好 cross compiler 的編譯與 QT5 編譯。 MXE 還支援其它工具的編譯,有需要的可以另外研究。

首先安裝相依套件,各種不同的  distribution 的安裝列表在此. 本文使用的是 Ubuntu 18.4,安裝以下套件

另外再安裝下列套件,由於 Ubuntu 18.04 預設的是 python 3.6,編 QT5 時需要 python 3.7 以上才行。

安裝後,將舊的 python3 移除,指向 python 3.7

 

然後利用 git 將mxe下載下來。

後進入 mxe 目錄,執行 make qt5 來下載並編譯檔案

這會花一段蠻長的時間,請耐心等待

完成編譯後,檔案會存在 usr/bin 下面,有些檔案是以link的方式存在的,若要變更位置,請將這些檔案重新 link。

編譯出的檔案

接著將 PATH 加入編出的 bin 目錄,以方便編譯

編譯 QT 程式

用 samba 或其它方式,讓 Linux 可以進入 QT 範例程式碼的目錄,接著打 i686-w64-mingw32.static-qmake-qt5 以生成 Makefile,接著在打 make 就可以在release目錄編出執行檔了。

QT執行檔

將檔案複製到 Windows 測試一下,就可以執行了。

結語

這個方法的好處是可以在 autobuild server 內自行進版,另一個好處是其是單一執行檔了,不需使用我們之前提過的 Enigma 打包,也算是一個優點了。

另外,由於不曉得 mxe 的專案可以維持多久,或其中要下載的檔案會保留多久。建議編譯好合用的檔案後,就將完整的 mxe 原始檔保留下來 (或編出的 binary 留下),以免將來有其它的變動。

 

Leave a Reply

請輸入答案 + 69 = 76