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

684行目: 684行目:
<br><br>
<br><br>


== エラー関連 ==
== ビルドエラー関連 ==
==== ビルドエラー : QtBase ====
===== ビルドエラー : GCC 13を使用する場合 =====
Qt 5のビルドにおいて、以下に示すようなエラーが表示される場合がある。<br>
GCC 13を使用してQt 6をビルドする場合、以下に示すようなエラーが出力される場合がある。<br>
qt-everywhere-src-5.15.x/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/qeglfsbrcmintegration.cpp:74:5: Error: »EGL_DISPMANX_WINDOW_T« was not declared in this scope
バグレポートURL : https://bugreports.qt.io/browse/QTBUG-111604?focusedCommentId=718489<br>
      EGL_DISPMANX_WINDOW_T *eglWindow = new EGL_DISPMANX_WINDOW_T;
# エラー出力 1
error: 'uint32_t' is not a member of 'std'; did you mean 'wint_t'?
# エラー出力 2
error: 'FeatureType' does not name a type; did you mean 'ToFeatureType'?
<br>
<br>
この時、QtGuiモジュール内のBRCMテストを修正することにより、コンパイルすることができる。<br>
この時、以下に示すファイルを編集する。<br>
  vi /<Qt 5のソースコードディレクトリ>/qtbase/src/gui/configure.json
  <syntaxhighlight lang="c++">
<br>
// qt-everywhere-src-6.x.x/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cppファイル
  <syntaxhighlight lang="json">
// 53行目
  # /<Qt 5のソースコードディレクトリ>/qtbase/src/gui/configure.jsonファイル
// 変更前
#include <stdint.h>
  // 変更後
#include <cstdint>
   
// qt-everywhere-src-6.x.x/qtquick3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cppファイル
// 53行目
// 変更前
#include <stdint.h>
// 変更後
#include <cstdint>
   
   
# 編集前
"main": "vc_dispmanx_display_open(0);"
   
   
  # 編集後
  // qt-everywhere-src-6.x.x/qtquick3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXTokenizer.cppファイル
  "main": [
  // 58行目
    "vc_dispmanx_display_open(0);",
// 変更前
    "EGL_DISPMANX_WINDOW_T *eglWindow = new EGL_DISPMANX_WINDOW_T;"
#include <stdint.h>
  ]
  // 変更後
#include <cstdint>
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== デバッグエラー : No route to host ====
==== ビルドエラー関連 : X Keyboardに関するエラー ====
デバッグ実行開始前に、以下に示すようなエラーが表示される場合がある。<br>
コンパイル時において、以下に示すようなエラーが出力される場合がある。<br>
  tcp:<IPアドレス または ホスト名>
  error: XKB_KEY_dead_lowline was not declared in this scope; did you mean XKB_KEY_dead_belowring?
  No route to host 〜
または
  error: 'XKB_KEY_dead_lowline' was not declared in this scope; did you mean 'XKB_KEY_dead_belowring'?
<br>
<br>
これは、Raspberry Piのファイアーウォールが設定されているため、リモートデバッグ向けの指定のポートを開放する必要がある。<br>
この時、<code>cmake</code>コマンドの実行時において、<code>-DFEATURE_xkbcommon=OFF</code>オプションを付加する。<br>
Qt Creatorを使用している場合、デフォルトのポート番号は<code>10000-10100</code>である。<br>
<br>
<br>
Raspberry Piにアクセスして、ファイアーウォールの指定のポートを開放する。<br>
==== ビルドエラー関連 : Qt Toolのqhelpgeneratorに関するエラー ====
sudo firewall-cmd --permanent --zone=public --add-port="10000-10100"/tcp
<code>cmake</code>コマンドの実行時において、以下に示すようなエラーが出力される場合がある。<br>
sudo firewall-cmd --reload
  -- Configuring submodule 'qttools'
<br>
CMake Error at qttools/src/assistant/qhelpgenerator/CMakeLists.txt:66 (add_dependencies):
==== デバッグエラー : プラットフォームの選択 ====
  Cannot add target-level dependencies to non-existent target
デバッグ実行開始直後に、以下に示すようなエラーが表示される場合がある。<br>
  "qhelpgenerator".
  qt.qpa.plugin: Could not load the Qt platform plugin "eglfs" in "/home/raspi/InstallSoftware/Qt_5_15_13/plugins/platforms" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
   
   
  Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, webgl, xcb.
  The add_dependencies works for top-level logical targets created by the
add_executable, add_library, or add_custom_target commands.  If you want to
add file-level dependencies see the DEPENDS option of the add_custom_target
and add_custom_command commands.
<br>
<br>
これは、GUIソフトウェアの実行時において、デフォルトのプラットフォームを選択していないことに起因する。<br>
この時、以下に示すファイルを編集する。<br>
実行時のコマンドライン引数において、<code>-platform <パラメータ></code>を指定することにより、実行するプラットフォームを選択することができる。<br>
vi /<Qt 6のソースコードがあるディレクトリ>/qttools/src/assistant/qhelpgenerator/CMakeLists.txt
* EGLFSで実行する場合
*: <code>-platform eglfs</code>
* XCBで実行する場合
*: <code>-platform xcb</code>
<br>
<br>
==== libEGL warning: DRI2: failed to authenticate - Raspberry Pi OS Bullseye以降 ====
<syntaxhighlight lang="cmake">
以下のコマンドを実行する。<br>
# /<Qt 6のソースコードがあるディレクトリ>/qttools/src/assistant/qhelpgenerator/CMakeLists.txtファイル 66行目
  sudo raspi-config
   
# 編集前
add_dependencies(qhelpgenerator ${needed_plugins})
# 編集後
#add_dependencies(qhelpgenerator ${needed_plugins})
</syntaxhighlight>
<br>
<br>
次に、Raspberry Pi 3Bの場合は、[Advanced Options] - [A2 GL Driver] - [G2 GL (Full KMS)]を選択する。(KMSが有効になる)<br>
==== ビルドエラー関連 : Qt Toolのqhelpgeneratorに関するエラー ====
Raspberry Pi 4Bの場合は、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択する。(KMSが有効になる)<br>
ビルド時において、以下に示すようなエラーが出力される場合がある。<br>
error: 'google::protobuf::FileDescriptor::Syntax google::protobuf::FileDescriptor::syntax() const'
<br>
<br>
最後に、[Finish]を選択して終了する。<br>
この時、以下に示す<code>cmake</code>コマンドのオプションを付加する。<br>
<br>
  cmake -G Ninja \
もし、このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする。<br>
   
<br>
  # ...
 
==== GLX/DRI2 is not supported/failed to authenticate : Raspbian OS Buster以前 ====
Qtプロジェクトをリモートデバッグする時、この警告が出力される場合がある。<br>
この警告は、他のソフトウェアが独自のMesaライブラリ(libEGLとlibGLESv2)を追加しているために表示される。<br>
<br>
まず、libEGLとlibGLESv2のパスを確認するため、以下のコマンドを実行する。<br>
(おそらく、/opt/vc/lib/libEGL.soと/opt/vc/lib/libGLESv2.soが表示される)<br>
  sudo find / -iname "*egl*"
  sudo find / -iname "*gles*"
<br>
上記で表示されたファイルのシンボリックファイルを、以下のディレクトリに作成する。<br>
  # Raspberry Pi 3B
sudo ln -sf /opt/vc/lib/libbrcmEGL.so    /usr/lib/arm-linux-gnueabihf/libEGL.so
sudo ln -sf /opt/vc/lib/libbrcmEGL.so    /usr/lib/arm-linux-gnueabihf/libEGL.so.1
sudo ln -sf /opt/vc/lib/libbrcmGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so
sudo ln -sf /opt/vc/lib/libbrcmGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
   
   
  # Raspberry Pi 4B
  -DBUILD_qtgrpc
sudo ln -sf /opt/vc/lib/libEGL.so    /usr/lib/arm-linux-gnueabihf/libEGL.so
sudo ln -sf /opt/vc/lib/libEGL.so    /usr/lib/arm-linux-gnueabihf/libEGL.so.1
sudo ln -sf /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so
sudo ln -sf /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
<br>
<u>※注意</u><br>
<u>Debian等では、/usr/lib/x86_64-linux-gnu/mesa-eglディレクトリに存在する場合があるため、それに応じてコマンドを変更する必要がある。</u><br>
<br>
最後に、ライブラリファイルを読み込むため、以下のコマンドを実行する。<br>
sudo ldconfig
<br>
上記のシンボリックリンクの設定を元に戻す場合は、以下のように実行する。<br>
# Raspberry Pi 3B
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
sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2    /usr/lib/arm-linux-gnueabihf/libGLESv2.so
   
   
  # Raspberry Pi 4B
  # ...
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
sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2    /usr/lib/arm-linux-gnueabihf/libGLESv2.so
<br>
==== Note: Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing. ====
Qtのソースコードにおいて、Configureスクリプトを実行する時、この注意が表示される場合がある。<br>
この時、Raspberry Piに対して、以下のライブラリをインストールする。<br>
sudo apt-get install at-spi2-core gir1.2-atspi-2.0 libatspi2.0-dev
<br><br>
<br><br>