「インストール - Qt6 Raspberry Pi」の版間の差分

ナビゲーションに移動 検索に移動
613行目: 613行目:
<br><br>
<br><br>


== Qtライブラリの動作確認 ==
== Qt Creatorの設定 ==
Qtソフトウェアを開発して、動作確認を行う。<br>
==== キットの設定 ====
Qt Creatorを起動して、キットの設定を行う。<br>
<br>
<br>
===== XCBを使用する場合 : Raspbian OS Buster以前 =====
* QMakeの設定
Raspberry PiのEGL / GLESライブラリを修正する。<br>
*: クロスコンパイルしたQt 6のインストールディレクトリに移動する。
*: binディレクトリにあるhost-qmakeファイルのシンボリックファイル(ここでは、qmake-hostファイルとする)を作成する。
*: <code>ln -s host-qmake qmake-host</code>
*: <br>
* キットの作成
*: [編集] - [設定]を選択して、[設定]画面を開く。
*: [設定]画面左にある[キット] - [設定]画面右の[Qtバージョン]タブから[追加]ボタンを押下する。
*: 上記で作成したシンボリックファイルを選択する。
*: <br>
*: [設定]画面左にある[キット] - [設定]画面右の[キット]タブから[追加]ボタンを押下する。
*: [デバイスの種類]プルダウンから、[Remote Linux Device]を選択する。
*: [デバイス]プルダウンから、[設定]画面左にある[デバイス]で作成したターゲットを選択する。
*: [ビルドデバイス]プルダウンから、[ローカルPC]を選択する。
*: [Sysroot]項目に、Raspberry Piのシステムルートディレクトリのパスを入力する。
*: [コンパイラ]項目の[C]プルダウンから、C向けのクロスコンパイラを選択する。
*: [コンパイラ]項目の[C++]プルダウンから、C++向けのクロスコンパイラを選択する。
*: [GDB]プルダウンから、クロスコンパイラ向けGDBを選択する。
*: [Qtバージョン]プルダウンから、上記で設定した[Qtバージョン]を選択する。
*: [Qt mkspec]項目から、デバイス定義ファイル (/<クロスコンパイルしたQt 6のインストールディレクトリ>/mkspecs/devices/linux-raspberrypi-new-g++ファイル) のパスを入力する。
*: [CMake Tool]プルダウンから、クロスコンパイルで使用したCMakeを選択する。
*: <br>
*: [CMakeの設定]項目の[変更...]ボタンを押下して、
*: <code>-DCMAKE_TOOLCHAIN_FILE:UNINITIALIZED=/<クロスコンパイルしたQt 6のインストールディレクトリ>/lib/cmake/Qt6/qt.toolchain.cmake</code>と入力する。
*: [適用]ボタンを押下する。
*: [[ファイル:Install Q6 PP 1.png|フレームなし|中央]]
*: [[ファイル:Install Q6 PP 2.png|フレームなし|中央]]
*: <br>
*: <u>ただし、この設定は、Qt Creatorの左サイド画面にある[プロジェクト] - [キット名] - [ビルド]を選択して、</u>
*: <u>Qt Creatorメイン画面右ペインの[ビルド設定]にある<code>CMAKE_TOOLCHAIN_FILE</code>の値を編集することにより、プロジェクトごとに設定することができる。</u>
*: [[ファイル:Install Q6 PP 3.png|フレームなし|中央]]
<br>
<br>
Raspberry Piの/usr/lib/arm-linux-gnueabihfディレクトリには、MesaのlibEGLとlibGLESv2が存在する。<br>
==== Qtプロジェクトの設定 ====
XCBを使用したQtソフトウェアは、/opt/vc/libディレクトリにあるlibbrcmEGLとlibbrcmGLESv2ではなく、libEGLとlibGLESv2が自動的に選択される。<br>
次に、Qt Creatorでソフトウェアを開発する時の環境設定を行う。<br>
<u>しかし、MesaのlibEGLとlibGLESv2は、OpenGLの描画処理と関わりがあるEGLでは、ほとんど役に立たない。(XCBは、OpenGLの描画処理とほぼ関係無い)</u><br>
<br>
まず、プロジェクトの環境変数の設定を行う。<br>
Qt Creatorを起動して、Qt Creatorメイン画面左の[プロジェクト] - 左ペインの[Run] - 右ペインの[ビルド設定] - [Environment]項目 - [詳細]プルダウンを開く。<br>
[詳細]プルダウンから[追加]ボタンを押下して、以下の項目を設定する。<br>
<br>
<u>Qtプロジェクトをデバッグする場合は、必ず[デバイス環境の取得]ボタンを押下すること。</u><br>
* Variable - QT_QPA_PLATFORMTHEME
*: Value - qt6ct
* Variable - DISPLAY
*: Value - :0 または :0.0
* Variable : PATH
*: Value : /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/bin  ※PATHの設定が既に存在する場合は、追記する
* Variable : LD_LIBRARY_PATH  (Raspberry Piの~/.profileファイルに環境変数LD_LIBRARY_PATHを設定している場合)
*: Value : /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/lib:/home/<Raspberry Pi's User Name>/InstallSoftware/Qt_6_x_x/plugins/qmltooling
* Variable : QML_IMPORT_PATH
*: Value : /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/qml
* Variable : QML2_IMPORT_PATH
*: Value : /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/qml
* Variable : QT_PLUGIN_PATH
*: Value : /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/plugins
* Variable : QT_QPA_PLATFORM_PLUGIN_PATH
*: Value : /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/plugins/platforms
<br>
<br>
そのため、libbrcmEGLとlibbrcmGLESv2を、libEGLとlibGLESv2に入れ替える。<br>
また、上記の設定を簡潔に行う場合、Qtプロジェクトのディレクトリにある.pro.userファイルにおいて、<br>
具体的には、libbrcmEGLとlibbrcmGLESv2のシンボリックリンクを/usr/lib/arm-linux-gnueabihfディレクトリに作成する。<br>
<code><valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">〜</valuemap></code>要素内に、以下の設定を追記する。<br>
(必ず、元のファイルはバックアップすること)<br>
<u>以下の設定を追記する場合、必ず、Qtプロジェクトを閉じた状態で行うこと。</u><br>
  sudo ln -sf /opt/vc/lib/libbrcmEGL.so /opt/vc/lib/libEGL.so
  <syntaxhighlight lang="xml">
  sudo ln -sf /opt/vc/libbrcmGLESv2.so /opt/vc/libGLESv2.so
  # .pro.userファイル
   
   
  sudo ln -sf /opt/vc/lib/libEGL.so                    /usr/lib/arm-linux-gnueabihf/libEGL.so.1
  <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libEGL.so.1 /usr/lib/arm-linux-gnueabihf/libEGL.so
  <!-- ...略 -->
  <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes">
    <value type="QString">QT_QPA_PLATFORMTHEME=qt6ct</value>
    <value type="QString">DISPLAY=:0</value>
    <value type="QString">PATH=/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games</value>
    <value type="QString">LD_LIBRARY_PATH=/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/lib:/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/plugins/qmltooling</value>
    <value type="QString">QML_IMPORT_PATH=/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/qml</value>
    <value type="QString">QML2_IMPORT_PATH=/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/qml</value>
    <value type="QString">QT_PLUGIN_PATH=/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/plugins</value>
    <value type="QString">QT_QPA_PLATFORM_PLUGIN_PATH=/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_6_x_x/plugins/platforms</value>
  </valuelist>
  <!-- ...略 -->
  </valuemap>
</syntaxhighlight>
<br>
もし、デバッグにおいて、以下のようなエラーが出力される場合は、<br>
Qt Creatorのサイドメニューから、[プロジェクト] - [Build & Run] - [Run] - [コマンドライン引数:]項目に、<code>-platform wayland</code>を記述する。<br>
# エラー内容
Failed to create wl_display (No such file or directory)
...
error: XDG_RUNTIME_DIR not set in the environment
...
qt.qpa.plugin: Could not load the Qt platform plugin "wayland"
<br>
==== GDBの設定 ====
次に、GDBデバッガの設定を行う。<br>
リモートターゲットをデバッグする時、GDBは、Linux PC側にダウンロードしているRaspberry Piのシステムルートディレクトリを検索する。<br>
そのため、GDBにターゲット側のRaspberry Piのシステムルートディレクトリを検索するように設定する必要がある。<br>
<br>
これは、Qt Creatorメイン画面から、[ツール]メニューバー - [オプション] - [デバッガ] - [GDB]タブ - [追加の起動コマンド]に、以下の内容を設定する。<br>
<u>ただし、この設定はQt Quickを使用する時のみである。(Qt Widgetを使用する場合は設定不要)</u><br>
set sysroot target:/
<br>
しかし、上記の[追加の起動コマンド]において、<code>set sysroot target:/</code>オプションを使用する場合、デバッグの開始に時間が掛かる。<br>
そのため、以下のように、[追加の起動コマンド]を記述して、<br>
システムルートディレクトリに対して、Qtライブラリのインストールディレクトリのシンボリックリンクを作成することを推奨する。<br>
<br>
システムルートディレクトリに対して、Linux PCに保存したRaspberry Pi向けのQtライブラリがあるディレクトリのシンボクリックリンクを作成する。
mkdir -p /<Raspberry Piのシステムルートディレクトリ>/home/mobian/InstallSoftware
ln -s /<Qtライブラリのインストールディレクトリ> /<Raspberry Piのシステムルートディレクトリ>/home/mobian/InstallSoftware
   
   
  sudo ln -sf /opt/vc/lib/libGLESv2.so                    /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
  # シンボリックリンク名の変更
sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 /usr/lib/arm-linux-gnueabihf/libGLESv2.so
mv /<Raspberry Piのシステムルートディレクトリ>/home/mobian/InstallSoftware/<Qtライブラリのインストールディレクトリ> \
    /<Raspberry Piのシステムルートディレクトリ>/home/mobian/InstallSoftware/Qt_6_x_x
<br>
<br>
上記で設定したライブラリを読み込むため、以下のコマンドを実行する。<br>
Qt Creatorメイン画面から、[ツール]メニューバー - [オプション] - [デバッガ] - [GDB]タブ - [追加の起動コマンド]に、以下の内容を設定する。<br>
  sudo ldconfig
  # Kit名に"RaspberryPi"という文字列が入っている場合のみ、Raspberry Piのシステムルートディレクトリを参照する
<br>
# x86 / x64のKitを使用する場合は、Raspberry Piのシステムルートディレクトリを参照しない
上記のシンボリックリンクの設定を元に戻す場合は、以下のように実行する。<br>
  [ -n $(grep -i RaspberryPi %{ActiveProject:Kit:Name}) ] && set sysroot /<Raspberry Piのシステムルートディレクトリ>
  sudo rm -rf /opt/vc/lib/libEGL.so /opt/vc/libGLESv2.so
   
   
  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libEGL.so.1.1.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1
  # または
sudo ln -sf /usr/lib/arm-linux-gnueabihf/libEGL.so.1    /usr/lib/arm-linux-gnueabihf/libEGL.so
   
   
  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.1.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
  set sysroot /<Raspberry Piのシステムルートディレクトリ>
sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2    /usr/lib/arm-linux-gnueabihf/libGLESv2.so
<br>
次に、Qt Creatorでソフトウェアを開発する時の環境設定を行う。<br>
Qt Creatorを起動して、Qt Creatorメイン画面左の[プロジェクト] - 左ペインの[Run] - 右ペインの[ビルド設定] - [Environment]項目 - [詳細]プルダウンを開く。<br>
[詳細]プルダウンから[追加]ボタンを押下して、以下の項目を設定する。<br>
* Variable - QT_QPA_PLATFOMRTHEME
*: Value - qt5ct
* Variable - DISPLAY
*: Value - :0 または :0.0
* Variable - XAUTHORITY
*: Value - /home/<Raspberry Piのユーザ名>/.Xauthrity
* Variable - XDG_SESSION_TYPE
*: Value - x11
<br>
<br>
さらに、Raspberry Piの~/.profileファイルまたは~/.bashrcファイルに、以下の設定を追記する。<br>
これにより、Raspberry PiでQtライブラリが使用できる。<br>
export QT_QPA_PLATFOMRTHEME=qt5ct
export DISPLAY=:0 または export DISPLAY=:0.0
export XAUTHORITY=/home/<Raspberry Piのユーザ名>/.Xauthrity
export XDG_SESSION_TYPE=x11
<br><br>
<br><br>


案内メニュー