1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

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

次は補足編です。

1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?