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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(文字列「presire220a-22」を「presire2-22」に置換)
 
(同じ利用者による、間の16版が非表示)
11行目: 11行目:
! colspan="3" style="background-color:#44CC99;" | 参考書
! colspan="3" style="background-color:#44CC99;" | 参考書
|- style="text-align: center;"
|- style="text-align: center;"
| style="width: 33%" | <center><html><a href="https://www.amazon.co.jp/Introducing-Qt-Learn-Mobile-Desktop/dp/148427489X?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-2&linkCode=ll1&tag=presire22-22&linkId=3053b20cf3556f8bb315f4f3fd04fdbe&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/61OPCSNS4VL._SL1180_.jpg" ></a></html><br>[https://www.amazon.co.jp/Introducing-Qt-Learn-Mobile-Desktop/dp/148427489X?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-2&linkCode=ll1&tag=presire22-22&linkId=3053b20cf3556f8bb315f4f3fd04fdbe&language=ja_JP&ref_=as_li_ss_tl Introducing Qt 6<br>C++でモバイルとデスクトップ向けのアプリとゲームを作ることを学ぶ]</center>
| style="width: 33%" | <center><html><a href="https://www.amazon.co.jp/Introducing-Qt-Learn-Mobile-Desktop/dp/148427489X?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-2&linkCode=ll1&tag=presire2-22&linkId=3053b20cf3556f8bb315f4f3fd04fdbe&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/61OPCSNS4VL._SL1180_.jpg" ></a></html><br>[https://www.amazon.co.jp/Introducing-Qt-Learn-Mobile-Desktop/dp/148427489X?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-2&linkCode=ll1&tag=presire2-22&linkId=3053b20cf3556f8bb315f4f3fd04fdbe&language=ja_JP&ref_=as_li_ss_tl Introducing Qt 6<br>C++でモバイルとデスクトップ向けのアプリとゲームを作ることを学ぶ]</center>
| style="width: 33%" | <center><html><a href="https://www.amazon.co.jp/Cross-Platform-Development-Modern-applications-interfaces/dp/1800204582?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-8&linkCode=ll1&tag=presire22-22&linkId=07b919e3516320e5ca209c74e325c740&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/61meHwEaCLS._SL1360_.jpg" ></a></html><br>[https://www.amazon.co.jp/Cross-Platform-Development-Modern-applications-interfaces/dp/1800204582?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-8&linkCode=ll1&tag=presire22-22&linkId=07b919e3516320e5ca209c74e325c740&language=ja_JP&ref_=as_li_ss_tl Cross-Platform Development with Qt 6 and Modern C++<br>プラットフォーム依存性を気にすることなく、<br>モダンなグラフィカルユーザーインターフェースを持つアプリケーションを設計・構築する]</center>
| style="width: 33%" | <center><html><a href="https://www.amazon.co.jp/Cross-Platform-Development-Modern-applications-interfaces/dp/1800204582?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-8&linkCode=ll1&tag=presire2-22&linkId=07b919e3516320e5ca209c74e325c740&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/61meHwEaCLS._SL1360_.jpg" ></a></html><br>[https://www.amazon.co.jp/Cross-Platform-Development-Modern-applications-interfaces/dp/1800204582?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611690&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-8&linkCode=ll1&tag=presire2-22&linkId=07b919e3516320e5ca209c74e325c740&language=ja_JP&ref_=as_li_ss_tl Cross-Platform Development with Qt 6 and Modern C++<br>プラットフォーム依存性を気にすることなく、<br>モダンなグラフィカルユーザーインターフェースを持つアプリケーションを設計・構築する]</center>
| style="width: 33%" | <center><html><a href="https://www.amazon.co.jp/Guide-Qt-Beginners/dp/B08XLLDZSG?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611709&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-18&linkCode=ll1&tag=presire22-22&linkId=505bfbc1b686c54000759827f92a0c5d&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/51J026p9D8S._SL1360_.jpg" ></a></html><br>[https://www.amazon.co.jp/Guide-Qt-Beginners/dp/B08XLLDZSG?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611709&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-18&linkCode=ll1&tag=presire22-22&linkId=505bfbc1b686c54000759827f92a0c5d&language=ja_JP&ref_=as_li_ss_tl A Guide to Qt 6<br>Qt 6の初心者向けガイド]</center>
| style="width: 33%" | <center><html><a href="https://www.amazon.co.jp/Guide-Qt-Beginners/dp/B08XLLDZSG?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611709&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-18&linkCode=ll1&tag=presire2-22&linkId=505bfbc1b686c54000759827f92a0c5d&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/51J026p9D8S._SL1360_.jpg" ></a></html><br>[https://www.amazon.co.jp/Guide-Qt-Beginners/dp/B08XLLDZSG?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2XOJ92BZ9LJHM&keywords=Qt6&qid=1683611709&s=english-books&sprefix=qt6%2Cenglish-books%2C156&sr=1-18&linkCode=ll1&tag=presire2-22&linkId=505bfbc1b686c54000759827f92a0c5d&language=ja_JP&ref_=as_li_ss_tl A Guide to Qt 6<br>Qt 6の初心者向けガイド]</center>
|}
|}
</center>
</center>
<br><br>
== Qtモジュール ==
==== Qtビルディングブロック ====
Qt 6は多数のモジュールから構成されている。<br>
一般的に、モジュールは開発者が使用するためのライブラリである。<br>
<br>
いくつかのモジュールは、Qt対応プラットフォームで必須であり、Qt Essentials Modulesと呼ばれている。<br>
その他のモジュールはオプションで、Qt Add-on Modulesと呼ばれている。<br>
開発者の大半はQt Add-on Modulesを使用する機会はあまり無いかもしれないが、一般的な課題に対する貴重な解決策を提供してくれるため、知っておいて損はない。<br>
<br>
==== Qt Essentials Modules ====
Qt Essentials Modulesは、Qtが使用されるプラットフォームには必須である。<br>
Qt / QMLプログラミングを始めるための最小限のQt6モジュールセットである。<br>
<br>
Qt Quick 2を使用して最新のQt6アプリケーションを開発するための基礎を提供している。<br>
モジュールの全リストは、Qtドキュメントモジュールリスト (https://doc.qt.io/qt-6/qtmodules.html#qt-essentials) を参照すること。<br>
<br>
* Qt Core
*: 他のモジュールで使用される非グラフィカルなコアクラス。
* Qt D-BUS
*: LinuxのD-Busプロトコルでプロセス間通信を行うためのクラス。
* Qt GUI
*: GUIコンポーネントのベースクラス。
*: これは、OpenGLを含む。
* Qt Network
*: ネットワークプログラミングをより簡単に、よりポータブルにするためのクラス。
* Qt QML
*: QMLとJavaScript言語用のクラス。
* Qt Quick
*: カスタムユーザーインターフェースを持つ、高度にダイナミックなアプリケーションを構築するための宣言型フレームワーク。
* Qt Quick Controls
*: デスクトップ、組み込み、モバイルデバイス用の高性能なユーザーインターフェイスを作成するための軽量なQMLタイプを提供する。
*: これらの型はシンプルなスタイリングアーキテクチャを採用しており、非常に効率的である。
* Qt Quick Layouts
*: Layoutsは、Qt Quick 2ベースのアイテムをユーザーインターフェイスに配置するためのアイテムである。
* Qt Quick Test
*: QMLアプリケーション用のユニットテストフレームワークで、テストケースはJavaScriptの関数として記述される。
* Qt Test
*: Qtアプリケーションやライブラリを単体テストするためのクラス。
* Qt Widgets
*: C++ウィジェットであり、Qt GUIを拡張するためのクラス。
<br>
==== Qt Add-On Modules ====
Qt Essentials Modulesモジュールの他に、Qtは特定の目的に対応する追加モジュールを提供している。<br>
多くのアドオンモジュールは機能が複雑で後方互換性のために存在するか、特定のプラットフォームにのみ適用可能である。<br>
<br>
利用可能なアドオンモジュールの一覧を以下に示すが、[https://doc.qt.io/qt-6/qtmodules.html Qtの公式ドキュメント]を参照して、全てのアドオンモジュールを理解すること。<br>
* Network
*: Qt Bluetooth / Qt Network Authorization UI Components
*: Qt Quick 3D / Qt Quick Timeline / Qt Charts / Qt Data Visualization / Qt Lottie Animation / Qt Virtual Keyboard
* グラフィックス
*:: Qt 3D / Qt Image Formats / Qt OpenGL / Qt Shader Tools / Qt SVG / Qt Wayland Compositor
* ヘルパー
*: Qt5コア互換API / Qt Concurrent / Qt Help / Qt Print Support / Qt Quick Widgets / Qt SCXML / Qt SQL / Qt State Machine / Qt UI Tools / Qt XML
<br><br>
<br><br>


41行目: 96行目:
   
   
  # SUSE
  # SUSE
  sudo zypper install Mesa-devel Mesa-KHR-devel
  sudo zypper install Mesa-devel Mesa-KHR-devel \
                    vulkan-headers  # Vulkanを使用するプロジェクト、および、Vulkanバックエンドを利用する可能性のある場合
  または
  または
  sudo zypper install Mesa-KHR-devel Mesa-devel Mesa-dri-devel Mesa-libEGL-devel Mesa-libGL-devel Mesa-libGLESv1_CM-devel Mesa-libGLESv2-devel \
  sudo zypper install Mesa-KHR-devel Mesa-devel Mesa-dri-devel Mesa-libEGL-devel Mesa-libGL-devel Mesa-libGLESv1_CM-devel Mesa-libGLESv2-devel   \
                     Mesa-libglapi-devel kbproto-devel libOSMesa-devel libOSMesa8 libX11-devel libXau-devel libdrm-devel libgbm-devel \
                     Mesa-libglapi-devel kbproto-devel libOSMesa-devel libOSMesa8 libX11-devel libXau-devel libdrm-devel libgbm-devel           \
                     libglvnd-devel libxcb-devel libxcb-screensaver0 libxcb-xf86dri0 libxcb-xtest0 libxcb-xvmc0 pthread-stubs-devel xproto-devel
                     libglvnd-devel libxcb-devel libxcb-screensaver0 libxcb-xf86dri0 libxcb-xtest0 libxcb-xvmc0 pthread-stubs-devel xproto-devel \
                    xcb-util-cursor-devel xcb-util-image-devel xcb-util-renderutil-devel                                                        \
                    vulkan-headers  # Vulkanを使用するプロジェクト、あるいは、Vulkanバックエンドを使用する場合
<br>
* Qt 6におけるVulkan headerの必要性
*: Qt 6では、グラフィックスバックエンドの1つとしてVulkanをサポートしている。
*: そのため、Vulkanを使用するプロジェクトやVulkanバックエンドを利用する可能性のある場合には、Vulkan headerが必要になる。
* Vulkan headerの用途
*: Vulkan headerは、以下に示すような目的で使用される。
*: Vulkan APIの定義: 関数プロトタイプ、構造体、定数等の定義を提供する。
*: Vulkanを使用したグラフィックス処理: 3Dレンダリングや計算処理を行う際に必要な関数や構造体を定義する。
*: Qt 6のVulkanバックエンド: Qt 6がVulkanバックエンドを使用する際に必要な情報を提供する。
<br>
Vulkanサポートを無効にするいくつかの方法を、以下に示す。<br>
* Qt変数を使用して、Vulkanサポートを無効にする。
*: set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
*: set(CMAKE_DISABLE_FIND_PACKAGE_Vulkan TRUE)
*: <br>
* find_packageコマンドを使用して、Vulkanサポートを無効にする。
*: 特定のQtライブラリでVulkanが使用されている場合、該当ライブラリのfind_packageコマンドの実行時にOPTIONALフラグを追加する。
*: これにより、Vulkan headerの検索に失敗してもエラーにはならない。
*: find_package(Qt6 COMPONENTS Gui OPTIONAL_COMPONENTS Vulkan)
*: <br>
* 特定のQt機能を無効にして、Vulkanサポートを無効にする。
*: 特定のQt機能がVulkanを必要としている場合、それらの機能を無効にする。
*: set(QT_FEATURE_vulkan OFF CACHE BOOL "" FORCE)
<br>
<br>


166行目: 247行目:
  # cmakeを使用する場合
  # cmakeを使用する場合
  cmake --install ..
  cmake --install ..
<br><br>
== Qtのインストールディレクトリの設定 ==
Qtのインストールディレクトリを環境変数に設定することができる。<br>
この環境変数<code>QT_INSTALL_PREFIX</code>は、QtツールやビルドシステムがQtのインストールディレクトリを探す時に使用される。<br>
<syntaxhighlight lang="sh">
export QT_INSTALL_PREFIX=<Qtのインストールディレクトリ>
</syntaxhighlight>
<br>
Qtのインストールディレクトリを確認する場合は、以下に示すコマンドを実行する。<br>
qtpaths --install-prefix
<br><br>
== Qtのインストールディレクトリの指定 (CMakeコマンド) ==
CMakeを使用する場合、Qtのインストールディレクトリを指定する場合は、CMakeコマンドの<code>CMAKE_PREFIX_PATH</code>オプションを付加する。<br>
cmake -DCMAKE_PREFIX_PATH=<Qtのインストールディレクトリ> ..
<br>
または、CMakeLists.txtに明示的に設定することもできる。<br>
<syntaxhighlight lang="cmake">
set(CMAKE_PREFIX_PATH "<Qtのインストールディレクトリ>")
</syntaxhighlight>
<br><br>
<br><br>


307行目: 409行目:
#*: <br>
#*: <br>
#* ビルドおよびインストール
#* ビルドおよびインストール
#*: <code>cmake .. \</code>
#*: <code>-DCMAKE_C_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> -DCMAKE_CXX_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> \</code>
#*: <code>-DCMAKE_BUILD_TYPE=Release \</code>
#*: <code>-DENABLE_X11=ON \  # X11を使用している場合</code>
#*: <code>-DBUILD_ONLY_PLUGIN=ON \  # プラグインのみをインストールする場合</code>
#*: <code>-DENABLE_QT4=<Qt Creatorのビルドに使用されたQt SDKが4の場合はon、それ以外はoff> \</code>
#*: <code>-DENABLE_QT5=<Qt Creatorのビルドに使用されたQt SDKが5の場合はon、それ以外はoff> \</code>
#*: <code>-DENABLE_QT6=<Qt Creatorのビルドに使用されたQt SDKが6の場合はon、それ以外はoff> \</code>
#*: <code>-DCMAKE_PREFIX_PATH=/<Qt 5のインストールディレクトリ>/<バージョン>/gcc_64  # Qt Creatorのビルドに使用されたQt SDKが5の場合</code>
#*: <code>-DCMAKE_PREFIX_PATH=/<Qt 6のインストールディレクトリ>/<バージョン>/gcc_64  # Qt Creatorのビルドに使用されたQt SDKが6の場合</code>
#*: <br>
#*: # または
#*: <br>
#*: <code>export ENABLE_LIBRARY=$(pkg-config --exists fcitx icu-uc && echo ON || echo OFF) && \</code>
#*: <code>export ENABLE_LIBRARY=$(pkg-config --exists fcitx icu-uc && echo ON || echo OFF) && \</code>
#*: <code>cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \</code>
#*: <code>cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \</code>
323行目: 438行目:
#: <code>cp /<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so \</code>
#: <code>cp /<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so \</code>
#: <code>  /<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts</code>
#: <code>  /<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts</code>
<br><br>
== WebAssemblyの開発 ==
==== Emscripten SDKのインストール ====
Emscripten SDKは、全てのSDKのメンテナンスを実行するために使用される。<br>
SDKをインストールするのは1度だけで、その後はEmscripten SDKが全てのアップデートを行う。<br>
<br>
Emscripten SDKを使用すると、任意のSDKまたはツールをダウンロード、インストール、削除することができ、Githubで開発中の最先端のバージョンを使用することもできる。<br>
<br>
[https://github.com/emscripten-core/emsdk.git Emscripten SDKのGithub]にアクセスして、ファイルをダウンロードする。<br>
ダウンロードしたファイルを解凍する。また、必要であれば、任意のディレクトリに配置する。<br>
tar xf emsdk-<バージョン>.tar.gz
cd emsdk-<バージョン>
<br>
==== Emscripten SDKの使用方法 ====
Emscripten SDKのインストールディレクトリに移動する。<br>
<br>
* 利用可能なツールの最新のレジストリを取得する。
./emsdk update
<br>
* 最新のSDKツールをダウンロードしてインストールする。
./emsdk install latest
<br>
* 最新のSDKを指すようにコンパイラを設定する。<br>
./emsdk activate latest
<br>
==== 環境変数の設定 ====
~/.profileファイル等にEmscripten SDKの環境変数に追加する。<br>
<syntaxhighlight lang="sh">
# ~/.profileファイル等
export PATH="$HOME/InstallSoftware/Emscripten_SDK:$PATH"
export PATH="$HOME/InstallSoftware/Emscripten_SDK/upstream/emscripten:$PATH"
</syntaxhighlight>
<br>
また、emsdk_env.shファイルを実行することにより、現在のシェルに対して環境変数を追加することもできる。<br>
source "/<Emscripten SDKのインストールディレクトリ>/emsdk_env.sh"
<br><br>
<br><br>


366行目: 518行目:
<br><br>
<br><br>


== Raspberry Pi 3B / 4Bのクロスコンパイル ==
== Raspberry Piのクロスコンパイル ==
==== 概要 ====
Raspberry Piでクロスコンパイルを行う場合、[[インストール_-_Qt6_Raspberry_Pi]]のページを参照すること。<br>
Raspberry Piにおいて、一般的なデスクトップソフトウェアのクロスコンパイルおよび組み込み / デバイス作成のユースケースの<br>
<br><br>
クロスコンパイルを行う手順を記載する。<br>
<br>
組み込み / デバイス作成とは、デスクトップソフトウェアをX11の下で実行するためのものではなく、<br>
ソフトウェアがBroadcomドライバを使用して、dispmanx / EGLの上でフルスクリーンで実行するというユースケースのことである。<br>
<br>
<u>EGLを使用する場合、Qtソフトウェアはフルスクリーンでのみ動作する。</u><br>
<u>通常のウインドウで起動する場合は、XCBを使用する必要があるが、XCBはOpenGLやQt Quickは動作しないことに注意すること。</u><br>
<br>
<u>このセクションでは、Raspberry PiにRaspbian Busterをインストールしていることを想定している。</u><br>
<br>
==== Linux PCの設定 ====
Linux PCにおいて、以下の依存関係のライブラリをインストールする。<br>
(Texinfoは、GNU公式Webサイトにアクセスして、ソースコードからインストールすることを推奨する)<br>
sudo zypper install autoconf automake cmake unzip tar git wget pkg-config gperf gcc gcc-c++ \
                    gawk bison openssl flex figlet pigz ncurses-devel ncurses5-devel texinfo
<br>
Raspberry Pi専用のGCC ARMツールチェインをダウンロードする。<br>
https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/<br>
<center>
{| class="wikitable" style="background-color:#fefefe;"
|+ 表. GCC ARMツールチェーンのダウンロード
|-
! style="background-color:#66ccff;" | Raspberry Piの種類
! style="background-color:#66ccff;" | Raspbian Stretch(32-bit)
! style="background-color:#66ccff;" | Raspbian Buster(32-bit)
! style="background-color:#66ccff;" | Raspbian Bullseye(32-bit)
|-
| Raspberry Pi Zero/W/WH<br>Raspberry Pi 1 Model A / B / A+ / B+
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-6.3.0-pi_0-1.tar.gz/download 6.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.4.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.4.0-pi_0-1.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.3.0-pi_0-1.tar.gz/download 10.3]
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-8.3.0-pi_0-1.tar.gz/download 8.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.3.0-pi_0-1.tar.gz/download 9.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.3]
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.3.0-pi_0-1.tar.gz/download 10.3]
|-
| Raspberry Pi 2 Model A / B<br>Raspberry Pi 3 Model A / B
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-6.3.0-pi_2-3.tar.gz/download 6.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.4.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.4.0-pi_2-3.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.3.0-pi_2-3.tar.gz/download 10.3]
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-8.3.0-pi_2-3.tar.gz/download 8.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.4.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.4.0-pi_2-3.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.3.0-pi_2-3.tar.gz/download 10.3]
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.3.0-pi_2-3.tar.gz/download 10.3]
|-
| Raspberry Pi 3 Model A+ / B+<br>Raspberry Pi 4 Model A+ / B+<br>Raspberry Pi Compute 3 / 3lite / 3+
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-6.3.0-pi_3%2B.tar.gz/download 6.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.4.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.4.0-pi_3%2B.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz/download 10.3]
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-8.3.0-pi_3%2B.tar.gz/download 8.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.4.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.4.0-pi_3%2B.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz/download 10.3]
| style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz/download 10.3]
|}
</center>
<br>
GCC ARMツールチェーンにおいて、GCC 8以降が必要なため、Linaro社のGCC ARMツールチェーンは使用できない。<br>
上表にあるGCC ARM 8.3.0ツールチェーンが動作しない場合、以下のURLにあるGCC ARM 8.3.0ツールチェーンを使用する。<br>
https://bugfreeblog.page.link/rasplinuxgcc830<br>
<br>
または、開発者がGCC ARMツールチェーンを作成する。<br>
詳細は、[[インストール - GCC#クロスコンパイラ向けGCCツールチェーンのインストール]]を参照すること。<br>
<br>
GCC ARMツールチェインを解凍して、任意のディレクトリに配置する。<br>
ここでは、~/InstallSoftware/GCC_ARMディレクトリに配置している。<br>
mv cross-gcc-10.2.0-pi_3+.tar.gz GCC_Raspbian_Buster32_10_2_0
cd GCC_Raspbian_Buster32_10_2_0 ~/InstallSoftware/GCC_ARM
<br>
GCC ARMツールチェーンは、システム固有のLTO(Link Time Optimization)フラグを使用して構築されているため、<br>
ソフトウェアをコンパイルする時、これらのツールチェーンを使用することで、Raspberry PiのSoC固有の機能を簡単に利用することができる。<br>
<br>
Raspberry Pi 4は、Broadcom BCM2711 SoC(Cortex-A72 64bit)を採用しており、Raspberry Pi 3B+と同様、ARMv8-aアーキテクチャを採用している。<br>
<br>
<center>
{| class="wikitable" style="background-color:#fefefe;"
|+ 表. Raspberry PiとLTO(Link Time Optimization)フラグの関係
|-
! style="background-color:#66ccff;" | Raspberry Piの種類
! style="background-color:#66ccff;" | LTO(Link Time Optimization)フラグ
|-
| Raspberry Pi Zero/W/WH<br>Raspberry Pi 1 Model A / B / A+ / B+ || -march=armv6 -mfloat-abi=hard -mfpu=vfp
|-
| Raspberry Pi 2 Model A / B<br>Raspberry Pi 3 Model A / B || -march=armv7-a -mfloat-abi=hard -mfpu=neon-vfpv4
|-
| Raspberry Pi 3 Model A+ / B+ (32Bit)<br>Raspberry Pi 4 Model A+ / B+ (32Bit)<br>Raspberry Pi Compute 3 / 3lite / 3+ (32Bit) || -march=armv8-a -mfloat-abi=hard -mfpu=neon-fp-armv8
|-
| Raspberry Pi 3 Model A+ / B+ (64Bit)<br>Raspberry Pi 4 Model A+ / B+ (64Bit)<br>Raspberry Pi Compute 3 / 3lite / 3+ (64Bit) || -march=armv8-a+fp+simd
|}
</center>
<br>
Qt 6を使用してクロスコンパイルする場合、x86 64向けのQtライブラリも必要となる。<br>
そのため、Qtオンラインインストーラからx86 64向けのQtライブラリをインストールする。<br>
<br>
<u>(Qt 6のソースコードからx86 64向けのQt 6ライブラリをビルドおよびインストールしてもよいが、煩雑なため推奨しない)</u><br>
<br>
wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run
<br>
ダウンロードしたファイルに実行権限を付加する。<br>
chmod +x qt-unified-linux-x64-online.run
<br>
次に、GCCおよびmake等の開発に付随するライブラリをインストールする。<br>
# RHEL
sudo dnf groupinstall "Development tools"
# SUSE
sudo zypper install --type pattern devel_basis
<br>
Qtオンラインインストーラを実行する。<br>
./qt-unified-linux-x64-online.run
<br>
Qtのインストール画面に従って、Qt 6をインストールする。<br>
<br>


==== Raspberry Piの設定 ====
== PinePhoneのクロスコンパイル ==
描画処理に時間が掛かる場合、Raspberry PiのVRAMを128[MB]や256[MB]程度に変更する。<br>
PinePhoneでクロスコンパイルを行う場合、[[インストール_-_Qt6_PinePhone]]のページを参照すること。<br>
* VRAMを変更する手順
<br><br>
*: <code>sudo raspi-config</code>
*: 次に、[Performance Options] - [GPU Memory]を選択して、任意の数値を入力する。
*: 最後に、[Finish]を選択して終了する。
<br>
<u>Raspberry Pi 4Bでは、Broadcom EGLはサポートされていないため、Qt 5を使用する場合は、KMSを有効にする必要がある。</u><br>
また、KMSを有効にするには、<u>libgles2-mesa-dev</u>ライブラリと<u>libgbm-dev</u>ライブラリをインストールする必要がある。<br>
* GL(FAKE KMS)を有効にする手順
*: <code>sudo raspi-config</code>
*: 次に、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択することにより、KMSが有効になる。
*: 最後に、[Finish]を選択して終了する。
*: (最小限のビルドを使用する場合、このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする。
<br>
次に、/etc/apt/sources.listファイルのdeb-srcから始まる行のコメントを外す。<br>
sudo vi /etc/apt/sources.list
<br>
# /etc/apt/sources.listファイル
# 編集前
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# 編集後
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
<br>
Raspbian Busterのソフトウェアをアップデートする。<br>
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
<br>
Raspberry Piのファームウェアをアップデートする。<br>
sudo rpi-update
sudo reboot
<br>
Raspberry Piに、Qtライブラリをインストールする。(ここでは簡単にするために、build-depを使用する)<br>
ここで、<code>build-dep</code>コマンドとは、ビルドに必要なパッケージが全てインストールするコマンドである。<br>
ビルド設定によっては、不要なパッケージも含まれている。<br>
# Raspberry Pi 3B
# EGLを使用する場合
sudo apt-get install ccache flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
                      libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                      libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
                      libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
                      libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \
                      libxcb-xinerama0 libxcb-xinerama0-dev gdbserver \
                      mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev \
                      python (QtQuickを使用する場合) \
                      libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
# XCBを使用する場合
sudo apt-get install ccache flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
                      libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                      libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
                      libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
                      libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \
                      libxcb-xinerama0 libxcb-xinerama0-dev gdbserver \
                      libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev \
                      libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev \
                      libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \
                      libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev \
                      libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev at-spi2-core gir1.2-atspi-2.0 libatspi2.0-dev \
                      python (QtQuickを使用する場合) \
                      libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
# Raspberry Pi 4B
# EGLを使用する場合
sudo apt-get install ccache flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
                      libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                      libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
                      libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
                      libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev libgbm-dev \
                      libxcb-xinerama0 libxcb-xinerama0-dev gdbserver
                      python (QtQuickを使用する場合) \
                      libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
# XCBを使用する場合
sudo apt-get install ccache flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
                      libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                      libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
                      libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
                      libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev libgbm-dev \
                      libxcb-xinerama0 libxcb-xinerama0-dev gdbserver \
                      libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev \
                      libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev \
                      libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \
                      libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev \
                      libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev \
                      python        (QtQuickを使用する場合) \
                      libgtk-3-dev  (QtWidget向けにGTKネイティブテーマを使用する場合)
sudo apt-get build-dep libqt5webengine-data (WebEngineを使用する場合)
sudo apt-get build-dep libqt5webkit5        (WebKitを使用する場合)
<br>
マルチメディア関連やBluetooth等を使用する場合、下表に示す任意のパッケージをインストールする。<br>
<center>
{| class="wikitable" style="background-color:#fefefe;"
|+ その他のライブラリ(オプション)
|-
! style="background-color:#00ffff;" | 機能
! style="background-color:#00ffff;" | インストールするライブラリ
! style="background-color:#00ffff;" | configureスクリプトのオプション
|-
| Bluetooth || bluez bluez-tools libbluetooth-dev ||
|-
| 画像 || libjpeg-dev libpng-dev libtiff-dev ||
|-
| コーデック || libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev ||
|-
| マルチメディア || gstreamer1.0-omx libgstreamer1.0-0 libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base<br>gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad<br>libgstreamer-plugins-bad1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-tools<br>gstreamer1.0-alsa gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5<br>libwayland-dev(Wayland開発パッケージは、gstreamerヘッダで必要) ||
|-
| ALSAオーディオ || libasound2-dev ||
|-
| Pulseオーディオ || pulseaudio libpulse-dev ||
|-
| OpenALオーディオ || libopenal-data libsndio7.0 libopenal1 libopenal-dev ||
|-
| データベース || libpq-dev(PostgreSQL)<br>libmariadbclient-dev(MariaDB / MySQL) ||
|-
| プリンタ || libcups2-dev ||
|-
| Wayland || libwayland-dev ||
|-
| X11 || libx11-dev libxcb1-dev  libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev<br>libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev<br>libxcb-glx0-dev  libxcb-keysyms1-dev libxcb-image0-dev  libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev<br>libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev  libxcb-util0-dev<br> libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev ||
|-
| WebEngine || 必須 :<br>flex bison gperf libre2-dev libnss3-dev libdrm-dev<br><br>オプション1 :<br>libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev libevent-dev libprotobuf-dev<br>protobuf-compiler<br><br>オプション2(不安定なため注意すること) :<br>libopus-dev libvpx-dev ||
|-
| アクセシビリティ || libatspi-dev ||
|-
| SCTP || libsctp1 libsctp-dev || -sctp
|-
| Broadcom EGLの代わりに<br>VC4ドライバを使用する場合<br><br><u>※Raspberry Pi 4では必須</u> || libgles2-mesa-dev libgbm-dev || -platform linux-rpi-vc4-g++
|}
</center>
<br>
ビルドしたQtソフトウェアをRasberry Piにデプロイするためのディレクトリを作成する。<br>
加えて、Qtライブラリを配置するディレクトリも作成する。<br>
mkdir -p ~/InstallSoftware/QtApplication ~/InstallSoftware/Qt_5_x_x_EGL ~/InstallSoftware/Qt_5_x_x_XCB
<br>
<u>Raspberry Pi 4Bの場合、以下のシンボリックリンクを作成する。</u><br>
sudo ln -sf -r /usr/include/arm-linux-gnueabihf/asm /usr/include
sudo ln -sf -r /usr/include/arm-linux-gnueabihf/gnu /usr/include
sudo ln -sf -r /usr/include/arm-linux-gnueabihf/bits /usr/include
sudo ln -sf -r /usr/include/arm-linux-gnueabihf/sys/* /usr/include/sys
sudo ln -sf -r /usr/include/arm-linux-gnueabihf/openssl/* /usr/include/openssl
sudo ln -sf /usr/lib/arm-linux-gnueabihf/crtn.o /usr/lib/crtn.o && \
sudo ln -sf /usr/lib/arm-linux-gnueabihf/crt1.o /usr/lib/crt1.o && \
sudo ln -sf /usr/lib/arm-linux-gnueabihf/crti.o /usr/lib/crti.o
<br>
次のセクションにおいて、<code>rsync</code>コマンドを使用してLinux PCとRaspberry Piのファイルを同期する。<br>
<u>しかし、同期するファイルには、スーパユーザ権限が必要なものがある。</u><br>
<br>
そのため、一般ユーザでも全てのファイルを同期できるように、/etc/sudoersファイルに以下の設定を追記する。<br>
以下の設定により、<code>rsync</code>コマンドは、必要に応じてスーパユーザ権限で実行される。<br>
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
<br>


==== システムルートディレクトリの設定 ====
== OpenSSL 3のインストールおよび設定 ==  
Linux PCで、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。<br>
Qt 6において、QNetworkAccessManagerクラス等を使用する場合、以下に示すようなエラーが発生する場合がある。<br>
Raspberry Pi上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。<br>
qt.tlsbackend.ossl: Incompatible version of OpenSSL (built with OpenSSL >= 3.x, runtime version is < 3.x)
<br>
<br>
Linux PC上に開発用ディレクトリを作成する。<br>
これは、Qt 6が古いバージョンのOpenSSLを参照しているために発生する。<br>
また、Raspberry Piのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<br>
これを解決するには、QtオンラインインストーラからOpenSSL 3.x.xのソースコードをダウンロードして、ビルドおよびインストールすることを推奨する。<br>
mkdir -p ~/Program/Qt_Embedded/sysroot ~/Program/Qt_Embedded/sysroot/lib ~/Program/Qt_Embedded/sysroot/opt \
          ~/Program/Qt_Embedded/sysroot/usr ~/Program/Qt_Embedded/sysroot/usr/share
<br>
<br>
<code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br>
まず、Qtオンラインインストーラを起動して、[コンポーネントの選択]画面から[Qt] - [Developer and Designer Tools] - [OpenSSL 3.x.x Toolkit]にチェックを入力する。<br>
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot
[次へ]ボタンを押下して、OpenSSL 3.x.xのソースコードをダウンロードする。<br>
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/include ~/Program/Qt_Embedded/sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/lib ~/Program/Qt_Embedded/sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/share/pkgconfig ~/Program/Qt_Embedded/sysroot/usr/share
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/opt/vc ~/Program/Qt_Embedded/sysroot/opt
<br>
<br>
ダウンロードしたファイルおよびディレクトリのシンボリックリンクを相対的に調整する。<br>
ダウンロードが完了した後、/<Qtのインストールディレクトリ>/Tools/OpenSSLv3/srcディレクトリに移動する。<br>
fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。<br>
  cd /<Qtのインストールディレクトリ>/Tools/OpenSSLv3/src
  wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py ~/Program/Qt_Embedded/sysroot
<br>
<br>
 
OpenSSL 3.x.xをビルドおよびインストールする。<br>
==== Qtライブラリのダウンロード ====
  mkdir build && cd build
===== Raspberry Pi 3B /4B 共通 =====
まず、Qtライブラリのソースコードをダウンロードする。<br>
<br>
以下のコマンドにおいて、<Qtのバージョン>および<Qtのショートバージョン>は、ダウンロードするQtのバージョンに変更する。<br>
例えば、Qt 5.15.2をダウンロードする場合、5.15.2と入力する。Qt 5.15の最新版をダウンロードする場合、5.15と入力する。<br>
* QtBaseをダウンロードする場合
*: <code>cd ~/Program/Qt_Embedded</code>
*: <code>git clone git://code.qt.io/qt/qtbase.git -b <Qtのバージョン></code>
*: または
*: <code>git clone https://github.com/qt/qtbase -b <Qtのバージョン></code>
*: <br>
* Qt Everywhere Opensourceをビルドする場合
*: <code>wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz</code>
*: <code>tar xf qt-everywhere-opensource-src-x.x.x.tar.gz</code>
*: <code>cd qt-everywhere-opensource-src-x.x.x</code>
*: <br>
* Githubからソースコードをダウンロードする場合
*: QtのGithubでは、より多くの新しいアップデートが行われている。
*: <code>git clone https://github.com/qt/qt5.git</code>
*: <code>cd qt5</code>
*: <code>git checkout <Qtのバージョン></code>または<code>git checkout <Qtのショートバージョン></code>
*: <br>
*: <code>init-repository</code>コマンドは、Qtが提供する指定したモジュールのソースコードを取得するためのツールである。
*: super-repoはそれ自体は小さく、他の全てはgit submodulesとして保持されている。
*: 利用可能な全てのモジュールについては[https://doc.qt.io/qt-5/qtmodules.html こちらのWebサイト]、ツールについては<code>init-repository --help</code>コマンドまたは[https://github.com/qt/qt5/blob/dev/init-repository こちらのWebサイト]を参照すること。
*: <code>./init-repository --module-subset=essential</code>
*: <br>
<br>
 
===== Raspberry Pi 4B =====
<u>Raspberry Pi 4Bの場合、以下のように、qmake.confをカスタマイズする必要がある。</u><br>
qmake.confファイルは、ビルド時の設定を定義するものである。<br>
cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs
cp -r linux-arm-gnueabi-g++ linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' ./linux-arm-gnueabihf-g++/qmake.conf
<br>
 
===== Raspberry Pi 3B (XCBを使用する場合) =====
<u>設定不要だと推測される。</u><br>
<br>
以下のように、qmake.confをカスタマイズする必要がある。<br>
  cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
cp -r linux-rasp-pi3-vc4-g++ linux-rasp-pi3-vc4-brcm-g++
vi linux-rasp-pi3-vc4-brcm-g++/qmake.conf
<br>
# linux-rasp-pi3-vc4-brcm-g++/qmake.confファイル
# 編集前
QMAKE_LIBS_EGL        += -lEGL
QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL
# 編集後
QMAKE_LIBS_EGL          += -lbrcmEGL -lbrcmGLESv2
QMAKE_LIBS_OPENGL_ES2  += -lbrcmGLESv2 -lbrcmEGL
<br>
===== Raspberry Pi 3B (EGLを使用する場合)=====
* 方法 1
Raspberry Pi 3Bの場合も、以下のように、qmake.confをカスタマイズする必要がある。<br>
cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
cp -r linux-rasp-pi3-g++ linux-rasp-pi3-brcm-g++
vi linux-rasp-pi3-brcm-g++/qmake.conf
<br>
# qmake.confファイル
# qmake configuration for the Raspberry Pi 3 using the Broadcom graphics stack
# MODIFIED to use the library names that are shipped since 2016
#
# Also setting the linker flags according to the pkg-config files that are shipped with the libraries.
# Remove egl.pc and glesv2.pc from /usr/lib/arm-linux-gnueabihf/pkgconfig/ for these to take effect.
# The reason for using static values instead of supplying the correct pkg-config files is that configure ignores -pthread from there
#
# Including headers from /opt/vc first, but also from mesa version of EGL and GLES, since the /opt/vc headers are from 2009 and don't work with qtwebengine.
# This way you can make mesa headers available by manually removing directories EGL, GLES and GLES2 from /opt/vc/include before building.
include(../common/linux_device_pre.conf)
# Let the linker know about /opt/vc/lib. Required for EGL config.test (at least) because brcmGLESv2 also needs brcmEGL.
QMAKE_RPATHLINKDIR_POST  += $$[QT_SYSROOT]/opt/vc/lib
VC_LIBRARY_PATH          =  $$[QT_SYSROOT]/opt/vc/lib
VC_INCLUDE_PATH          =  $$[QT_SYSROOT]/opt/vc/include
MESA_INCLUDE_PATH        =  $$[QT_SYSROOT]/usr/include
QMAKE_LIBDIR_OPENGL_ES2  =  $${VC_LIBRARY_PATH}
QMAKE_LIBDIR_EGL          =  $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_OPENVG      =  $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_BCM_HOST    =  $$VC_LIBRARY_PATH
QMAKE_INCDIR_EGL          = \
                            $${VC_INCLUDE_PATH} \
                            $${MESA_INCLUDE_PATH} \
                            $${VC_INCLUDE_PATH}/interface/vcos/pthreads \
                            $${VC_INCLUDE_PATH}/interface/vmcs_host/linux
QMAKE_INCDIR_OPENGL_ES2  = $${QMAKE_INCDIR_EGL}
QMAKE_INCDIR_BCM_HOST    = $$VC_INCLUDE_PATH
# recreating pkg-config --libs glesv2
QMAKE_LIBS_OPENGL_ES2    = -L$${VC_LIBRARY_PATH} -lbrcmGLESv2 -lbcm_host -lvcos -lvchiq_arm -pthread
# recreating pkg-config --libs egl
QMAKE_LIBS_EGL            = -L$${VC_LIBRARY_PATH} -lbrcmEGL -lbrcmGLESv2 -lbcm_host -lvchostif -lbcm_host -lvcos -lvchiq_arm -pthread
#recreating pkg-config --libs bcm_host
QMAKE_LIBS_BCM_HOST      = -L$${VC_LIBRARY_PATH} -lbcm_host -lvcos -lvchiq_arm -pthread
QMAKE_CFLAGS              = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
QMAKE_CXXFLAGS            = $$QMAKE_CFLAGS
DISTRO_OPTS              += hard-float
DISTRO_OPTS              += deb-multi-arch
EGLFS_DEVICE_INTEGRATION  = eglfs_brcm
include(../common/linux_arm_device_post.conf)
load(qt_config)
<br>
<u>Raspberry Pi 3Bの場合、上記で作成したqmake.confファイルを使用する必要がある。</u><br>
これは、Qtをビルドする時、pkg-configを使用して、どのライブラリがどの場所にインストールされているかを判断する。<br>
<br>
実際には複数の方法があるが、最良の方法は、上記で作成したqmake.confファイルの静的な定義を使用することである。<br>
そこで、.pcファイルを削除して、configureがMesaのデフォルトを使用せずに、上記の定義を使用する。<br>
cd /<sysrootが存在するディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig
mv egl.pc egl.pc.mesa
mv glesv2.pc glesv2.pc.mesa
<br>
* 方法 2
cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
cp -r linux-rasp-pi2-g++ linux-rasp-pi3-brcm-g++
vi linux-rasp-pi3-brcm-g++/qmake.conf
<br>
# linux-rasp-pi3-ex-g++/qmake.confファイル
# 編集前
QMAKE_LIBS_EGL    = -lEGL -lGLESv2
QMAKE_LIBS_OPENVG = -lEGL -lOpenVG -lGLESv2
# 編集後
QMAKE_LIBS_EGL        = -lbrcmEGL -lbrcmGLESv2
QMAKE_LIBS_OPENGL_ES2 = -lbrcmEGL -lbrcmGLESv2  # 追記
QMAKE_LIBS_OPENVG    = -lbrcmEGL -lbrcmOpenVG -lbrcmGLESv2
<br>
次に、以下のソースコードを編集する。<br>
vi /<Qtのソースコードが存在するディレクトリ>/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
<br>
# qxcbeglwindow.cppファイル  96行目あたり
# 編集前
m_surface = eglCreateWindowSurface(m_glIntegration->eglDisplay(), m_config, m_window, 0);
# 編集後
m_surface = eglCreateWindowSurface(m_glIntegration->eglDisplay(), m_config, (void*)m_window, 0);
<br>
SysRootディレクトリから、nss.pcファイルがあるディレクトリに対して、パスを追加する。<br>
find <SysRootディレクトリ> -type f -name nss.pc
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
export PKG_CONFIG_PATH="<nss.pcファイルが存在するディレクトリ>:$PKG_CONFIG_PATH"
<br>
* 方法 3
cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
cp -r linux-rasp-pi3-g++ linux-rasp-pi3-brcm-g++
vi linux-rasp-pi3-brcm-g++/qmake.conf
<br>
include(../common/linux_device_pre.conf)
   
   
  QMAKE_LFLAGS          += -Wl,-rpath-link,$$[QT_SYSROOT]/opt/vc/lib
  ../Configure --prefix=<OpenSSL3のインストールディレクトリ>
QMAKE_LFLAGS          += -Wl,-rpath-link,$$[QT_SYSROOT]/home/pi/<Qtライブラリをデプロイするディレクトリ>/lib
QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib
QMAKE_LIBDIR_EGL        = $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_OPENVG    = $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_INCDIR_EGL        = $$[QT_SYSROOT]/opt/vc/include \
                          $$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads \
                          $$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
QMAKE_INCDIR_OPENVG    = $${QMAKE_INCDIR_EGL}
QMAKE_LIBS_EGL          = -lEGL -lGLESv2
QMAKE_LIBS_OPENVG      = -lEGL -lOpenVG -lGLESv2
QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
DISTRO_OPTS            += hard-float
DISTRO_OPTS            += deb-multi-arch
# Preferred eglfs backend
EGLFS_DEVICE_INTEGRATION= eglfs_brcm
include(../common/linux_arm_device_post.conf)
load(qt_config)
<br>
* 方法 4
<u>この方法は、qt-everywhere-src-5.x.xファイルのみで実行できる。</u><br>
<br>
Githubから、mkspecsを自動編集するツールをダウンロードする。<br>
このツールでは、libbrcm*.soライブラリ名を参照するように設定されている。<br>
git clone https://github.com/oniongarlic/qt-raspberrypi-configuration.git
<br>
ツールをQtのソースコードがあるディレクトリにインストールする。<br>
cd ./qt-raspberrypi-configuration
make install DESTDIR=<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-5.x.x
<br>
 
==== Qtライブラリのビルド ====
ここでは、Qtソフトウェアは~/Program/Qt_Embedded/QtSoftwareディレクトリ、qmake等のホストツールは~/Program/Qt_Embedded/Hostディレクトリ、<br>
Qtライブラリは~/Program/Qt_Embedded/Target_EGLディレクトリまたは~/Program/Qt_Embedded/Target_XCBディレクトリとしている。<br>
<br>
<Raspberry Piのバージョン>は、Raspberry Piの種類に変更する。<br>
<u>ただし、上記のセクションでmkspecを変更した場合は、そのディレクトリ名に合わせること。</u><br>
* <Raspberry Piのバージョン>
** Raspberry Pi 1
**: <code>linux-rasp-pi-g++</code>
** Raspberry Pi 2
**: <code>linux-rasp-pi2-g++</code>
** Reaspberry Pi 3
*** <code>linux-rasp-pi3-g++</code>(EGL)
*** <code>linux-rasp-pi3-vc4-g++</code>(XCB)
*** 上記のセクションで作成した<code>linux-rasp-pi3-brcm-g++</code>(EGL)
*** その他
** Raspberry Pi 4
**: <code>linux-rasp-pi4-v3d-g++</code>
<br>
<u>Raspbian OS 64bitを使用している場合は、<code>-device-option</code>オプションを以下のように記述する。</u><br>
<code>-device-option CROSS_COMPILE=/<GCC ARMツールチェインのインストールディレクトリ>/bin/aarch64-linux-gnueabihf-</code><br>
また、Qt 5.8以降は、<code>-no-use-gold-linker</code>オプションを追加する必要がある。<br>
<br>
* QtBase / Qt Everywhere Opensource / GithubからダウンロードしたQt
*: ビルドディレクトリの作成
*: <code>mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build</code>
*: <br>
*: <u>GCC ARM 8.3.0以降を使用する場合は、以下の設定をターミナルで実行する。</u>
*: <code>CROSS_PI_PATH=/<GCC ARMツールチェインのインストールディレクトリ></code>
*: <code>CROSS_COMPILE=$CROSS_PI_PATH/bin/arm-linux-gnueabihf-</code>
*: <br>
*: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/lib:$LD_LIBRARY_PATH</code>
*: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/lib:$LD_LIBRARY_PATH</code>
*: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib:$LD_LIBRARY_PATH</code>
*: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib:$LD_LIBRARY_PATH</code>
*: <br>
*: <code>LDFLAGS="-L$CROSS_PI_PATH/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib/"</code>
*: <br>
*: Configureスクリプトの実行
*: <u># Raspberry Pi 3B</u>
*: <code>PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \</code>
*: <code>PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \</code>
*: <code>../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \</code>
*: <code>-opengl es2 -eglfs \</code>           <span style="color:#C00000"><u>EGLを使用する場合</u></span>
*: <code>-opengl es2 \</code>                <span style="color:#C00000"><u>XCBを使用する場合</u></span>
*: <code>-device <Raspberry Piのバージョン> \</code>
*: <code>-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \</code>
*: <code>-opensource -confirm-license -v \</code>
*: <code>-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \</code>
*: <code>-ltcg -iconv \</code>        # 必要な場合は指定する
*: <code>-qpa eglfs \</code>               <span style="color:#C00000"><u>EGLを使用する場合</u></span>
*: <code>-qpa xcb \</code>                <span style="color:#C00000"><u>XCBを使用する場合</u></span>
*: <code>-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \</code>
*: <code>-sysroot /<SysRootがあるディレクトリ>/sysroot \</code>
*: <code>-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \</code>
*: <code>-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \</code>
*: <code>-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host</code>
*: <code>-no-gcc-sysroot</code>             <span style="color:#C00000"><u>GCC ARM 8.3.0以降を使用する場合</u></span>
*: <br>
*: <u># Raspberry Pi 4B</u>
*: <code>PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \</code>
*: <code>PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \</code>
*: <code>../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \</code>
*: <code>-opengl es2 -eglfs \</code>           <span style="color:#C00000"><u>EGLを使用する場合</u></span>
*: <code>-opengl es2 \</code>               <span style="color:#C00000"><u>XCBを使用する場合</u></span>
*: <code>-device <Raspberry Piのバージョン> \</code>
*: <code>-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \</code>
*: <code>-opensource -confirm-license -v \</code>
*: <code>-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \</code>
*: <code>-ltcg -iconv -fontconfig -ccache \</code>        # 必要な場合は指定する
*: <code>-qpa eglfs \</code>               <span style="color:#C00000"><u>EGLを使用する場合</u></span>
*: <code>-qpa xcb \</code>                <span style="color:#C00000"><u>XCBを使用する場合</u></span>
*: <code>-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \</code>
*: <code>-sysroot /<SysRootがあるディレクトリ>/sysroot \</code>
*: <code>-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \</code>
*: <code>-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \</code>
*: <code>-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host</code>
*: <code>-no-gcc-sysroot</code>             <span style="color:#C00000"><u>GCC ARM 8.3.0以降を使用する場合</u></span>
*: <code>-I/<SysRootがあるディレクトリ>/sysroot/usr/include/arm-linux-gnueabihf \</code> # GCC ARM 8.3.0以降を使用する場合に必要(不要の可能性があるため要調査)
*: <code>-L/<SysRootがあるディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf \</code>   # GCC ARM 8.3.0以降を使用する場合に必要(不要の可能性があるため要調査)
*: <br>
*: ビルドおよびインストール
*: <code>gmake -j $(nproc)</code>
*: <code>gmake install</code>
*: <br>
*: <u>もし、Linux PCで使用するQtライブラリを配置するディレクトリにrccファイルが存在しない場合は、rccファイルをQtライブラリのbinディレクトリにコピーする。</u><br>
*: (Qtライブラリを使用するソフトウェアをビルドする時、rccファイルが必要である)<br>
*: <code>cp /<Qtのソースコードがあるディレクトリ>/qtbase/bin/rcc /<Linux PCで使用するQtライブラリを配置するディレクトリ>/bin</code>
<br>
必要ならば、以下のようなシェルスクリプトを作成すると便利である。<br>
<syntaxhighlight lang="bash">
#!/usr/bin/env sh
CROSS_PI_PATH=/<GCC ARM 8.3.0以降のインストールディレクトリ>
CROSS_COMPILE=$CROSS_PI_PATH/bin/arm-linux-gnueabihf-
LD_LIBRARY_PATH=$CROSS_PI_PATH/lib:$LD_LIBRARY_PATH
LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/lib:$LD_LIBRARY_PATH
LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib:$LD_LIBRARY_PATH
LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib:$LD_LIBRARY_PATH
LDFLAGS="-L$CROSS_PI_PATH/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib/"
PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \
PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/sysroot/usr/share/pkgconfig \
../Qt5_Src/configure -release \
-opengl es2 -eglfs \                    # EGLを使用する場合
-opengl es2 \                          # XCBを使用する場合
-device <Raspberry Piのバージョン> -device-option CROSS_COMPILE=${CROSS_COMPILE} \
-sysroot /<SysRootがあるディレクトリ>/sysroot \
-opensource -confirm-license -v \
-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all \
-ccache -ltcg -iconv -sctp -freetype \  # 必要な場合は指定する
-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \
-qpa eglfs \                            # EGLを使用する場合
-qpa xcb \                              # XCBを使用する場合
-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \
-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \
-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host \
-no-gcc-sysroot                        # GCC ARM 8.3.0以降を使用する場合
</syntaxhighlight>
<br>
 
==== Qtライブラリのインストール ====
ビルドしたQtライブラリを、Raspberry Piにデプロイする。<br>
~/Program/Qt_Embedded/Qt5ディレクトリに存在する全てのファイルを、Raspberry Piの/usr/localディレクトリに同期させる。<br>
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" \
~/Program/Qt_Embedded/Target <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x
<br>
<u>※注意</u><br>
<u>Raspberry PiにアップロードしたQtライブラリの所有者がrootになっている場合があるため、</u><br>
<u>以下のコマンドを実行して、所有者をローカルユーザに変更する必要がある。</u><br>
sudo chown -R <Raspberry Piのユーザ名>:<Raspberry Piのグループ名> ~/InstallSoftware/Qt_5_x_x
<br>
Raspberry PiのリンカがQtライブラリを読み込むようにするため、以下のコマンドを実行する。<br>
<u>/etc/ld.so.conf.dディレクトリに配置する場合、Raspberry Pi 2B / 3Bでは、ファイル名の先頭に"00"を付加すること。</u><br>
# .profileファイルに設定する場合
export LD_LIBRARY_PATH="/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x/lib:$LD_LIBRARY_PATH"
# /etc/ld.so.conf.dディレクトリに配置する場合
echo /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x/lib | sudo tee /etc/ld.so.conf.d/00-Qt_5_x_x.conf
sudo ldconfig
<br>
これにより、Raspberry PiでQtライブラリが使用できる。<br>
<br>
 
==== Qtソフトウェアの動作確認 ====
Qtソフトウェアをビルドして、動作確認を行う。<br>
<br>
===== XCBを使用する場合 =====
Raspberry PiのEGL / GLESライブラリを修正する。<br>
<br>
Raspberry Piの/usr/lib/arm-linux-gnueabihfディレクトリには、MesaのlibEGLとlibGLESv2が存在する。<br>
XCBを使用したQtソフトウェアは、/opt/vc/libディレクトリにあるlibbrcmEGLとlibbrcmGLESv2ではなく、libEGLとlibGLESv2が自動的に選択される。<br>
<u>しかし、MesaのlibEGLとlibGLESv2は、OpenGLの描画処理と関わりがあるEGLでは、ほとんど役に立たない。(XCBは、OpenGLの描画処理とほぼ関係無い)</u><br>
<br>
そのため、libbrcmEGLとlibbrcmGLESv2を、libEGLとlibGLESv2に入れ替える。<br>
具体的には、libbrcmEGLとlibbrcmGLESv2のシンボリックリンクを/usr/lib/arm-linux-gnueabihfディレクトリに作成する。<br>
(必ず、元のファイルはバックアップすること)<br>
sudo ln -sf /opt/vc/lib/libbrcmEGL.so /opt/vc/lib/libEGL.so
sudo ln -sf /opt/vc/libbrcmGLESv2.so /opt/vc/libGLESv2.so
sudo ln -sf /opt/vc/lib/libEGL.so                    /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 /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
<br>
上記で設定したライブラリを読み込むため、以下のコマンドを実行する。<br>
sudo ldconfig
<br>
上記のシンボリックリンクの設定を元に戻す場合は、以下のように実行する。<br>
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
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>
さらに、Raspberry Piの~/.profileファイルまたは~/.bashrcファイルに、以下の設定を追記する。<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>
 
===== EGL / XCB 共通 =====
Qtソフトウェアのサンプルをダウンロードする。<br>
この時、<Qtソフトウェアのサンプル>と<Qtのバージョン>は合致するものを指定すること。<br>
git clone git://code.qt.io/qt/<Qtソフトウェアのサンプル>.git -b <Qtのバージョン>
cd <Qtソフトウェアのサンプル>
~/Program/Qt_Embedded/Qt5/bin/qmake
  make -j $(nproc)
  make -j $(nproc)
  make install DESTDIR=<Qtソフトウェアを配置するディレクトリ>
  make install
<br>
<br>
最後に、QtソフトウェアをRaspberry Piにデプロイする。<br>
OpenSSL 3.x.xをQt Creatorで使用するため、環境変数を設定する。<br>
  rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" /<Qtソフトウェアを配置するディレクトリ> \
# Qt Creatorを起動する。
  <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/<Qtソフトウェアをインストールするディレクトリ>
# Qt Creatorの画面左にある[プロジェクト]を選択する。
# [ビルドと実行]から、該当するキットの[実行]を選択する。
# [実行環境]セクションで、[環境]セクションから[この実行構成用の基本環境:]プルダウンから[ビルド時の環境変数]を選択して、以下に示す環境変数を追加する。
  PATH=+/<OpenSSL3のインストールディレクトリ>/bin
LD_LIBRARY_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64
  PKG_CONFIG_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64/pkgconfig
OPENSSL_CONF=/<OpenSSL3のインストールディレクトリ>/ssl/openssl.cnf
<br>
<br>
 
[[ファイル:Install Qt 2.png|フレームなし|中央]]
==== エラー関連 ====
===== libEGL warning: DRI2: failed to authenticate =====
以下のコマンドを実行する。<br>
sudo raspi-config
<br>
<br>
次に、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択する。(KMSが有効になる)<br>
または、以下に示す方法でもOpenSSL 3.x.xを設定することができる。<br>
最後に、[Finish]を選択して終了する。<br>
# [ビルドと実行]から、該当するキットの[ビルド]を選択する。
(このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする)<br>
# [CMake]セクションの[Base environment the CMake configure step:]プルダウンから[System Environment]を選択して、以下に示す環境変数を追加する。
PATH=+/<OpenSSL3のインストールディレクトリ>/bin
LD_LIBRARY_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64
PKG_CONFIG_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64/pkgconfig
OPENSSL_CONF=/<OpenSSL3のインストールディレクトリ>/ssl/openssl.cnf
<br>
<br>
===== warning : GLX/DRI2 is not supported/failed to authenticate =====
[[ファイル:Install_Qt_3.png|フレームなし|中央]]
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
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>
==== QtWebEngineのビルドおよびインストール ====
上記のセクションでは、QtWebEngineモジュールを無効にしている。<br>
これは、QtWebEngineのビルドには多くの時間とディスクスペースが必要なためである。<br>
<br>
勿論、QtWebEngineとQtを同時にビルドすることも可能であるが、ビルドに失敗する場合はビルド全体が失敗したことになるため、<br>
まず、ベースとなるQt 5を個別にビルドした後、QtWebEngineを個別にビルドすることを推奨する。<br>
<br>
===== 依存関係のライブラリのインストール =====
<center>
{| class="wikitable" style="background-color:#fefefe;"
|+ 必須およびオプションのライブラリ
|-
! style="background-color:#00ffff;" | 
! style="background-color:#00ffff;" | ライブラリ名
! style="background-color:#00ffff;" | 備考
|-
| 必須 || flex bison gperf libre2-dev libnss3-dev ||
|-
| X11対応に必要 || libdrm-dev libxdamage-dev || XCB / X11を使用する場合、<br>これらのライブラリが必要である。
|-
| オプション || libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev<br>libevent-dev libprotobuf-dev protobuf-compiler libwebp-dev libpoppler-cpp-dev || 追加サポートとして便利である。
|-
| (オプション)<br>システム構築ツール || ninja-build re2c || ninjaビルドツールを使用することで、<br>ビルドを高速化できることがある。
|-
| 使用できないライブラリ || libopus-dev libvpx-dev || OpusとVPXメディアのサポートが追加されるが、<br>Raspbian busterで利用するには古すぎる。
|}
</center>
<br>
===== QtWebEngineのダウンロード =====
Qtの公式Webサイトから、QtWebEngineをダウンロードする。<br>
https://download.qt.io/official_releases/qt/x.x/x.x.x/submodules/qtwebengine-everywhere-src-x.x.x.tar.xz<br>
<br>
===== QtWebEngineのビルド設定 =====
ダウンロードしたQtWebEngineのビルド設定を編集する。<br>
<br>
QtWebEngineでのジャンボビルドを無効化する。<br>
標準のジャンボビルドシステムでは、コンパイル時に不明のエラーが出力されるため、無効にする。<br>
sed -i -e 's|use_jumbo_build=true|use_jumbo_build=false|' /<QtWebEngineのソースコードがあるディレクトリ>/src/buildtools/config/common.pri
<br>
===== QtWebEngineのビルドとインストール =====
次に、QtWebEngineのConfigureスクリプトを実行する。<br>
/opt/Qt/5.15.2/bin/qmake /<QtWebEngineのソースコードがあるディレクトリ> -- -no-webengine-geolocation
<br>
正常に終了する時、以下のようなサマリが表示される。<br>
Qt WebEngine:
  Embedded build ......................... no
  Full debug information ................. no
  Pepper Plugins ......................... yes
  Printing and PDF ....................... yes
  Proprietary Codecs ..................... no
  Spellchecker ........................... yes
  Native Spellchecker .................... no
  WebRTC ................................. yes
  Use System Ninja ....................... yes
  Geolocation ............................ no
  WebChannel support ..................... yes
  Use v8 snapshot ........................ yes
  Kerberos Authentication ................ no
  Support qpa-xcb ........................ yes
  Use ALSA ............................... yes
  Use PulseAudio ......................... no
  Optional system libraries used:
    re2 .................................. yes
    icu .................................. no
    libwebp, libwebpmux and libwebpdemux . no
    opus ................................. no
    ffmpeg ............................... no
    libvpx ............................... no
    snappy ............................... no
    glib ................................. yes
    zlib ................................. yes
    minizip .............................. yes
    libevent ............................. yes
    jsoncpp .............................. yes
    protobuf ............................. yes
    libxml2 and libxslt .................. yes
    lcms2 ................................ yes
    png .................................. yes
    JPEG ................................. yes
    harfbuzz ............................. no
    freetype ............................. yes
  Required system libraries:
    fontconfig ........................... yes
    dbus ................................. yes
    nss .................................. yes
    khr .................................. yes
    glibc ................................ yes
  Required system libraries for qpa-xcb:
    x11 .................................. yes
    libdrm ............................... yes
    xcomposite ........................... yes
    xcursor .............................. yes
    xi ................................... yes
    xtst ................................. yes
<br>
最後に、QtWebEngineをビルドする。<br>
もし、ビルドするPCのメモリが8[GB]以下の場合、NINJAJOBSを4以下にして、Ninjaの並列ビルドの量を制限する必要がある。<br>
make -j $(nproc)
または
make -j 4 NINJAJOBS=-j4
make install
<br>
===== QtWebEngineのビルド時に発生する問題 =====
下表は、QtWebEngineで見つかった問題とビルドの問題を集めたものである。<br>
<center>
{| class="wikitable" style="background-color:#fefefe;"
|+ ビルド時の問題点と解決策
|-
! style="background-color:#00ffff;" | QtWebEngineのバージョン
! style="background-color:#00ffff;" | 問題
! style="background-color:#00ffff;" | 解決策
|-
| 5.15.2 || Internal Compiler Error, gcc 8.30<br><br>internal compiler error: in convert_move, at expr.c:218<br> static void exec_ops(const Op* ops, const void** args, || [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96206 GCC Bugzilla bug report]<br><br>Build for ARMv7<br>Patch the source to disable optimization
|-
| 5.15.2 || fatal error: xcb/dri3.h: No such file or directory || 以下のライブラリをインストールする。<br><code>sudo apt-get install libxcb-dri3-dev</code>
|-
| 5.15.2 || Broadcom EGLを使用するQtのビルドに失敗する。<br><br>qtwebengine-everywhere-src-x.x.x/src/3rdparty/chromium/ui/gl/gl_bindings_autogen_egl.h:201:5:<br>error: ‘EGLDeviceEXT’ has not been declared || Broadcom EGLの代わりに、<br>VC4 / KMSを使用してビルドする。
|}
</center>
<br><br>
<br><br>


== PinePhone ==
== メニューバーの表示 / 非表示 ==
==== 概要 ====
メニューバーの表示 / 非表示を切り替えて、画面上のスペースを節約することができる。<br>
Allwinner A64 SoC(sun50iw1)は、Cortex-A53 ARM CPU(クアッドコア)とARM社のMali400 MP2 GPUを搭載している。<br>
<br>
A64は、基本的にAllwinner H3のCortex-A7コアをCortex-A53コアに置き換えたものである。<br>
メモリマップ、クロック、割り込みのほとんどを共有しており、IPブロックも同じものを使用している。<br>
<br>
H3とA64の違いは以下の通りである。<br>
<br>
H3は、USBホストコントローラを3つ搭載しているのに対して、A64は1つしか搭載していない。<br>
どちらのSoCもUSB-OTGコントローラを追加しているが、これは通常のホストコントローラとしても使用することを想定している。<br>
<br>
H3のDRAMコントローラは最大2[GB]のRAMをサポートしており、A64は最大3[GB]をサポートしている。<br>
64bitチップでありながら、物理的には完全に3bitのSoCとなっている。<br>
<br>
H3は5個のUARTをサポートしており、A64は6個のUARTをサポートしている。<br>
MMCコントローラーが更新され、より高速な転送モードをサポートしている。<br>
MMCのクロックは途中で変更され、現在はMMCコントローラ自身が出力とサンプルフェーズをサポートしている。<br>
<br>
H3はSRAM A1がアドレス0にマッピングされており、BROMは0xffff0000にある。<br>
A64はBROMがアドレス0にマッピングされており、SRAM A1はそのすぐ後ろの0x10000(64KB)にマッピングされている。<br>
<br>
pinmuxの構成はまだ多少似ているが、互換性のない程度に異なる。<br>
顕著な例は(デバッグ用の)UART0で、H3ではPortAにあるが、A64ではPortBにある。<br>
H3にはPortBが無い。<br>
<br>
==== Linux PCの設定 ====
Linux PCにおいて、以下の依存関係のライブラリをインストールする。<br>
(Texinfoは、GNU公式Webサイトにアクセスして、ソースコードからインストールすることを推奨する)<br>
sudo zypper install autoconf automake cmake unzip tar git wget pkg-config gperf gcc gcc-c++ \
                    gawk bison openssl flex figlet pigz ncurses-devel ncurses5-devel texinfo
                    libicu-devel libopus-devel openjpeg2-devel pciutils-devel libpciaccess-devel libxshmfence-devel python3-html5lib \  # QtWebEngineをインストールする場合
                    libvpx-devel                                                                                                        # QtWebEngineをインストールする場合
                    ffmpeg-4-libavcodec-devel ffmpeg-4-libavdevice-devel ffmpeg-4-libavfilter-devel ffmpeg-4-libavformat-devel      \  # QtWebEngineをインストールする場合 (デフォルトパッケージ)
                    ffmpeg-4-libavresample-devel ffmpeg-4-libavutil-devel ffmpeg-4-libpostproc-devel ffmpeg-4-libswresample-devel    \  # QtWebEngineをインストールする場合 (デフォルトパッケージ)
                    ffmpeg-4-libswscale-devel ffmpeg-4-private-devel                                                                    # QtWebEngineをインストールする場合 (デフォルトパッケージ)
                    ffmpeg-6-libavcodec-devel ffmpeg-6-libavdevice-devel ffmpeg-6-libavfilter-devel ffmpeg-6-libavformat-devel      \  # QtWebEngineをインストールする場合 (Packmanパッケージ)
                    ffmpeg-6-libavresample-devel ffmpeg-6-libavutil-devel ffmpeg-6-libpostproc-devel ffmpeg-6-libswresample-devel    \  # QtWebEngineをインストールする場合 (Packmanパッケージ)
                    ffmpeg-6-libswscale-devel ffmpeg-6-private-devel                                                                    # QtWebEngineをインストールする場合 (Packmanパッケージ)
<br>
<u>GCC ARMツールチェーンにおいて、GCC 8以降が必要である</u><br>
Linaroは、アップストリームビルドのスナップショットをユーザに提供するGNUツールチェーン・インテグレーションビルドを毎月提供している。<Br>
これらのビルドにより、開発者はビルド済みバイナリの機能をアップストリームですぐにテストすることができる。<br>
<br>
Linero社が提供しているGCC ARMツールチェーンをダウンロードする。<br>
<br>
<u>※注意</u><br>
<u>クロスコンパイラのlibstdc++.so.6ファイルにおいて、PinePhone OSのlibstdc++.so.6ファイルのバージョンと同等または古いものを使用する必要がある。</u><br>
<u>例えば、Mobian 12.0のlibstdc++.so.6ファイルはGLIBCXX_3.4.30までであるため、GCC 12.2ツールチェーン、または、それ以前のものを使用する。</u><br>
<br>
GCCツールチェーン群 : https://snapshots.linaro.org/gnu-toolchain/
tar xf gcc-linaro-<バージョン>-x86_64_aarch64-linux-gnu.tar.xz
<br>
また、開発者がGCC ARMツールチェーンを作成する場合、[[インストール - GCC#クロスコンパイラ向けGCCツールチェーンのインストール]]を参照すること。<br>
<br>
Qt 6を使用してクロスコンパイルする場合、x86 64向けのQtライブラリも必要となる。<br>
そのため、Qtオンラインインストーラからx86 64向けのQtライブラリをインストールする。<br>
<br>
<u>(Qt 6のソースコードからx86 64向けのQt 6ライブラリをビルドおよびインストールしてもよいが、煩雑なため推奨しない)</u><br>
<br>
wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run
<br>
ダウンロードしたファイルに実行権限を付加する。<br>
chmod +x qt-unified-linux-x64-online.run
<br>
次に、GCCおよびmake等の開発に付随するライブラリをインストールする。<br>
# RHEL
sudo dnf groupinstall "Development tools"
# SUSE
sudo zypper install --type pattern devel_basis
<br>
Qtオンラインインストーラを実行する。<br>
./qt-unified-linux-x64-online.run
<br>
Qtのインストール画面に従って、Qt 6をインストールする。<br>
<br>
 
==== PinePhoneの設定 ====
Qtのクロスコンパイルの手順において、SSH接続ができることが必須のため、SSH Serverをインストールおよび設定する。<br>
# Mobian
sudo apt-get install openssh-server
# Manjaro
sudo pacman -S openssh
<br>
<br>
必要に応じて、公開鍵認証を行う場合は、[[設定 - SSHの公開鍵認証|設定 - SSHの公開鍵認証]]を参照すること。<br>
[表示]メインメニュー - [メニューバーを表示]チェックボックスの選択を解除する。<br>
<br>
メニューバーを再度表示するには、[Ctrl] + [Alt] + [M]キーを同時押下する。<br>
SSH Serverの自動起動設定および開始する。<br>
sudo systemctl enable ssh
sudo systemctl restart ssh
<br>
MobianまたはManjaroをアップデートする。<br>
# Mobian
sudo apt-get update
sudo apt-get dist-upgrade
sudo systemctl reboot
# Manajro
sudo pacman -Syyu
sudo systemctl reboot
<br>
不要なライブラリをアンインストールする。<br>
<u>Qt6 D-Busがインストールされている場合、Qt SharedToolsライブラリのクロスコンパイルがエラーになることに注意する。</u>
sudo pacman -R --needed qt6-base
<br>
Qtライブラリをクロスコンパイルするために必要なライブラリをインストールする。<br>
Qtライブラリのビルド設定によっては、不要なパッケージも含まれている。<br>
# Mobian
sudo apt-get install  unzip ccache pkgconf-bin pkg-config libpkgconf3 pkgconf build-essential make cmake gcc gfortran gdb gdbserver python3 libgtk-3-dev \
                      libc6 libc6-dev linux-libc-dev glibc-source libc-dev-bin libc-devtools libglib2.0-0 libglib2.0-dev libglib2.0-dev-bin \
                      libgmp-dev libmpc-dev libmpfr-dev libisl-dev gconf2 gconf2-common libgconf2-dev \
                      libdbus-1-3 libdbus-1-dev libdbus-c++-bin libdbus-c++-dev libdbus-cpp-dev libdbus-glib-1-dev libdbus-glib-1-dev-bin libsctp1 libsctp-dev \
                      libatspi2.0-0 libatspi2.0-dev at-spi2-core gir1.2-atspi-2.0 libatk1.0-dev libatkmm-1.6-dev libatk-bridge2.0-dev \
                      libzstd1 libzstd-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev libicu-dev icu-devtools \
                      libblkid1 libblkid-dev libffi8 libffi-dev libmount1 libmount-dev libudev1 libudev-dev libhd21 libhd-dev libtsm-dev \
                      pcre2-utils libpcre2-32-0 libpcre2-dev libselinux1 libselinux1-dev libsepol2 libsepol-dev libwacom9 libwacom-dev \
                      libproxy-dev liblttng-ust1 liblttng-ust-common1 liblttng-ust-dev libb2-1 libb2-dev libsdl2-dev libsystemd-dev \
                      libfontconfig1 libfontconfig-dev libfontconfig1-dev libjpeg-dev libjpeg62-turbo libjpeg62-turbo-dev libjpeg-dev libasound2 libasound2-dev \
                      sqlite3 libsqlite3-0 libsqlite3-dev libssl3 libssl-dev libnss3 libnss3-dev libxslt1.1 libxslt1-dev libpugixml1v5 libpugixml-dev \
                      libbz2-dev libatkmm-1.6-dev libsrtp2-dev libsnappy-dev re2c libpoppler-dev libmd4c-dev libmd4c-html0-dev liblitehtml0 liblitehtml-dev \
                      libxkbcommon-dev libxcb-xinerama0 libxcb-xinerama0-dev libglut3.12 libglut-dev \
                      libwayland-bin libwayland-dev libwayland-egl1 libwayland-egl++1 libwayland-egl1-mesa libwayland-egl-backend-dev \
                      libwayland-client++1 libwayland-client-extra++1 libwayland-cursor++1 wayland-scanner++ wayland-protocols waylandpp-dev \
                      libosmesa6-dev mesa-common-dev libopengl-dev libgl-dev libglm-dev libgl1-mesa-dev libgle3-dev libgles-dev libgles2-mesa-dev libegl-dev libegl1-mesa-dev \
                      libgegl-dev libglu1-mesa libglu1-mesa-dev libglw1-mesa-dev libglfw3-dev libglew-dev libglx-dev libgbm-dev libdrm-dev libdirectfb-dev \
                      libglvnd-dev libglvnd-core-dev libglut-dev libopenal-dev libalut-dev \
                      libweston-10-0 libweston-10-dev                                      \
                      libvulkan1 libvulkan-dev                                            \  # Vulkanを使用する場合
                      libclang-dev libclang-cpp-dev clang-tools clang-format              \  # QDoc, Clangベースのlupdateパーサーを使用する場合はインストールする
                      llvm-dev llvm-runtime                                                \  # QDoc, Clangベースのlupdateパーサーを使用する場合はインストールする
                      libassimp5 libassimp-dev                                            \  # 現在(2023/11)において、libassimp-devをインストールするとlibdracoライブラリの探索に失敗するため、
                                                                                            \  # libassimp-devはインストールしない
                      libdouble-conversion3 libdouble-conversion-dev                      \  # 現在(2023/11)において、libdouble-conversion-devをインストールするとdouble-conversionのヘッダファイルの探索に失敗するため、
                                                                                            \  # libdouble-conversion-devはインストールしない
                      linux-headers-arm64 linux-headers-6.1-sunxi64                          # 不要の可能性あり
# Manjaro
sudo pacman -S --needed base-devel util-linux-libs glib2 cmake unzip pkg-config gdb gdb-common gdbm gcc gcc-libs gcc-fortran python3 \
                        gmp libmpc mpfr libisl ccache icu lksctp-tools python-atspi zstd libinput mtdev libevdev libffi pcre pcre2 gconfmm \
                        libwacom assimp fontconfig dbus dbus-c++ nss libxkbcommon xcb-util-cursor libxinerama xorg-xinput xcb-util-xrm alsa-lib \
                        pugixml libxslt openssl libproxy libb2 lttng-ust libglvnd systemd double-conversion \
                        clang llvm \  # QtDocをインストールする場合
                        wayland wayland-utils wayland-protocols egl-wayland waylandpp waylandpp wlc wayfire glew-wayland glfw-wayland libva1 \
                        mesa mesa-utils glu vulkan-headers qt6ct
<br>
Manjaroにおいて、マルチメディア関連やBluetooth等を使用する場合、下表に示す任意のパッケージをインストールする。<br>
Mobianの場合、[[インストール - Qt6#Raspberry Piの設定|上記のセクションにあるRaspberry Piの表]]も参照すること。<br>
<center>
{| class="wikitable" style="background-color:#fefefe;"
|+ Mobian向け その他のライブラリ(オプション)
|-
! style="background-color:#66CCFF;" | 機能
! style="background-color:#66CCFF;" | インストールするライブラリ
! style="background-color:#66CCFF;" | configureスクリプトのオプション
|-
| Bluetooth || bluez bluez-tools libbluetooth-dev ||
|-
| 画像 || libjpeg-dev libpng-dev libtiff-dev libmng-dev libwebp-dev ||
|-
| コーデック || libavcodec-dev libavformat-dev libavutil-dev libavdevice-dev libavfilter-dev libswscale-dev libswresample-dev<br>libpostproc-dev libv4l-dev libxvidcore-dev libx264-dev libx265-dev ||
|-
| マルチメディア || libwmf-dev libgstreamer1.0-0 libgstreamer1.0-dev libgstreamermm-1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base<br>gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad<br>libgstreamer-plugins-bad1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-tools<br>gstreamer1.0-alsa gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5<br>libwayland-dev(Wayland開発パッケージは、gstreamerヘッダで必要) ||
|-
| ALSAオーディオ || libasound2-dev ||
|-
| Pulseオーディオ || pulseaudio libpulse-dev ||
|-
| OpenALオーディオ || libopenal-data libopenal1 libopenal-dev libsndio7.0 libsndio-dev ||
|-
| Text to Speech || flite1-dev libspeechd-dev ||
|-
| シリアルポート || libserialport-dev ||
|-
| センサ || libsensors-dev libsensors4-dev ※要調査 ||
|-
| GPS || libgps-dev ※要調査 ||
|-
| データベース || unixodbc unixodbc-common unixodbc-dev (ODBC)<br>libsqlite3-dev (SQLite)<br>libpq-dev(PostgreSQL)<br>libmariadbclient-dev(MariaDB / MySQL) ||
|-
| プリンタ || libcups2-dev ||
|-
| Wayland || libwayland-dev ||
|-
| X11 || libfontconfig-dev libfontconfig1-dev libfreetype6-dev<br>libx11-dev libx11-xcb-dev libsm-dev libice-dev<br>libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev<br>libxfixes-dev libxrender-dev libxdamage-dev libxkbfile-dev<br>libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev  libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev<br>libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev<br> libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libxcb-damage0-dev<br>libxcb-composite0-dev libxcb-record0-dev libxcb-present-dev libxcb-res0-dev libxcb-render0-dev<br>libxcb-xinput-dev libxcb-xv0-dev libxcb-xtest0-dev libxcb-cursor-dev libxcb-util-dev libxcb-ewmh-dev libxcb-xvmc0-dev<br>libxcb-imdkit-dev<br>libxcb-xrm-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-dpms0-dev libxcb-xf86dri0-dev ||
|-
| WebEngine || 必須 :<br>flex bison gperf libre2-dev libnss3-dev libopenjp2-7-dev libdrm-dev libxshmfence-dev python3-html5lib<br><br>オプション1 :<br>libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev<br>libpci-dev libpciaccess-dev libevent-dev libev-dev libev-libevent-dev libevhtp-dev libuev-dev libuv1-dev<br>libprotobuf-dev protobuf-compiler<br><br>オプション2(不安定なため注意すること) :<br>libopus-dev libvpx-dev ||
|-
| アクセシビリティ || libatspi2.0-dev ||
|-
| SCTP || libsctp1 libsctp-dev || -sctp
|}
</center>
<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|+ Manjaro向け その他のライブラリ(オプション)
|-
! style="background-color:#66CCFF;" | 機能
! style="background-color:#66CCFF;" | インストールするライブラリ
! style="background-color:#66CCFF;" | configureスクリプトのオプション
|-
| Bluetooth || bluez bluez-tools bluez-libs bluez-utils ||
|-
| 画像 || openjpeg2 libjpeg-turbo libpng libtiff libmng libwebp ||
|-
| マルチメディア || libwmf<br>gstreamer gstreamermm gst-plugins-base gst-plugins-base-libs gst-plugins-good<br>gst-plugins-bad gst-plugins-bad-libs<br>gst-plugins-ugly gst-libav gst-plugin-wpe gst-plugin-pipewire gst-plugin-gtk<br>qt-gstreamer gst-plugin-qmlgl gst-plugin-opencv ||
|-
| ALSAオーディオ || alsa-lib ||
|-
| Pulseオーディオ || pulseaudio-alsa ||
|-
| OpenAL || openal ||
|-
| Text to Speech || flite ||
|-
| シリアルポート || libserialport ||
|-
| センサ || sensorfw ||
|-
| データベース || postgresql-libs libpqxx (PostgreSQL)<br>mariadb-clients mariadb-libs (MariaDB)
unixodbc libiodbc (ODBC)<br>sqlite (SQLite)
|
|-
| プリンタ || libcups ||
|-
| Wayland (X11) || xorg-xwayland ||
|-
| X11 ||  ||
|-
| WebEngine || 必須 :<br>flex bison gperf readline nss libdrm<br><br>オプション1 :<br>libxml2 libxml++ libxslt minizip jsoncpp lcms2 libevent protobuf protobuf-c<br><br>オプション2(不安定なため注意すること) :<br>opus libvpx ||
|-
| アクセシビリティ || at-spi2-core at-spi2-atk ||
|-
| SCTP || lksctp-tools || -sctp
|}
</center>
<br>
* 上表のライブラリを全てインストールする場合
*: <code>sudo pacman -S --needed bluez bluez-libs openjpeg2 libjpeg-turbo libpng libtiff libmng gstreamer gstreamermm gst-plugins-base gst-plugins-base-libs gst-plugins-good \</code>
*: <code>gst-plugins-bad gst-plugins-bad-libs gst-plugins-ugly gst-libav gst-plugin-wpe gst-plugin-pipewire gst-plugin-gtk qt-gstreamer gst-plugin-qmlgl gst-plugin-opencv alsa-lib \</code>
*: <code>pulseaudio-alsa openal flite libserialport sensorfw unixodbc sqlite libcups xorg-xwayland flex bison gperf readline nss libdrm libxml2 libxml++ libxslt minizip jsoncpp \</code>
*: <code>lcms2 libevent protobuf protobuf-c opus libvpx at-spi2-core at-spi2-atk lksctp-tools</code>
<br>
次のセクションにおいて、rsyncコマンドを使用してLinux PCとPinePhoneのファイルを同期する。<br>
しかし、同期するファイルには、スーパユーザ権限が必要なものがある。<br>
<br>
そのため、一般ユーザでも全てのファイルを同期できるように、/etc/sudoersファイルに以下の設定を追記する。<br>
以下の設定により、rsyncコマンドは、必要に応じてスーパユーザ権限で実行される。<br>
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
<br>
 
==== システムルートディレクトリの設定 ====
Linux PCで、PinePhone向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。<br>
PinePhone上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。<br>
<br>
Linux PC上に開発用ディレクトリを作成する。<br>
また、PinePhoneのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<br>
mkdir -p ~/Program/Qt_Embedded/sysroot \
          ~/Program/Qt_Embedded/sysroot/usr \
          ~/Program/Qt_Embedded/sysroot/usr/share
<br>
<code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br>
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/include ~/Program/Qt_Embedded/sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/lib ~/Program/Qt_Embedded/sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/share/pkgconfig ~/Program/Qt_Embedded/sysroot/usr/share
<br>
==== Qtのソースコードのダウンロード ====
* Qt Everywhere (推奨)
*: [https://download.qt.io/official%20releases/qt/ Qtの公式Webサイト]にアクセスして、Qt 6のソースコードをダウンロードする。
*: <code>wget https://download.qt.io/official_releases/qt/6.x/6.x.x/single/qt-everywhere-src-6.x.x.tar.xz</code>
*: <code>tar xf qt-everywhere-opensource-src-6.x.x.tar.gz</code>
*: <br>
* Githubの使用
*: GithubからQt 6のソースコードを個別にダウンロードする。<br>
*: <code>git clone https://github.com/qt/qt5.git qt6</code>
*: <br>
*: ダウンロードしたスーパーリポジトリに移動する。<br>
*: <code>cd qt6</code>
*: <code>git checkout <Qtのバージョン></code>
*: または
*: <code>git checkout <Qtのショートバージョン></code>
*: <br>
*: <code>init-repository</code>コマンドは、Qtが提供する指定したモジュールのソースコードを取得するためのツールである。<br>
*: スーパーリポジトリは小さく、全てのモジュール(ライブラリ)はgit submodulesとして保持されている。<br>
*: <br>
*: 利用可能な全てのモジュールについては[https://doc.qt.io/qt-5/qtmodules.html こちらのWebサイト]、ツールについては<code>init-repository --help</code>コマンドまたは[https://github.com/qt/qt5/blob/dev/init-repository こちらのWebサイト]を参照すること。<br>
*: <code>./init-repository --module-subset=essential,qtsvg,qtvirtualkeyboard,qtquickcontrols</code>
*: <code>./init-repository -f --module-subset=qtquick3d,qtquicktimeline,qtwayland</code>  # 必要な場合は個別に追加ダウンロードする
<br>
 
==== Qtの設定 ====
Qtのソースコードがあるディレクトリにおいて、qtbase/mkspecs/devices/linux-pinephone-g++ディレクトリを作成する。<br>
mkdir <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++
<br>
次に、<Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qplatformdefs.hファイルを以下の内容で作成する。<br>
vi <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qplatformdefs.h
<br>
<syntaxhighlight lang="c++">
// qplatformdefs.hファイル
#include "../../linux-g++/qplatformdefs.h"
</syntaxhighlight>
<br>
さらに、<Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qmake.confファイルを以下の内容で作成する。<br>
vi <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qmake.conf
<br>
# qmake.confファイル
# qmake configuration for the PinePhone(Based A20_OlinuxinO boards)
include(../common/linux_device_pre.conf)
#QT_QPA_DEFAULT_PLATFORM = eglfs    # 不要の可能性があるため要調査
QT_QPA_DEFAULT_PLATFORM = wayland  # 不要の可能性があるため要調査
SYSROOT_INC = $$[QT_SYSROOT]/usr/include
SYSROOT_LIB = $$[QT_SYSROOT]/usr/lib
# Extra stuff (OpenGL, DirectFB, ...)
QMAKE_INCDIR_EGL        = $$[SYSROOT_INC] \
                          $$[SYSROOT_INC]/aarch64-linux-gnu \
                          $$[SYSROOT_INC]/GL \
                          $$[SYSROOT_INC]/EGL \
                          $$[SYSROOT_INC]/GLES \
                          $$[SYSROOT_INC]/GLES2 \
                          $$[SYSROOT_INC]/GLES3 \
                          $$[SYSROOT_INC]/GLFW
QMAKE_LIBDIR_EGL        = $$[SYSROOT_LIB] \
                          $$[SYSROOT_LIB]/aarch64-linux-gnu
QMAKE_INCDIR_OPENGL_ES2 = $$[QMAKE_INCDIR_EGL]
QMAKE_LIBDIR_OPENGL_ES2 = $${QMAKE_LIBDIR_EGL}
QMAKE_INCDIR_OPENVG    = $${QMAKE_INCDIR_EGL}          # 不要の可能性があるため要調査
QMAKE_LIBDIR_OPENVG    = $${QMAKE_LIBDIR_EGL}          # 不要の可能性があるため要調査
QMAKE_LIBS_EGL          = -lEGL
QMAKE_LIBS_OPENGL_ES2  = -lGLESv2 $${QMAKE_LIBS_EGL}
QMAKE_LIBS_OPENVG      = -lOpenVG $${QMAKE_LIBS_EGL}  # 不要の可能性があるため要調査
# modifications to gcc-base.conf
QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53      # PinePhoneの場合
#QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72 -lts  # PinePhone Proの場合
QMAKE_CFLAGS_RELEASE  += -O3
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_RELEASE += -O3
QMAKE_LIBS              += -lrt -lpthread -ldl -lz      # Linaro GCC ARM 7.5 ツールチェーンを使用する場合
#QMAKE_LIBS              += -lrt -lpthread -ldl          # GCC ARM 8.3 以降のツールチェーンを使用する場合
DISTRO_OPTS += aarch64
DISTRO_OPTS += deb-multi-arch  # Mobian OSを使用する場合は指定する
                                # 他のOSを使用する場合は、削除またはコメントアウトする
# Preferred eglfs backend
EGLFS_DEVICE_INTEGRATION = eglfs_mali
include(../common/linux_arm_device_post.conf)
load(qt_config)
<br>
==== Qtのビルド ====
===== CMakeツールチェーンファイルの作成 =====
ターゲット向けQt 6ライブラリのビルドで使用するCMakeツールチェーンファイルを作成する。<br>
vi ToolChain_for_PinePhone.cmake
<br>
<syntaxhighlight lang="cmake">
# ToolChain_for_PinePhone.cmake
# Manjaro ARM向け
cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
# Set path to System Root.
set(TARGET_SYSROOT <PinePhoneのシステムルートディレクトリ>)
set(CMAKE_SYSROOT ${TARGET_SYSROOT})
# Set path to package config.
#set(ENV{PKG_CONFIG_PATH}        ${TARGET_SYSROOT}/usr/lib/pkgconfig)
#set(ENV{PKG_CONFIG_LIBDIR}      ${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/share/pkgconfig)
set(ENV{PKG_CONFIG_PATH}        $PKG_CONFIG_PATH:${TARGET_SYSROOT}/usr/lib/pkgconfig)
set(ENV{PKG_CONFIG_LIBDIR}      /usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/share/pkgconfig)
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
# Set path to Cross Compiler.
set(CMAKE_C_COMPILER    <クロスコンパイル向けGCCまたはClangのパス>)
set(CMAKE_CXX_COMPILER  <クロスコンパイル向けG++またはClang++のパス>)
#set(CMAKE_C_FLAGS  "${CMAKE_CXX_FLAGS} -fPIC -Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib -L${TARGET_SYSROOT}/usr/lib")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib -L${TARGET_SYSROOT}/usr/lib")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${TARGET_SYSROOT}/usr/include")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(QT_COMPILER_FLAGS          "-march=armv8-a -mtune=cortex-a53")
#set(QT_COMPILER_FLAGS_RELEASE  "-O2 -pipe")
set(QT_COMPILER_FLAGS_RELEASE  "-O3")
set(QT_LINKER_FLAGS            "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_THREAD_LIBS_INIT "-lrt -lpthread -ldl")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
# Set ODBC
set(ODBC_LIBRARY ${TARGET_SYSROOT}/usr/lib/libodbc.so)
# Set WMF
set(WMF_STRMIIDS_LIBRARY ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_AMSTRMID_LIBRARY ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_DMOGUIDS_LIBRARY ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_MSDMO_LIBRARY    ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_OLE32_LIBRARY    ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_OLEAUT32_LIBRARY ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_MF_LIBRARY      ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_MFUUID_LIBRARY  ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_MFPLAT_LIBRARY  ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_MFCORE_LIBRARY  ${TARGET_SYSROOT}/usr/lib/libwmf.so)
set(WMF_PROPSYS_LIBRARY  ${TARGET_SYSROOT}/usr/lib/libwmf.so)
# Set AssImp
set(ASSIMP_LIBRARY  ${TARGET_SYSROOT}/usr/lib/libassimp.so)
</syntaxhighlight>
<br>
<syntaxhighlight lang="cmake">
# ToolChain_for_PinePhone.cmake
# Mobian向け
cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
# Set path to System Root.
set(TARGET_SYSROOT <PinePhoneのシステムルートディレクトリ>)
set(CMAKE_SYSROOT ${TARGET_SYSROOT})
# Set path to package config.
set(ENV{PKG_CONFIG_PATH}        $PKG_CONFIG_PATH:${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig)
set(ENV{PKG_CONFIG_LIBDIR}      /usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig:${TARGET_SYSROOT}/usr/share/pkgconfig)
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
# Set path to Cross Compiler.
set(CMAKE_C_COMPILER    <クロスコンパイル向けGCCまたはClangのパス>)
set(CMAKE_CXX_COMPILER  <クロスコンパイル向けG++またはClang++のパス>)
# Set Linker Flags for GCC.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${TARGET_SYSROOT}/usr/include")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_INIT    "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu")
set(CMAKE_MODULE_LINKER_FLAGS_INIT  "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu")
set(CMAKE_SHARED_LINKER_FLAGS_INIT  "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu")
# Set Compiler Flags.
set(QT_COMPILER_FLAGS          "-march=armv8-a -mtune=cortex-a53")
set(QT_COMPILER_FLAGS_RELEASE  "-O3")
#set(QT_COMPILER_FLAGS_RELEASE  "-O2 -pipe")
set(QT_LINKER_FLAGS            "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
set(CMAKE_THREAD_LIBS_INIT "-lrt -lpthread -ldl")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# Set GL, EGL, GLESv2
set(GL_INC_DIR ${TARGET_SYSROOT}/usr/include)
set(GL_LIB_DIR ${TARGET_SYSROOT}:${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/:${TARGET_SYSROOT}/usr:${TARGET_SYSROOT}/usr/lib)
set(OPENGL_INCLUDE_DIR ${TARGET_SYSROOT}/usr/include)
set(OPENGL_opengl_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libOpenGL.so)
set(EGL_INCLUDE_DIR ${TARGET_SYSROOT}/usr/include)
set(EGL_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libEGL.so)
set(GLESv2_INCLUDE_DIR ${TARGET_SYSROOT}/usr/include)
set(GLESv2_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libGLESv2.so)
set(gbm_INCLUDE_DIR ${TARGET_SYSROOT}/usr/include)
set(gbm_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libgbm.so)
set(Libdrm_INCLUDE_DIR ${TARGET_SYSROOT}/usr/include)
set(Libdrm_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libdrm.so)
#set(XCB_XCB_INCLUDE_DIR ${TARGET_SYSROOT}/usr/include)
#set(XCB_XCB_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libxcb.so)
# Set ODBC
set(ODBC_LIBRARY ${TARGET_SYSROOT}/usr/lib/libodbc.so)
# Set WMF
set(WMF_STRMIIDS_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_AMSTRMID_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_DMOGUIDS_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_MSDMO_LIBRARY    ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_OLE32_LIBRARY    ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_OLEAUT32_LIBRARY ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_MF_LIBRARY      ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_MFUUID_LIBRARY  ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_MFPLAT_LIBRARY  ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_MFCORE_LIBRARY  ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
set(WMF_PROPSYS_LIBRARY  ${TARGET_SYSROOT}/usr/lib/aarch64-linux-gnu/libwmf.so)
</syntaxhighlight>
<br>
 
===== Qtのビルド =====
Qt 6をクロスビルドするため、クロスビルド向けディレクトリを作成する。<br>
mkdir build && cd build
<br>
Qt 6のクロスビルド向けの設定を行う。<br>
<syntaxhighlight lang="sh">
# Manjaro ARM向け
# Wayland Scannerのパスを設定
export PATH="/<Wayland Scannerのインストールディレクトリ>/bin:$PATH"
export LD_LIBRARY_PATH="/<Wayland Scannerのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
# PinePhoneのシステムルートディレクトリを設定
export SYSROOT=<PinePhoneのシステムルートディレクトリ>
# Pkg-Configの設定
export PKG_CONFIG_PATH="$SYSROOT/usr/lib/pkgconfig:$SYSROOT/usr/lib/aarch64-linux-gnu/pkgconfig"
export PKG_CONFIG_LIBDIR="$SYSROOT/usr/lib/pkgconfig:$SYSROOT/usr/lib/aarch64-linux-gnu/pkgconfig:$SYSROOT/usr/share/pkgconfig"
# コンパイラの設定
export CROSS_COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-"
# または
# export CROSS_COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-unknown-linux-gnu-"
cmake -G Ninja \
<Qt 6のソースコードがあるディレクトリ>      \
-DCMAKE_BUILD_TYPE=Release          \
-DINPUT_opengl=es2                  \
-DQT_FEATURE_opengles2=ON          \
-DQT_FEATURE_opengles3=ON          \
-DCMAKE_TOOLCHAIN_FILE=<CMakeデバイスファイルのパス>          \
-DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON                  \
-DQT_QMAKE_TARGET_MKSPEC=devices/linux-pinephone-g++    \
-DQT_QMAKE_DEVICE_OPTIONS=CROSS_COMPILE=$CROSS_COMPILER  \
-DQT_BUILD_EXAMPLES=OFF  \
-DQT_BUILD_TESTS=OFF    \
-DBUILD_qtdoc=OFF        \  # QtDocをインストールしない場合
-DBUILD_qtwebengine=OFF  \  # QtWebEngineをインストールしない場合
-DBUILD_qtwebview=OFF    \  # QtWebViewをインストールしない場合
-DBUILD_qtwebchannel=OFF \  # QtWebChannelをインストールしない場合
-DFEATURE_clang=ON      \  # QtDocをインストールする場合
-DFEATURE_clangcpp=ON    \  # QtDocをインストールする場合
-DCMAKE_SYSROOT=$SYSROOT \
-DQT_HOST_PATH=<x86 64向けQt 6のパスのトップディレクトリ  例: /home/user/Qt/6.x.x/gcc_64>                      \
-DQT_HOST_PATH_CMAKE_DIR=/<x86 64向けQt 6のパスのcmakeディレクトリ  例: /home/user/Qt/6.x.x/gcc_64/lib/cmake> \
-DCMAKE_STAGING_PREFIX=<PinePhone向けQt 6ライブラリを配置するディレクトリ>                                        \
-DCMAKE_INSTALL_PREFIX=<Qtソフトウェアを配置するディレクトリ>                                                    \
-DCMAKE_PREFIX_PATH=$SYSROOT/usr/lib
</syntaxhighlight>
<br>
<syntaxhighlight lang="sh">
# Mobian向け
# Wayland Scannerのパスを設定
export PATH="/<Wayland Scannerのインストールディレクトリ>/bin:$PATH"
export LD_LIBRARY_PATH="/<Wayland Scannerのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
# PinePhoneのシステムルートディレクトリを設定
export SYSROOT=<PinePhoneのシステムルートディレクトリ>
# コンパイラの設定
export CROSS_COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-"
cmake -G Ninja \
<Qt 6のソースコードがあるディレクトリ>      \
-DCMAKE_BUILD_TYPE=Release          \
-DINPUT_opengl=es2                  \
-DQT_FEATURE_opengles2=ON          \
-DQT_FEATURE_opengles3=ON          \
-DQT_QPA_DEFAULT_PLATFORM=wayland  \
-DCMAKE_TOOLCHAIN_FILE=<CMakeデバイスファイルのパス>          \
-DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON                  \
-DQT_QMAKE_TARGET_MKSPEC=devices/linux-pinephone-g++    \
-DQT_QMAKE_DEVICE_OPTIONS=CROSS_COMPILE=$CROSS_COMPILER  \
-DQT_BUILD_EXAMPLES=OFF  \
-DQT_BUILD_TESTS=OFF    \
-DBUILD_qtdoc=OFF        \  # QtDocをインストールしない場合
-DBUILD_qtwebengine=OFF  \  # QtWebEngineをインストールしない場合
-DBUILD_qtwebview=OFF    \  # QtWebViewをインストールしない場合
-DBUILD_qtwebchannel=OFF \  # QtWebChannelをインストールしない場合
-DFEATURE_clang=ON      \  # QtDocをインストールする場合
-DFEATURE_clangcpp=ON    \  # QtDocをインストールする場合
-DCMAKE_SYSROOT=$SYSROOT \
-DQT_HOST_PATH=<x86 64向けQt 6のパスのトップディレクトリ  例: /home/user/Qt/6.x.x/gcc_64>                      \
-DQT_HOST_PATH_CMAKE_DIR=/<x86 64向けQt 6のパスのcmakeディレクトリ  例: /home/user/Qt/6.x.x/gcc_64/lib/cmake> \
-DCMAKE_STAGING_PREFIX=<PinePhone向けQt 6ライブラリを配置するディレクトリ>                                        \
-DCMAKE_INSTALL_PREFIX=<Qtソフトウェアを配置するディレクトリ>                                                    \
-DCMAKE_PREFIX_PATH=<PinePhone向けQt 6ライブラリを配置するディレクトリ>
</syntaxhighlight>
<br>
Qt 6をクロスビルドおよびインストールする。<br>
また、Ninjaのビルドエラーの出力は、後方で起きている可能性があるため、テキストファイル等に一時的に出力した方がよい。<br>
cmake --build . --parallel $(nproc)  または  cmake --build . --parallel $(nproc) > compile.txt 2>&1
cmake --install .
<br>
===== ビルドエラー関連 : GCC 13を使用する場合 =====
GCC 13を使用してQt 6をビルドする場合、以下に示すようなエラーが出力される場合がある。<br>
バグレポートURL : https://bugreports.qt.io/browse/QTBUG-111604?focusedCommentId=718489<br>
# エラー出力 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>
<syntaxhighlight lang="c++">
// qt-everywhere-src-6.x.x/qt3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXBinaryTokenizer.cppファイル
// 53行目
// 変更前
#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>
// qt-everywhere-src-6.x.x/qtquick3d/src/3rdparty/assimp/src/code/AssetLib/FBX/FBXTokenizer.cppファイル
// 58行目
// 変更前
#include <stdint.h>
// 変更後
#include <cstdint>
</syntaxhighlight>
<br>
===== ビルドエラー関連 : X Keyboardに関するエラー =====
コンパイル時において、以下に示すようなエラーが出力される場合がある。<br>
error: XKB_KEY_dead_lowline was not declared in this scope; did you mean XKB_KEY_dead_belowring?
または
error: 'XKB_KEY_dead_lowline' was not declared in this scope; did you mean 'XKB_KEY_dead_belowring'?
<br>
この時、<code>cmake</code>コマンドの実行時において、<code>-DFEATURE_xkbcommon=OFF</code>オプションを付加する。<br>
<br>
 
===== ビルドエラー関連 : Qt Toolのqhelpgeneratorに関するエラー =====
<code>cmake</code>コマンドの実行時において、以下に示すようなエラーが出力される場合がある。<br>
-- Configuring submodule 'qttools'
CMake Error at qttools/src/assistant/qhelpgenerator/CMakeLists.txt:66 (add_dependencies):
  Cannot add target-level dependencies to non-existent target
  "qhelpgenerator".
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>
vi /<Qt 6のソースコードがあるディレクトリ>/qttools/src/assistant/qhelpgenerator/CMakeLists.txt
<br>
<syntaxhighlight lang="cmake">
# /<Qt 6のソースコードがあるディレクトリ>/qttools/src/assistant/qhelpgenerator/CMakeLists.txtファイル 66行目
# 編集前
add_dependencies(qhelpgenerator ${needed_plugins})
# 編集後
#add_dependencies(qhelpgenerator ${needed_plugins})
</syntaxhighlight>
<br>
===== ビルドエラー関連 : Qt Toolのqhelpgeneratorに関するエラー =====
ビルド時において、以下に示すようなエラーが出力される場合がある。<br>
error: 'google::protobuf::FileDescriptor::Syntax google::protobuf::FileDescriptor::syntax() const'
<br>
この時、以下に示す<code>cmake</code>コマンドのオプションを付加する。<br>
cmake -G Ninja \
# ...略
-DBUILD_qtgrpc
# ...略
<br>
 
===== Qt 6ライブラリのアップロード =====
クロスビルドしたQtライブラリを、PinePhoneにデプロイする。<br>
<br>
まず、PinePhone向けQt 6ライブラリのインストールディレクトリに存在する全てのファイルを、PinePhoneの任意のディレクトリ(例. ~/InstallSoftware/Qt_6_x_xディレクトリ)に同期させる。<br>
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" \
<PinePhone向けQt 6ライブラリのインストールディレクトリ> <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x
<br>
<u>※注意</u><br>
<u>PinePhoneにアップロードしたQtライブラリの所有者がrootになっている場合があるため、</u><br>
<u>以下のコマンドを実行して、所有者をローカルユーザに変更する必要がある。</u><br>
sudo chown -R <ユーザ名>:<グループ名> ~/InstallSoftware/Qt_6_x_x
<br>
 
==== Qt Creatorの設定 ====
Qt Creatorを起動して、キットの設定を行う。<br>
<br>
* QMakeの設定
*: クロスコンパイルしたQt 6のインストールディレクトリに移動する。
*: binディレクトリにあるhost-qmakeファイルのシンボリックファイル(ここでは、qmake-hostファイルとする)を作成する。
*: <code>ln -s host-qmake qmake-host</code>
*: <br>
* キットの作成
*: [編集] - [設定]を選択して、[設定]画面を開く。
*: [設定]画面左にある[キット] - [設定]画面右の[Qtバージョン]タブから[追加]ボタンを押下する。
*: 上記で作成したシンボリックファイルを選択する。
*: <br>
*: [設定]画面左にある[キット] - [設定]画面右の[キット]タブから[追加]ボタンを押下する。
*: [デバイスの種類]プルダウンから、[Remote Linux Device]を選択する。
*: [デバイス]プルダウンから、[設定]画面左にある[デバイス]で作成したターゲットを選択する。
*: [ビルドデバイス]プルダウンから、[ローカルPC]を選択する。
*: [Sysroot]項目に、PinePhoneのシステムルートディレクトリのパスを入力する。
*: [コンパイラ]項目の[C]プルダウンから、C向けのクロスコンパイラを選択する。
*: [コンパイラ]項目の[C++]プルダウンから、C++向けのクロスコンパイラを選択する。
*: [GDB]プルダウンから、クロスコンパイラ向けGDBを選択する。
*: [Qtバージョン]プルダウンから、上記で設定した[Qtバージョン]を選択する。
*: [Qt mkspec]項目から、/<クロスコンパイルしたQt 6のインストールディレクトリ>/mkspecs/devices/linux-pinephone-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>
==== Qtプロジェクトの設定 ====
次に、Qt Creatorでソフトウェアを開発する時の環境設定を行う。<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/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/bin  ※PATHの設定が既に存在する場合は、追記する
* Variable : LD_LIBRARY_PATH  (PinePhoneの~/.profileファイルに環境変数LD_LIBRARY_PATHを設定している場合)
*: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/lib:/home/<PinePhone's User Name>/InstallSoftware/Qt_6_x_x/plugins/qmltooling
* Variable : QML_IMPORT_PATH
*: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/qml
* Variable : QML2_IMPORT_PATH
*: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/qml
* Variable : QT_PLUGIN_PATH
*: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/plugins
* Variable : QT_QPA_PLATFORM_PLUGIN_PATH
*: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/plugins/platforms
<br>
また、上記の設定を簡潔に行う場合、Qtプロジェクトのディレクトリにある.pro.userファイルにおいて、<br>
<code><valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">〜</valuemap></code>要素内に、以下の設定を追記する。<br>
<u>以下の設定を追記する場合、必ず、Qtプロジェクトを閉じた状態で行うこと。</u><br>
<syntaxhighlight lang="xml">
# .pro.userファイル
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
  <!-- ...略 -->
  <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/<PinePhoneのユーザ名>/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/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/lib:/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/plugins/qmltooling</value>
    <value type="QString">QML_IMPORT_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/qml</value>
    <value type="QString">QML2_IMPORT_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/qml</value>
    <value type="QString">QT_PLUGIN_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_6_x_x/plugins</value>
    <value type="QString">QT_QPA_PLATFORM_PLUGIN_PATH=/home/<PinePhoneのユーザ名>/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>
 
<br>
次に、GDBデバッガの設定を行う。<br>
リモートターゲットをデバッグする時、GDBは、Linux PC側にダウンロードしているPinePhoneのシステムルートディレクトリを検索する。<br>
そのため、GDBにターゲット側のPinePhoneのシステムルートディレクトリを検索するように設定する必要がある。<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に保存したPinePhone向けのQtライブラリがあるディレクトリのシンボクリックリンクを作成する。
mkdir -p /<PinePhoneのシステムルートディレクトリ>/home/mobian/InstallSoftware
ln -s /<Qtライブラリのインストールディレクトリ> /<PinePhoneのシステムルートディレクトリ>/home/mobian/InstallSoftware
# シンボリックリンク名の変更
mv /<PinePhoneのシステムルートディレクトリ>/home/mobian/InstallSoftware/<Qtライブラリのインストールディレクトリ> \
    /<PinePhoneのシステムルートディレクトリ>/home/mobian/InstallSoftware/Qt_6_x_x
<br>
Qt Creatorメイン画面から、[ツール]メニューバー - [オプション] - [デバッガ] - [GDB]タブ - [追加の起動コマンド]に、以下の内容を設定する。<br>
# Kit名に"PinePhone"という文字列が入っている場合のみ、PinePhoneのシステムルートディレクトリを参照する
# x86 / x64のKitを使用する場合は、PinePhoneのシステムルートディレクトリを参照しない
[ -n $(grep -i PinePhone %{ActiveProject:Kit:Name}) ] && set sysroot /<PinePhoneのシステムルートディレクトリ>
# または
set sysroot /<PinePhoneのシステムルートディレクトリ>
<br>
これにより、PinePhoneでQtライブラリが使用できる。<br>
<br><br>
<br><br>


2,144行目: 640行目:
<br><br>
<br><br>


{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Qt]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Qt]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]

2024年11月23日 (土) 17:47時点における最新版

概要

Qtは、デスクトップ、組み込み、モバイルプラットフォーム向けのソフトウェアやユーザーインターフェイスの作成を効率化するために設計されたツールを備えた完全な開発フレームワークである。

Qt 6.2 LTSのサポート期間は、2024年9月30日まで、Qt 6.5 LTSのサポート期間は2026年3月30日までである。

Qtライセンスを購入するには、http://www.qt.io/download/ を参照すること。

参考書
61OPCSNS4VL._SL1180_.jpg
Introducing Qt 6
C++でモバイルとデスクトップ向けのアプリとゲームを作ることを学ぶ
61meHwEaCLS._SL1360_.jpg
Cross-Platform Development with Qt 6 and Modern C++
プラットフォーム依存性を気にすることなく、
モダンなグラフィカルユーザーインターフェースを持つアプリケーションを設計・構築する
51J026p9D8S._SL1360_.jpg
A Guide to Qt 6
Qt 6の初心者向けガイド



Qtモジュール

Qtビルディングブロック

Qt 6は多数のモジュールから構成されている。
一般的に、モジュールは開発者が使用するためのライブラリである。

いくつかのモジュールは、Qt対応プラットフォームで必須であり、Qt Essentials Modulesと呼ばれている。
その他のモジュールはオプションで、Qt Add-on Modulesと呼ばれている。
開発者の大半はQt Add-on Modulesを使用する機会はあまり無いかもしれないが、一般的な課題に対する貴重な解決策を提供してくれるため、知っておいて損はない。

Qt Essentials Modules

Qt Essentials Modulesは、Qtが使用されるプラットフォームには必須である。
Qt / QMLプログラミングを始めるための最小限のQt6モジュールセットである。

Qt Quick 2を使用して最新のQt6アプリケーションを開発するための基礎を提供している。
モジュールの全リストは、Qtドキュメントモジュールリスト (https://doc.qt.io/qt-6/qtmodules.html#qt-essentials) を参照すること。

  • Qt Core
    他のモジュールで使用される非グラフィカルなコアクラス。
  • Qt D-BUS
    LinuxのD-Busプロトコルでプロセス間通信を行うためのクラス。
  • Qt GUI
    GUIコンポーネントのベースクラス。
    これは、OpenGLを含む。
  • Qt Network
    ネットワークプログラミングをより簡単に、よりポータブルにするためのクラス。
  • Qt QML
    QMLとJavaScript言語用のクラス。
  • Qt Quick
    カスタムユーザーインターフェースを持つ、高度にダイナミックなアプリケーションを構築するための宣言型フレームワーク。
  • Qt Quick Controls
    デスクトップ、組み込み、モバイルデバイス用の高性能なユーザーインターフェイスを作成するための軽量なQMLタイプを提供する。
    これらの型はシンプルなスタイリングアーキテクチャを採用しており、非常に効率的である。
  • Qt Quick Layouts
    Layoutsは、Qt Quick 2ベースのアイテムをユーザーインターフェイスに配置するためのアイテムである。
  • Qt Quick Test
    QMLアプリケーション用のユニットテストフレームワークで、テストケースはJavaScriptの関数として記述される。
  • Qt Test
    Qtアプリケーションやライブラリを単体テストするためのクラス。
  • Qt Widgets
    C++ウィジェットであり、Qt GUIを拡張するためのクラス。


Qt Add-On Modules

Qt Essentials Modulesモジュールの他に、Qtは特定の目的に対応する追加モジュールを提供している。
多くのアドオンモジュールは機能が複雑で後方互換性のために存在するか、特定のプラットフォームにのみ適用可能である。

利用可能なアドオンモジュールの一覧を以下に示すが、Qtの公式ドキュメントを参照して、全てのアドオンモジュールを理解すること。

  • Network
    Qt Bluetooth / Qt Network Authorization UI Components
    Qt Quick 3D / Qt Quick Timeline / Qt Charts / Qt Data Visualization / Qt Lottie Animation / Qt Virtual Keyboard
  • グラフィックス
    : Qt 3D / Qt Image Formats / Qt OpenGL / Qt Shader Tools / Qt SVG / Qt Wayland Compositor
  • ヘルパー
    Qt5コア互換API / Qt Concurrent / Qt Help / Qt Print Support / Qt Quick Widgets / Qt SCXML / Qt SQL / Qt State Machine / Qt UI Tools / Qt XML



Qt ライセンス

Qtは、様々なユーザのニーズに対応できるよう、様々なライセンスオプションが用意されている。

商用ライセンスでライセンスされたQtは、第三者とソースコードを共有したくない場合やGNU LGPL version 3の条項に準拠できない場合、プロプライエタリ / 商用ソフトウェアの開発に適している。
LGPL version 3の下でライセンスされたQtは、GNU LGPL version 3またはGNU GPL version 3の条項と条件に従うことができれば、Qtアプリケーションの開発に適している。

Qtマーケットプレイスライセンス契約に基づいてライセンスされたQtコンポーネントは、
商用またはGNU LGPL version 3またはGNU GPL version 3の条件に基づいてライセンスされたQtソフトウェアコンポーネントと共通のQtアプリケーションの開発に適している。

Qtには、元の開発者から特定のオープンソースライセンスの下でライセンスされているサードパーティのコードも含まれている。
また、Qtのサンプルは、The Qt Companyの商用ライセンスおよびBSD 3条項ライセンスの下で入手可能である。

Qtライセンスの概要については、http://qt.io/licensing/ を参照すること。


通常のインストール

依存関係のライブラリのインストール

Qtの実行に必要な依存関係のライブラリをインストールする。
これらのライブラリは不要な可能性がある。(調査中)

# RHEL
sudo dnf install mesa-libOSMesa-devel

# SUSE
sudo zypper install Mesa-devel Mesa-KHR-devel \
                    vulkan-headers  # Vulkanを使用するプロジェクト、および、Vulkanバックエンドを利用する可能性のある場合
または
sudo zypper install Mesa-KHR-devel Mesa-devel Mesa-dri-devel Mesa-libEGL-devel Mesa-libGL-devel Mesa-libGLESv1_CM-devel Mesa-libGLESv2-devel    \
                    Mesa-libglapi-devel kbproto-devel libOSMesa-devel libOSMesa8 libX11-devel libXau-devel libdrm-devel libgbm-devel            \
                    libglvnd-devel libxcb-devel libxcb-screensaver0 libxcb-xf86dri0 libxcb-xtest0 libxcb-xvmc0 pthread-stubs-devel xproto-devel \
                    xcb-util-cursor-devel xcb-util-image-devel xcb-util-renderutil-devel                                                        \
                    vulkan-headers  # Vulkanを使用するプロジェクト、あるいは、Vulkanバックエンドを使用する場合


  • Qt 6におけるVulkan headerの必要性
    Qt 6では、グラフィックスバックエンドの1つとしてVulkanをサポートしている。
    そのため、Vulkanを使用するプロジェクトやVulkanバックエンドを利用する可能性のある場合には、Vulkan headerが必要になる。
  • Vulkan headerの用途
    Vulkan headerは、以下に示すような目的で使用される。
    Vulkan APIの定義: 関数プロトタイプ、構造体、定数等の定義を提供する。
    Vulkanを使用したグラフィックス処理: 3Dレンダリングや計算処理を行う際に必要な関数や構造体を定義する。
    Qt 6のVulkanバックエンド: Qt 6がVulkanバックエンドを使用する際に必要な情報を提供する。


Vulkanサポートを無効にするいくつかの方法を、以下に示す。

  • Qt変数を使用して、Vulkanサポートを無効にする。
    set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
    set(CMAKE_DISABLE_FIND_PACKAGE_Vulkan TRUE)

  • find_packageコマンドを使用して、Vulkanサポートを無効にする。
    特定のQtライブラリでVulkanが使用されている場合、該当ライブラリのfind_packageコマンドの実行時にOPTIONALフラグを追加する。
    これにより、Vulkan headerの検索に失敗してもエラーにはならない。
    find_package(Qt6 COMPONENTS Gui OPTIONAL_COMPONENTS Vulkan)

  • 特定のQt機能を無効にして、Vulkanサポートを無効にする。
    特定のQt機能がVulkanを必要としている場合、それらの機能を無効にする。
    set(QT_FEATURE_vulkan OFF CACHE BOOL "" FORCE)


Qtのダウンロード

最新版のQtをダウンロードするため、以下のコマンドを実行する。
ファイル情報を知りたい場合はこのWebサイトを参照する。

wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run

ダウンロードしたファイルのアクセス権限を変更する。

chmod u+x qt-unified-linux-x64-online.run


Qtのインストール

/usr/localディレクトリ等にインストールする場合は、スーパーユーザでインストールする。
ホームディレクトリにインストールする場合は、ローカルユーザでインストールする。

次に、GCCおよびmake、付随するライブラリをインストールする。

# RHEL
sudo dnf groupinstall "Development tools"

# SUSE
sudo zypper install --type pattern devel_basis


Qtをインストールする。

./qt-unified-linux-x64-online.run


Qtのインストール画面に従って、インストールを実行する。

Qtをインストールした後、必要ならば、以下のコマンドを実行する。
これは、pkg-configコマンドが指すディレクトリを変更する設定である。

cd /<Qtのインストールディレクトリ>/<Qtのバージョン>/gcc_64/lib
cp ./pkgconfig ./pkgconfig_org

cd /<Qtのインストールディレクトリ>/<Qtのバージョン>/gcc_64/lib/pkgconfig
sed -i -e "s/prefix=\/home\/qt\/work\/install/prefix=\/<Qtのインストールディレクトリ>\/<Qtのバージョン>\/gcc_64/g" ./*



ソースコードからインストール

必須環境

  • Qt 6.0以降
  • Qt WebEngine module for QtWebEngine based help viewer
  • GCC 7以降
  • オプション : CMake
    CMakeを使用してLLVM / ClangとQt Creatorをビルドする時に必要である。
  • オプション : Ninja
    CMakeを使用してビルドする時に必要である。
  • オプション : LLVM / Clang 8.0.0以降
    Clang Code Model、Clang Tools、ClangFormat、Clang PCH Manager、Clang Refactoringプラグインに必要である。
    LLVM C++ APIは互換性を保証するものではないので、それ以降のバージョンがコンパイルできない場合は、そのバージョンをサポートしていない。
  • オプション : Qbs 1.7.x
    Qtのソースコードには、Qbs自身も含まれている。


また、Qtをビルドする時のオプション設定を以下に記載する。

# オプション : 環境変数PATHにおいて、llvm-configのパスが通っていない場合に必要である
export LLVM_INSTALL_DIR=<LLVMのインストールディレクトリ>

# オプション : Clangのリファクタリングを無効にする場合、1を設定する
export QTC_DISABLE_CLANG_REFACTORING=1

# オプション : QbsProjectManagerプラグインがQbsを使用する場合に必要である
export QBS_INSTALL_DIR=/path/to/qbs

# オプション : KSyntaxHighlightingを使用する場合、KSYNTAXHIGHLIGHTING_LIB_DIRライブラリを保持するディレクトリを設定する
# インクルードディレクトリの自動推定に失敗する場合、KSYNTAXHIGHLIGHTING_INCLUDE_DIRを設定して、
# 両方の設定をqmakeコマンドのオプションで渡すこともできる
export KSYNTAXHIGHLIGHTING_INCLUDE_DIR=<インクルードファイルを保持するディレクトリ>
export KSYNTAXHIGHLIGHTING_LIB_DIR=<ライブラリを保持するディレクトリ>


依存関係のライブラリのインストール

Qtのソースコードをコンパイルするために必要な依存関係のライブラリをインストールする。

sudo zypper install git-core gcc-c++ make flex bison gperf libicu-devel python3 perl \
                    mozilla-nss-devel nodejs10 nodejs10-devel ruby mozilla-nspr-devel \
                    xorg-x11-libxcb-devel xcb-util-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel \
                    xcb-util-wm-devel xorg-x11-devel libxkbcommon-x11-devel libxkbcommon-devel libXi-devel \
                    dbus-1-devel libXcomposite-devel libXcursor-devel libXrandr-devel libXtst-devel wayland-devel \
                    pulseaudio-libs-devel alsa-devel alsa-lib-devel gstreamer1-devel gstreamer1-plugins-base-devel


  • fontconfig-devel
  • libfontenc-devel
  • libXft-devel
  • libx11-devel
  • libxcb-devel
  • libXext-devel
  • libXfixes-devel
  • libXrender-devel
  • Mesa-libGL-devel
  • libXinerama-devel
  • libxcb-shm0-dev
  • libxcb-sync0-dev
  • libxcb-shape0-dev


ソースコードのダウンロード

Qtのソースコードをダウンロードする。

git clone --recursive https://code.qt.io/qt-creator/qt-creator.git


ソースコードのビルド

Qtのソースコードをビルドするため、ビルド用のディレクトリを作成する。

mkdir build
cd build


  • qmakeを使用する場合
    オプションのClang Code Modelプラグインをビルドする場合、LLVMのインストールディレクトリへのパスを指定する必要がある。
    export LLVM_INSTALL_DIR=<LLVMのインストールディレクトリ>
    qmake ../qt-creator/qtcreator.pro
    make qmake_all
    make -j $(nproc)
    もし、Project ERROR: Unknown module(s) in QT: scriptというエラーが出力される場合、以下のコマンドを実行する。
    make -j $(nproc) module-qtscript

  • cmakeを使用する場合
    Qtのソースコードをビルドする。
    cmake -G Ninja -D CMAKE_BUILD_TYPE=Release -D CMAKE_PREFIX_PATH=<Qtのインストールディレクトリ>; <LLVMのインストールディレクトリ> ../qt-creator
    cmake --build .. --parallel $(nproc)


コンパイルには時間が掛かることに注意する。(バイナリファイルは、qt-createor-build/binディレクトリに作成される)

Qtのインストール

Qtをインストールする。

# qmakeを使用する場合
make install

# cmakeを使用する場合
cmake --install ..



Qtのインストールディレクトリの設定

Qtのインストールディレクトリを環境変数に設定することができる。
この環境変数QT_INSTALL_PREFIXは、QtツールやビルドシステムがQtのインストールディレクトリを探す時に使用される。

 export QT_INSTALL_PREFIX=<Qtのインストールディレクトリ>


Qtのインストールディレクトリを確認する場合は、以下に示すコマンドを実行する。

qtpaths --install-prefix



Qtのインストールディレクトリの指定 (CMakeコマンド)

CMakeを使用する場合、Qtのインストールディレクトリを指定する場合は、CMakeコマンドのCMAKE_PREFIX_PATHオプションを付加する。

cmake -DCMAKE_PREFIX_PATH=<Qtのインストールディレクトリ> ..


または、CMakeLists.txtに明示的に設定することもできる。

 set(CMAKE_PREFIX_PATH "<Qtのインストールディレクトリ>")



デスクトップエントリの追加

以下のコマンドを実行して、デスクトップエントリを追加する。

vi ~/.local/share/applications/Qt_Creator.desktop


# Qt_Creator.desktopファイル

[Desktop Entry]
Type=Application
Exec=/<Qt 6のインストールディレクトリ>/Tools/QtCreator/bin/qtcreator %F
Name=Qt Creator <バージョン名>
GenericName=Qt Creator
Icon=QtProject-qtcreator
StartupWMClass=qtcreator
Terminal=false
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;


vi ~/.local/share/applications/Qt_MaintenanceTool.desktop


# Qt_MaintenanceTool.desktopファイル

[Desktop Entry]
Type=Application
Path=/home/<ユーザ名>/Qt
Name=Qt Maintenance Tool
GenericName=Install or uninstall Qt components.
Exec=/<Qt 6のインストールディレクトリ>/MaintenanceTool
Icon=/home/<ユーザ名>/Qt/QtIcon.png
Terminal=false
Categories=Development;Qt;


vi ~/.local/share/applications/Qt_Designer.desktop


# Qt_Designer.desktopファイル

[Desktop Entry]
Type=Application
Name=Qt Designer <バージョン名>
GenericName=Qt Designer
Comment=
Path=
Exec=/<Qt 6のインストールディレクトリ>/<バージョン名>/gcc_64/bin/designer %F
Icon=/home/<ユーザ名>/.icons/Qt_Designer.png
StartupNotify=true
StartupWMClass=qtdesigner
Terminal=false
TerminalOptions=
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=



日本語入力

専用のインストーラからQtをインストールする場合、Qt Creatorにおいて、Fcitxで日本語が入力できない問題が存在する。

これは、plugins/platforminputcontextsディレクトリにlibfcitxplatforminputcontextplugin.soファイルが欠如しているため、IMEの切り替えができないからである。
そのため、ユーザがlibfcitxplatforminputcontextplugin.soファイルを含むfcitx-qt5ライブラリを、ソースコードからビルドしてインストールする必要がある。

FcitxおよびFcitx5を使用している場合で手順が異なることに注意すること。

Fcitxを使用している場合

fcitx-qt5ライブラリ(Fcitx)をインストールする。

  1. まず、Qt Creatorを起動して、[ヘルプ]メインメニューから[About Qt Creator...]を選択、バージョン情報を確認する。
    以下の画像では、Qt Creatorのバージョンは6.0.2、Qt Creatorのビルドに使用されたQt SDKは6.2.2となっている。
    Install Qt 1.png

  2. fcitx-qt5のインストールに必要な依存関係のライブラリをインストールする。
    sudo zypper install extra-cmake-modules libxkbcommon-devel
  3. fcitx-qt5のソースコードをダウンロードする。
    git clone https://github.com/fcitx/fcitx-qt5.git
  4. もし、上記の画像のように、Qt Creatorのビルドに使用されたQt SDKが6の場合、
    Qtメンテナンスツールを起動して、[コンポーネントの追加または削除]から該当するQtのバージョン以降の[Desktop gcc 64-bit]のみをインストールする。

  5. ダウンロードしたfcitx-qt5のディレクトリに移動して、ビルド向けディレクトリを作成する。
    cd fcitx-qt5 && mkdir build && cd build
  6. fcitx-qt5ライブラリをビルドおよびインストールする。
    インストールディレクトリは、自動的に/<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontextsディレクトリにインストールされる。
    • Qt Creatorのビルドに使用されたQt SDKが5の場合
      export PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/bin:$PATH"
      export CPATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/include:$CPATH"
      export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
      export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
      export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"

    • Qt Creatorのビルドに使用されたQt SDKが6の場合
      export PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/bin:$PATH"
      export CPATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/include:$CPATH"
      export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
      export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
      export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"

    • ビルドおよびインストール
      ENABLE_LIBRARY=$(pkg-config --exists fcitx icu-uc && echo ON || echo OFF) && \
      cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \
      -DCMAKE_C_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> -DCMAKE_CXX_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> \
      -DCMAKE_BUILD_TYPE=Release \
      -DENABLE_QT4=<Qt Creatorのビルドに使用されたQt SDKが4の場合はon、それ以外はoff> \
      -DENABLE_QT5=<Qt Creatorのビルドに使用されたQt SDKが5の場合はon、それ以外はoff> \
      -DENABLE_QT6=<Qt Creatorのビルドに使用されたQt SDKが6の場合はon、それ以外はoff> \
      -DCMAKE_PREFIX_PATH=/<Qt 5のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが5の場合
      -DCMAKE_PREFIX_PATH=/<Qt 6のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが6の場合

      make -j $(nproc)
      make install
  7. インストールしたlibfcitxplatforminputcontextplugin.soファイルを、/<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontextsディレクトリに配置する。
    これにより、Qt Creator等において、FcitxでのIMEの切り替えができるようになる。

    ただし、Qt Creatorをアップデートする場合は、fcitx-qt5を再インストールする必要があるため注意すること。

    cp /<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so \
    /<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts


Fcitx5を使用している場合

fcitx5-qtライブラリ(Fcitx5)をインストールする。

  1. まず、Qt Creatorを起動して、[ヘルプ]メインメニューから[About Qt Creator...]を選択、バージョン情報を確認する。
    以下の画像では、Qt Creatorのバージョンは6.0.2、Qt Creatorのビルドに使用されたQt SDKは6.2.2となっている。
    Install Qt 1.png

  2. fcitx-qt5のインストールに必要な依存関係のライブラリをインストールする。
    sudo zypper install cmake extra-cmake-modules libxkbcommon-devel fcitx5-devel
  3. fcitx-qt5のソースコードをダウンロードする。
    git clone https://github.com/fcitx/fcitx5-qt
  4. もし、上記の画像のように、Qt Creatorのビルドに使用されたQt SDKが6の場合、
    Qtメンテナンスツールを起動して、[コンポーネントの追加または削除]から該当するQtのバージョン以降の[Desktop gcc 64-bit]のみをインストールする。

  5. ダウンロードしたfcitx5-qtのディレクトリに移動して、ビルド向けディレクトリを作成する。
    cd fcitx5-qt && mkdir build && cd build
  6. fcitx5-qtライブラリをビルドおよびインストールする。
    インストールディレクトリは、自動的に/<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontextsディレクトリにインストールされる。
    • Qt Creatorのビルドに使用されたQt SDKが5の場合
      export PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/bin:$PATH"
      export CPATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/include:$CPATH"
      export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
      export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
      export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"

    • Qt Creatorのビルドに使用されたQt SDKが6の場合
      export PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/bin:$PATH"
      export CPATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/include:$CPATH"
      export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
      export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
      export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"

    • ビルドおよびインストール
      cmake .. \
      -DCMAKE_C_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> -DCMAKE_CXX_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> \
      -DCMAKE_BUILD_TYPE=Release \
      -DENABLE_X11=ON \ # X11を使用している場合
      -DBUILD_ONLY_PLUGIN=ON \ # プラグインのみをインストールする場合
      -DENABLE_QT4=<Qt Creatorのビルドに使用されたQt SDKが4の場合はon、それ以外はoff> \
      -DENABLE_QT5=<Qt Creatorのビルドに使用されたQt SDKが5の場合はon、それ以外はoff> \
      -DENABLE_QT6=<Qt Creatorのビルドに使用されたQt SDKが6の場合はon、それ以外はoff> \
      -DCMAKE_PREFIX_PATH=/<Qt 5のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが5の場合
      -DCMAKE_PREFIX_PATH=/<Qt 6のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが6の場合

      # または

      export ENABLE_LIBRARY=$(pkg-config --exists fcitx icu-uc && echo ON || echo OFF) && \
      cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \
      -DCMAKE_C_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> -DCMAKE_CXX_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> \
      -DCMAKE_BUILD_TYPE=Release \
      -DENABLE_QT4=<Qt Creatorのビルドに使用されたQt SDKが4の場合はon、それ以外はoff> \
      -DENABLE_QT5=<Qt Creatorのビルドに使用されたQt SDKが5の場合はon、それ以外はoff> \
      -DENABLE_QT6=<Qt Creatorのビルドに使用されたQt SDKが6の場合はon、それ以外はoff> \
      -DCMAKE_PREFIX_PATH=/<Qt 5のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが5の場合
      -DCMAKE_PREFIX_PATH=/<Qt 6のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが6の場合

      make -j $(nproc)
      make install
  7. インストールしたlibfcitxplatforminputcontextplugin.soファイルを、/<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontextsディレクトリに配置する。
    これにより、Qt Creator等において、FcitxでのIMEの切り替えができるようになる。

    ただし、Qt Creatorをアップデートする場合は、fcitx-qt5を再インストールする必要があるため注意すること。

    cp /<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so \
    /<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts



WebAssemblyの開発

Emscripten SDKのインストール

Emscripten SDKは、全てのSDKのメンテナンスを実行するために使用される。
SDKをインストールするのは1度だけで、その後はEmscripten SDKが全てのアップデートを行う。

Emscripten SDKを使用すると、任意のSDKまたはツールをダウンロード、インストール、削除することができ、Githubで開発中の最先端のバージョンを使用することもできる。

Emscripten SDKのGithubにアクセスして、ファイルをダウンロードする。
ダウンロードしたファイルを解凍する。また、必要であれば、任意のディレクトリに配置する。

tar xf emsdk-<バージョン>.tar.gz
cd emsdk-<バージョン>


Emscripten SDKの使用方法

Emscripten SDKのインストールディレクトリに移動する。

  • 利用可能なツールの最新のレジストリを取得する。
./emsdk update


  • 最新のSDKツールをダウンロードしてインストールする。
./emsdk install latest


  • 最新のSDKを指すようにコンパイラを設定する。
./emsdk activate latest


環境変数の設定

~/.profileファイル等にEmscripten SDKの環境変数に追加する。

 # ~/.profileファイル等
 
 export PATH="$HOME/InstallSoftware/Emscripten_SDK:$PATH"
 export PATH="$HOME/InstallSoftware/Emscripten_SDK/upstream/emscripten:$PATH"


また、emsdk_env.shファイルを実行することにより、現在のシェルに対して環境変数を追加することもできる。

source "/<Emscripten SDKのインストールディレクトリ>/emsdk_env.sh"



Felgoのインストール

Felgoとは

Felgoは、Qtフレームワークをベースに大幅に拡張したクロスプラットフォームのソフトウェア開発ソリューションであり、
PC、Android、iOS、Web(WebAssembly)、組み込みシステム等の多くのプラットフォームでネイティブに動作する。

Felgoは、以下に示すような独自のQt/QMLツール、クラウドサービス、Qtを拡張する200以上のAPIを追加したFelgo SDKを提供している。

  • 高度なコントロールとネイティブなナビゲーション
  • テーマとスタイル
  • レイアウト
  • ファイル操作(ローカル/リモート)
  • データ管理とモデル/ビュー
  • マルチメディア
  • RESTネットワーク(※)
  • ネイティブなダイアログと機能


※RESTとは
Webシステムに適用したソフトウェアの設計様式のことであり、パラメータを指定して特定のURLにHTTPでアクセスする時、
XMLやJSONなどで記述されたメッセージが送られてくるようなシステム、および、そのような呼び出し規約のことである。

本来のRESTの設計原則は主として以下の4つの項目からなる。

  • セッション等の状態管理を行わず、やり取りされる情報はそれ自体で完結して解釈することができる。(WebではHTTP自体にはセッション管理の機構はない)
  • 情報を操作する命令の体系が予め定義・共有されている。(WebではHTTPメソッドに相当)
  • 全ての情報は汎用的な構文で一意に識別される。(URL/URIに相当)
  • 情報の一部として、別の状態や別の情報への参照を含めることができる。(ハイパーメディア的な書式で情報を表現する。HTMLやXMLに相当)


Felgoのインストール

既存のQtにFelgoを拡張機能として追加することができる。

まず、FelgoのQt Marketplaceにアクセスおよびログインした後、[Qt extension]を選択する。
必要な情報を入力して、[Continue to payment]を選択する。

次に、Qtメンテナンスツールを起動して、[コンポーネントの選択]画面の[Marketplace]項目でFelgoを選択およびインストールする。
もし、Felgoをインストールできない場合は、Felgoインストーラを使用して、既存のQtとは別にFelgoをインストールする。

※注意
最新版のQtに対応したFelgoがまだリリースされていない場合は、Felgoはビルドキットに追加されない。

Felgoのアカウントの削除する場合は、Felgoの公式Webサイトにアクセスおよびログインする。
アカウント設定ページ右の[Edit] - アカウント設定ページ下の[Account Termination Request] - [Delete Account]ボタンを押下する。


Raspberry Piのクロスコンパイル

Raspberry Piでクロスコンパイルを行う場合、インストール_-_Qt6_Raspberry_Piのページを参照すること。


PinePhoneのクロスコンパイル

PinePhoneでクロスコンパイルを行う場合、インストール_-_Qt6_PinePhoneのページを参照すること。


OpenSSL 3のインストールおよび設定

Qt 6において、QNetworkAccessManagerクラス等を使用する場合、以下に示すようなエラーが発生する場合がある。

qt.tlsbackend.ossl: Incompatible version of OpenSSL (built with OpenSSL >= 3.x, runtime version is < 3.x)


これは、Qt 6が古いバージョンのOpenSSLを参照しているために発生する。
これを解決するには、QtオンラインインストーラからOpenSSL 3.x.xのソースコードをダウンロードして、ビルドおよびインストールすることを推奨する。

まず、Qtオンラインインストーラを起動して、[コンポーネントの選択]画面から[Qt] - [Developer and Designer Tools] - [OpenSSL 3.x.x Toolkit]にチェックを入力する。
[次へ]ボタンを押下して、OpenSSL 3.x.xのソースコードをダウンロードする。

ダウンロードが完了した後、/<Qtのインストールディレクトリ>/Tools/OpenSSLv3/srcディレクトリに移動する。

cd /<Qtのインストールディレクトリ>/Tools/OpenSSLv3/src


OpenSSL 3.x.xをビルドおよびインストールする。

mkdir build && cd build

../Configure --prefix=<OpenSSL3のインストールディレクトリ>
make -j $(nproc)
make install


OpenSSL 3.x.xをQt Creatorで使用するため、環境変数を設定する。

  1. Qt Creatorを起動する。
  2. Qt Creatorの画面左にある[プロジェクト]を選択する。
  3. [ビルドと実行]から、該当するキットの[実行]を選択する。
  4. [実行環境]セクションで、[環境]セクションから[この実行構成用の基本環境:]プルダウンから[ビルド時の環境変数]を選択して、以下に示す環境変数を追加する。
PATH=+/<OpenSSL3のインストールディレクトリ>/bin
LD_LIBRARY_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64
PKG_CONFIG_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64/pkgconfig
OPENSSL_CONF=/<OpenSSL3のインストールディレクトリ>/ssl/openssl.cnf


Install Qt 2.png


または、以下に示す方法でもOpenSSL 3.x.xを設定することができる。

  1. [ビルドと実行]から、該当するキットの[ビルド]を選択する。
  2. [CMake]セクションの[Base environment the CMake configure step:]プルダウンから[System Environment]を選択して、以下に示す環境変数を追加する。
PATH=+/<OpenSSL3のインストールディレクトリ>/bin
LD_LIBRARY_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64
PKG_CONFIG_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64/pkgconfig
OPENSSL_CONF=/<OpenSSL3のインストールディレクトリ>/ssl/openssl.cnf


Install Qt 3.png



メニューバーの表示 / 非表示

メニューバーの表示 / 非表示を切り替えて、画面上のスペースを節約することができる。

[表示]メインメニュー - [メニューバーを表示]チェックボックスの選択を解除する。
メニューバーを再度表示するには、[Ctrl] + [Alt] + [M]キーを同時押下する。


エラー関連

libdbusに関する問題

以下に示すようなlibdbusに関するコンパイルエラーが発生する場合がある。

# ...略

/<GCCクロスコンパイラのパス>/bin/ld: /<PinePhoneのシステムルート>/usr/lib/aarch64-linux-gnu/libdbus-1.a(libdbus_1_la-dbus-message.o):
relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `dbus_message_unref' which may bind externally can not be used when making a shared object; recompile with -fPIC

# ...略


これは、システムルート内にあるlibdbusが動的共有オブジェクトでない場合に発生する可能性がある。
これは通常、Mobian / Manjaro ARMの再インストールすることで解決できる。

別の方法としては、libdbus-1-devパッケージを再インストールすることである。
しかし、この問題が解決せず、D-Busが不要の場合は-DFEATURE_dbus=OFFオプションを付加することにより、D-Bus機能を無効にすることができる。

さらに別の方法として、set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")の行を、
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -ldbus-1")に変更する。
この場合、/<PinePhoneのシステムルート>/usr/lib/aarch64-linux-gnu/libdbus-1.soへのリンクが有効であることを確認する。
(同階層のディレクトリのlibdbus-1.so.X.XX.XXにリンクされているはずである)

※注意
Bluetoothモジュールを動作させるにはD-Bus機能が必要である。

libstdc++のエラー

デバッグ時において、以下に示すようなエラーが出力される場合はある。

/Path/to/<Project Name>/bin/<Binary Name>: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.XX' not found (required by /Path/to/Qt6 Library/lib/libQt6Qml.so.6)


クロスコンパイラのlibstdc++.so.6ファイルにおいて、ターゲットとなるOSのlibstdc++.so.6ファイルのバージョンと同等または古いものを使用する必要がある。
例えば、Debian 12 (Mobian 12)はGLIBCXX_3.4.30であるため、GCC 12.2ツールチェーン以前のものを使用する。

以下に示すコマンドを実行して、GLIBCXXのバージョンを確認することができる。

# クロスコンパイラ
strings /<クロスコンパイラのインストールディレクトリ>/<アーキテクチャ名  例: aarch64-linux-gnu>/lib64/libstdc++.so.6 | grep -E '^GLIBCXX'

# Manjaro
strings /usr/lib/libstdc++.so.6 | grep -E '^GLIBCXX'

# Mobian
strings /usr/lib/aarch64-linux-gnu/libstdc++.so.6 | grep -E '^GLIBCXX'


AT-SPI2の警告

Qt6ライブラリを使用してプロジェクトをクロスコンパイルして実行する時、以下に示すようなAT-SPI2に関するエラーが出力される場合がある。

qt.accessibility.atspi Error Not connected to D-Bus server


もし、アクセシビリティが不要な場合、Qt6ライブラリのコンパイルにおいて、cmakeコマンドにアクセシビリティを無効にするオプションを付加する。

-DQT_FEATURE_accessibility=OFF
-DQT_FEATURE_accessibility_atspi_bridge=OFF


GDBデバッグ実行時におけるキャッシュファイルの警告

デバッグ実行時において、以下に示すような警告が非常に多く出力される場合がある。

index cache: could not make cache directory: Permission denied


この警告は、デバッグ実行時のターゲットデバイスのディレクトリが存在しない場合、または、該当ディレクトリに書き込み権限が無い場合に出力される。

この警告を抑制する場合は、以下に示す設定を行う。

  1. Qt Creatorの[編集]メニューバー - [Preferences...]を選択する。
  2. [設定]ダイアログが開くので、画面左ペインにある[デバッガ] - 画面右ペインにある[GDB]タブ - [追加の起動コマンド]に、以下に示す設定を入力する。
    set index-cache directory /tmp/GDB


この設定により、/tmp/GDBディレクトリにデバッグ関連のログファイルが出力されるようになる。