Ubuntu 18.04 MinGW環境でQt – GUI Windows Applicationをクロスコンパイル
WindowsとLinux環境のGUIアプリケーションを作りたいので、今回cross-platformを対応しているQTフレームワークをUbuntu環境でコンパイルと開発して、Windows環境に実行するクロスコンパイル方法を試します。
環境
- AsRock DeskMini GTX1060(Z370)
- Core i9-9900 (3.10GHz 8core 16thread)
- メモリー32GB
- Ubuntu 18.04.5 LTS
- Qt 5.13.2
- mingw-w64 7.3.0
- cmake 3.10.2
- Qt Creator 4.9.2
MinGW
Linux環境で Windows コンパイラーのmingw-w64をインストールします。
sudo apt-get install binutils-mingw-w64-x86-64
sudo apt-get install mingw-w64-common
sudo apt-get install mingw-w64-x86-64-dev
sudo apt-get install mingw-w64-tools
sudo apt-get install gcc-mingw-w64-base
sudo apt-get install gcc-mingw-w64-x86-64
sudo apt-get install g++-mingw-w64-x86-64
Win64 + pthread版(posix)を使用
update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix
Qt Source
トップのリポジトリの取得
PKG=qt5 VER=5.13.2 TAG=v$VER
QTDIR=~/Qt
mkdir -p "$QTDIR/$VER/mingw_64"
mkdir -p "$QTDIR/$VER/src"
cd "$QTDIR/$VER/src"
git clone --depth 1 git://code.qt.io/qt/qt5.git $PKG
cd $PKG
git fetch --depth 1 origin tag $TAG
git checkout -f $TAG
サブモジュールの取得
Qt5は大量のサブモジュールから構成されている。
サブモジュールの全履歴をダウンロードに時間がかかるので、
今回はQt Widgetsでの開発に必要なqtbaseのサブモジュールのみをダウンロードします。
for module in qtbase; do
git submodule update --init --depth 1 --progress $module
done
git clean -dfX
git submodule foreach --recursive git clean -dfX
Configuring Qt
Windows環境向けのQtをクロスコンパイル設定します。
./configure \
-xplatform win32-g++ \
-device-option CROSS_COMPILE=/usr/bin/x86_64-w64-mingw32- \
--prefix="$QTDIR/$VER/mingw_64" \
-opensource \
-confirm-license \
-developer-build \
-no-compile-examples \
-nomake examples \
-opengl desktop \
-L/usr/x86_64-w64-mingw32/lib \
QMAKE_LIBS+="-lws2_32"
Make Qt
コンパイルの時間が長いので、CPUスレード数で並列コンパイルします。
PCメモリー不足よりコンパイルが異常終了した場合、並列コンパイルの数を減らしてコンパイルしてくだいさい。
「16スレード環境でコンパイルした場合: メモリー8G、10分程度かかる」
J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
echo $J
make -j $J
Installation Qt
J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
echo $J
make -j $J install
Qt Creator
MinGWコンパイラの設定
J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
echo $J
make -j $J install
MinGWコンパイラの設定
Qt CreatorでMinGWコンパイラを追加します。
[ツール][オプション][Kits][コンパイラ][追加][MinGW]よりMinGWのC、C++のコンパイラを追加します。
Qtバージョンの設定
[ツール][オプション][Kits][Qtバージョン][追加]よりビルド&インストールした"QTDIR/VER/mingw_64/bin/qmake"を追加します。
Development Kitの設定
[ツール][オプション][Kits][キット][追加]より追加します。
コンパイラ:追加したMinGWコンパイラを選択
Qtバージョン:追加したMinGW Qtバージョンを選択
追加したMinGW Qtキットを既定にする
Qt Applicationの作成
アプリケーションを新規
[ファイル][プロジェクトの新規作成]より作成します。
アプリケーションの名前と保存場所を入力
追加したMinGW Qtキットを選択、ビルド場所を入力
クラス情報のDefault設定を使用
設定を完了
GUI画面を編集
GUIにボタンを追加
Forms/mainwindow.ui をダブルクリックよりForm編集画面を開く
[Buttons][Push Button]をFormにドラッグ & ドロップ
Qt Applicationのビルド
[ビルド][プロジェクトをリビルド]よりQt Applicationをビルドします。
Qt ApplicationをWindows環境にデプロイ
ビルドしたqt_gui_app.exeとMinGWのDLL、QtのDLLをWindowsにコピーします。
コピー元:
/usr/lib/gcc/x86_64-w64-mingw32/7.3-posix/libgcc_s_seh-1.dll
/usr/lib/gcc/x86_64-w64-mingw32/7.3-posix/libstdc++-6.dll
/usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll
コピー先:exeと同じフォルダー
コピー元:QTDIR/VER/mingw_64/bin
Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll
コピー先:exeと同じフォルダー
コピー元:QTDIR/VER/mingw_64/plugins/platforms
qwindows.dll
コピー先:exeフォルダーのplatformsサブフォルダー
Qt ApplicationをWindows環境で実行
*.exeをダブルクリックより実行
Author And Source
この問題について(Ubuntu 18.04 MinGW環境でQt – GUI Windows Applicationをクロスコンパイル), 我々は、より多くの情報をここで見つけました https://qiita.com/k-koh/items/e1e59548b4e323bece9a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .