LoginSignup
0

Windows で RaspberryPi 向け Qt6 クロス開発 (その2:ビルド&実行編)

Last updated at Posted at 2023-07-10

前回は準備を行いました。
続けて Qt6 のビルドとサンプルの動作確認を行います。

クロス開発環境構築の手順(再掲)

  1. RaspberryPi 側の準備 (→ 【準備編】)
    1. OS イメージ作成と起動
    2. Qt の開発に必要なパッケージの導入
    3. 環境設定
  2. Windows 側の準備
    1. Qt 開発環境の導入
    2. クロスコンパイラを導入
    3. sysroot のコピー
    4. CMake と Ninja-build を実行できるようにする
    5. pkg-config の導入と設定
    6. CMake 用の設定ファイル作成
  3. Qt のビルド (→ この記事はここから)
    1. ソースコード取得
    2. configure
    3. ビルドとインストール
    4. RPi へのコピー
  4. QtCreator の設定
    1. リモートデバイスの設定
    2. Qt キットの設定
    3. サンプルの動作確認
  5. 補足 (→ 【補足編】)
    1. クロス開発環境を別の WinPC へ持ち込みたい
    2. RPi側実行環境の OS イメージを小さくしたい
    3. X Window アプリを作れるようにしたい
    4. 32bit のクロス環境を作りたい
    5. まだできていないこと

Qt のビルド

いよいよ Qt6 をビルドしていきます。
CLI での操作が中心になりますがガンバりましょう。

Linux でやったことがある方はここからはそれとほぼ同じ手順です。

ソースコード取得

git で Qt6 のソースコードを取得します。
ここだけ MinGW64 のコマンドラインではなく、git bash で行います。

Qt の MinGW64 には init-repository で使う perl が含まれていません。

user@host MINGW64 ~
$ cd /c/Qt/qt6build
user@host MINGW64 /c/Qt/qt6build
$ git clone "https://codereview.qt-project.org/qt/qt5"
user@host MINGW64 /c/Qt/qt6build
$ cd qt5
user@host MINGW64 /c/Qt/qt6build/qt5 (dev)
$ git checkout 6.5.1
Switched to a new branch '6.5.1'
branch '6.5.1' set up to track 'origin/6.5.1'.
user@host MINGW64 /c/Qt/qt6build/qt5 (6.5.1)
$ ./init-repository -f --module-subset=qtbase,qtdeclarative,qtquick3d,qtshadertools,qtsvg

configure

MinGW64 のコマンドラインで実行します。
sysroot の内容から RPi OS 上のどんな機能が使えてどれが使えないかなどが検査され、ビルドするための準備が完了します。

C:\Qt\6.5.1\mingw_64> cd C:\Qt\qt6build
C:\Qt\qt6build> mkdir build
C:\Qt\qt6build> cd build
C:\Qt\qt6build\build> ..\qt5\configure -release -no-pch -no-xcb -opengl es2 -qpa eglfs \ 
 -nomake examples -nomake tests -qt-host-path C:/Qt/6.5.1/mingw_64 \ 
 -extprefix C:/Qt/qt6-rpi -prefix /opt/qt -device linux-rasp-pi3-g++ \ 
 -device-option CROSS_COMPILE=aarch64-linux-gnu- -- \ 
 -DCMAKE_TOOLCHAIN_FILE=C:/Qt/qt6build/toolchain.cmake

オプション設定のポイントは以下の通り

  • -no-pch
    • これをつけないとビルドが途中でコケます
  • -no-xcb
    • X Window 対応を除外
  • -qpa eglfs
    • QPA (Qt の描画システム) のデフォルトプラグインの指定
      • EGLFS (Xorg/X11 を使わず OpenGL/EGL で直接描画) を選択
    • この指定は環境変数(QT_QPA_PLATFORM)や実行時引数(-platform)で上書きできます
  • -qt-host-path
    • Windows 側で動作する Qt の環境を教えておきます
  • -extprefix
    • クロス環境 (Windows 側)のインストール先
  • -prefix
    • RPi 側のインストール先
  • -device
    • Raspberry Pi 3 用の設定を指定
    • ソースコードの qtbase/mkspecs/devices/ 以下にいろいろあります
  • -DCMAKE_TOOLCHAIN_FILE
    • CMake に toolchain.cmake を指定

ビルドとインストール

ビルド&インストールしましょう。

C:\Qt\qt6build\build> cmake --build . --parallel
C:\Qt\qt6build\build> cmake --install .

C:\Qt\qt6-rpi\ 以下に RPi 向け Qt6.5.1 がインストールされます。

RPi へのコピー

C:\Qt\qt6-rpi\ 以下の内容を RPi にコピーします。
コピー先は configure で指定した /opt/qt/ 以下です。

## Windows 側からコピー(WinSCPなどでやってもOK)
C:\Qt\qt6build\build> scp -r C:\Qt\qt6-rpi\* pi@raspberrypi.local:/opt/qt/

QtCreator の設定

クロス開発環境ができたはずなので使ってみましょう
QtCreator を起動して設定を行います。

リモートデバイスの設定

まずは QtCreator が RPi へアクセスできるように設定しましょう。
RPi を起動しネットワークに接続しておき、ssh でログインできることを確認しておくといいでしょう。

QtCreator で、

  1. 編集 → Preferences → デバイスを選択します。
  2. Add → Remote Linux Device → ウイザード開始
  3. 設定名、ホスト名(or IPアドレス)、ログインユーザ名を設定
    1. 設定名にはわかりやすい名前をつけておきましょう
    2. ホスト名 と ログインユーザ名は RPi のものを指定します
  4. Create New Key Pair → Generate And Save Key Pair → Deploy Public Key
    1. すでに鍵ペアがあるなら公開鍵ファイルを指定して Deploy Public Key
  5. 次へ → 完了、でテストが開始されます。

テストは rsync でエラーが起きますが sftp が使われますので問題ありません。
「デバイステストが成功しました」と表示されたら OK です。

Qt キットの設定

クロスコンパイラの登録

QtCreatorで、

  1. 編集 → Preferences → キット → コンパイラ タブを選択します。
  2. 追加 → GCC → C を選択
    1. コンパイラのパスで 編集 → C:\SysGCC\raspberry64\bin\aarch64-linux-gnu-gcc.exe を選択
    2. 名前 を適宜変更
  3. 追加 → GCC → C++ を選択
    1. コンパイラのパスで 編集 → C:\SysGCC\raspberry64\bin\aarch64-linux-gnu-g++.exe を選択
    2. 名前 を適宜変更
  4. 適用 を選択

クロスビルドした Qt 自身の登録

QtCreatorで、

  1. 編集 → Preferences → キット → Qt バージョン タブを選択します。
  2. 追加 を選択して、C:\Qt\qt6-rpi\bin\qmake.bat を選択
  3. 適用 を選択

GDB の登録

デバッガまわり、動作未確認です

QtCreatorで、

  1. 編集 → Preferences → キット → デバッガ タブを選択します。
  2. 追加 を選択
    1. パスで参照 → C:\SysGCC\raspberry64\bin\aarch64-linux-gnu-gdb.exe を選択
    2. 名前 を適宜変更
  3. 適用 を選択

Qt kit の登録

QtCreatorで、

  1. 編集 → Preferences → キット → キット タブを選択します。
  2. 追加 を選択
    1. 名前 を設定します。RPi 向けの Qt6 だとわかりやすい名前がいいでしょう
    2. デバイスの種類 → Remote Linux Device を指定
      1. デバイス で先ほど設定したリモートデバイスを選択
    3. Sysroot に SysGCC 配下に置いた sysroot ディレクトリを指定
      1. C:\SysGCC\raspberry64\aarch64-linux-gnu\sysroot
    4. コンパイラ を指定します
      1. C に登録した C コンパイラを設定
      2. C++ に登録した C++ コンパイラを設定
    5. デバッガ に登録した GDB を設定
    6. Qtバージョンに登録した Qtバージョンを選択
    7. 最下段 CMake 設定 で 変更 を選択
      1. 最下行に以下2行を追記
    -DCMAKE_TOOLCHAIN_FILE:UNINITIALIZED=C:/Qt/qt6-rpi/lib/cmake/Qt6/qt.toolchain.cmake
    -DCMAKE_INSTALL_PREFIX:UNINITIALIZED=/home/pi
    
    1. OK を選択
  3. OK を選択

これで、Qt のプロジェクトを作成するときに RPi 向けの設定が選べるようになります。
cmakeoptions2.jpg
qtkit.jpg

サンプルの動作確認

qtquick3d のサンプル picking を例に動かしてみます。

  1. QtCreator のサンプルから picking を選ぶ
  2. プロジェクト設定で、作成した RPi 向けの configuration を選ぶ
  3. ビルド&実行
    1. CMAKE_INSTALL_PREFIX に指定されている /home/pi 以下にデプロイされます

どうでしょうか、うごきましたか?

picking.jpg

以上でクロス開発環境が揃いました。

次は補足編です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0