|   |     | 
| (同じ利用者による、間の72版が非表示) | 
| 1行目: | 1行目: | 
|  | == 概要 == |  | == 概要 == | 
|  | Qt 6のインストール手順およびクロスコンパイル手順を記載する。<br> |  | Qtは、デスクトップ、組み込み、モバイルプラットフォーム向けのソフトウェアやユーザーインターフェイスの作成を効率化するために設計されたツールを備えた完全な開発フレームワークである。<br> | 
|  |  | <br> | 
|  |  | Qt 6.2 LTSのサポート期間は、2024年9月30日まで、Qt 6.5 LTSのサポート期間は2026年3月30日までである。<br> | 
|  |  | <br> | 
|  |  | Qtライセンスを購入するには、http://www.qt.io/download/ を参照すること。<br> | 
|  | <br> |  | <br> | 
|  | <center> |  | <center> | 
|  | {| class="wikitable" |  | {| class="wikitable" | style="background-color:#fefefe;" | 
|  | |-   |  | |-   | 
|  | ! colspan="3" style="background-color:#44CC99;" | 参考書 |  | ! colspan="3" style="background-color:#44CC99;" | 参考書 | 
|  | |- style="text-align: center; background-color:white;" |  | |- style="text-align: center;" | 
|  | | style="width: 33%" | <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=li2&tag=presire0207-22&linkId=dd630ee679a92570459f39026d3b6578&language=ja_JP&ref_=as_li_ss_il" target="_blank"><imgborder="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=148427489X&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=presire0207-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=presire0207-22&language=ja_JP&l=li2&o=9&a=148427489X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></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=presire0207-22&linkId=4a37d512cf583179c90525df52d5b1cf&language=ja_JP&ref_=as_li_ss_tl Introducing Qt 6<br>C++でモバイルとデスクトップ向けのアプリとゲームを作ることを学ぶ] |  | | 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%" | <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=li2&tag=presire0207-22&linkId=fd7d0cd75679d17de74d6aa8360e549f&language=ja_JP&ref_=as_li_ss_il" target="_blank"><imgborder="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=1800204582&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=presire0207-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=presire0207-22&language=ja_JP&l=li2&o=9&a=1800204582" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></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=presire0207-22&linkId=b67f7214a5665f3a7949548e96f7da19&language=ja_JP&ref_=as_li_ss_tl Cross-Platform Development with Qt 6 and Modern C++<br>プラットフォーム依存性を気にすることなく、<br>モダンなグラフィカルユーザーインターフェースを持つアプリケーションを設計・構築する] |  | | 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%" | <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=li2&tag=presire0207-22&linkId=4250d54c01122c4bb48525c5161a1dd9&language=ja_JP&ref_=as_li_ss_il" target="_blank"><imgborder="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B08XLLDZSG&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=presire0207-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=presire0207-22&language=ja_JP&l=li2&o=9&a=B08XLLDZSG" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></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=presire0207-22&linkId=19f6ee05b3c416c7d5f91d6bbf95e3a7&language=ja_JP&ref_=as_li_ss_tl A Guide to Qt 6<br>Qt 6の初心者向けガイド] |  | | 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> | 
|  |  |  | 
|  |  | == Qt ライセンス == | 
|  |  | Qtは、様々なユーザのニーズに対応できるよう、様々なライセンスオプションが用意されている。<br> | 
|  |  | <br> | 
|  |  | 商用ライセンスでライセンスされたQtは、第三者とソースコードを共有したくない場合やGNU LGPL version 3の条項に準拠できない場合、プロプライエタリ / 商用ソフトウェアの開発に適している。<br> | 
|  |  | LGPL version 3の下でライセンスされたQtは、GNU LGPL version 3またはGNU GPL version 3の条項と条件に従うことができれば、Qtアプリケーションの開発に適している。<br> | 
|  |  | <br> | 
|  |  | Qtマーケットプレイスライセンス契約に基づいてライセンスされたQtコンポーネントは、<br> | 
|  |  | 商用またはGNU LGPL version 3またはGNU GPL version 3の条件に基づいてライセンスされたQtソフトウェアコンポーネントと共通のQtアプリケーションの開発に適している。<br> | 
|  |  | <br> | 
|  |  | Qtには、元の開発者から特定のオープンソースライセンスの下でライセンスされているサードパーティのコードも含まれている。<br> | 
|  |  | また、Qtのサンプルは、The Qt Companyの商用ライセンスおよびBSD 3条項ライセンスの下で入手可能である。<br> | 
|  |  | <br> | 
|  |  | Qtライセンスの概要については、http://qt.io/licensing/ を参照すること。<br> | 
|  | <br><br> |  | <br><br> | 
|  | 
 |  | 
 | 
| 18行目: | 92行目: | 
|  | Qtの実行に必要な依存関係のライブラリをインストールする。<br> |  | Qtの実行に必要な依存関係のライブラリをインストールする。<br> | 
|  | これらのライブラリは不要な可能性がある。(調査中)<br> |  | これらのライブラリは不要な可能性がある。(調査中)<br> | 
|  |   sudo zypper install Mesa-devel Mesa-KHR-devel |  |  # 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 \ |  |   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> | 
|  |  |  | 
|  | ==== Qtのダウンロード ==== |  | ==== Qtのダウンロード ==== | 
|  | 最新版のQtをダウンロードするため、以下のコマンドを実行する。<br> |  | 最新版のQtをダウンロードするため、以下のコマンドを実行する。<br> | 
|  | ファイル情報を知りたい場合はこの[http://download.qt.io/official_releases/ Webサイト]を参照する。<br> |  | ファイル情報を知りたい場合はこの[http://download.qt.io/official_releases/ Webサイト]を参照する。<br> | 
|  |   wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run |  |  # x64向け | 
|  |  |   wget https://download.qt.io/official_releases/online_installers/qt-online-installer-linux-x64-online.run | 
|  |  |   | 
|  |  |  # ARM向け | 
|  |  |  https://download.qt.io/official_releases/online_installers/qt-online-installer-linux-arm64-online.run | 
|  |  | <br> | 
|  | ダウンロードしたファイルのアクセス権限を変更する。<br> |  | ダウンロードしたファイルのアクセス権限を変更する。<br> | 
|  |   chmod u+x qt-unified-linux-x64-online.run |  |   chmod u+x qt-unified-linux-x64-online.run | 
|  | <br> |  | <br> | 
|  |  |  | 
|  | ==== Qtのインストール ==== |  | ==== Qtのインストール ==== | 
|  | /usr/localディレクトリ等にインストールする場合は、スーパーユーザでインストールする。<br> |  | /usr/localディレクトリ等にインストールする場合は、スーパーユーザでインストールする。<br> | 
| 36行目: | 147行目: | 
|  | <br> |  | <br> | 
|  | 次に、GCCおよびmake、付随するライブラリをインストールする。<br> |  | 次に、GCCおよびmake、付随するライブラリをインストールする。<br> | 
|  |   # CentOS |  |   # RHEL | 
|  |   sudo yum groupinstall "Development tools" |  |   sudo dnf groupinstall "Development tools" | 
|  |     |  |     | 
|  |   # SUSE |  |   # SUSE | 
| 142行目: | 253行目: | 
|  |   # 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> | 
|  | 
 |  | 
 | 
| 260行目: | 392行目: | 
|  | #: <br> |  | #: <br> | 
|  | # fcitx-qt5のインストールに必要な依存関係のライブラリをインストールする。 |  | # fcitx-qt5のインストールに必要な依存関係のライブラリをインストールする。 | 
|  | #: <code>sudo zypper install extra-cmake-modules libxkbcommon-devel</code> |  | #: <code>sudo zypper install cmake extra-cmake-modules libxkbcommon-devel fcitx5-devel</code> | 
|  | # fcitx-qt5のソースコードをダウンロードする。 |  | # fcitx-qt5のソースコードをダウンロードする。 | 
|  | #: <code>git clone https://github.com/fcitx/fcitx5-qt</code> |  | #: <code>git clone https://github.com/fcitx/fcitx5-qt</code> | 
| 283行目: | 415行目: | 
|  | #*: <br> |  | #*: <br> | 
|  | #* ビルドおよびインストール |  | #* ビルドおよびインストール | 
|  | #*: <code>ENABLE_LIBRARY=$(pkg-config --exists fcitx icu-uc && echo ON || echo OFF) && \</code> |  | #*: <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>-DENABLE_QT6_WAYLAND_WORKAROUND=ON \  # Waylandを使用している場合</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>cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \</code> |  | #*: <code>cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \</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_C_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> -DCMAKE_CXX_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> \</code> | 
| 299行目: | 445行目: | 
|  | #: <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> | 
|  | 
 |  | 
 | 
| 342行目: | 525行目: | 
|  | <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>
 |  | 
|  |  # CentOS
 |  | 
|  |  sudo yum 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
 |  | 
|  |  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 |  |   ../Configure --prefix=<OpenSSL3のインストールディレクトリ> | 
|  |  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>
 |  | 
|  | 最後に、QtソフトウェアをRaspberry Piにデプロイする。<br>
 |  | 
|  |  rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" /<Qtソフトウェアを配置するディレクトリ> \
 |  | 
|  |  <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/<Qtソフトウェアをインストールするディレクトリ>
 |  | 
|  | <br>
 |  | 
|  |   |  | 
|  | ==== エラー関連 ====
 |  | 
|  | ===== libEGL warning: DRI2: failed to authenticate =====
 |  | 
|  | 以下のコマンドを実行する。<br>
 |  | 
|  |  sudo raspi-config
 |  | 
|  | <br>
 |  | 
|  | 次に、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択する。(KMSが有効になる)<br>
 |  | 
|  | 最後に、[Finish]を選択して終了する。<br>
 |  | 
|  | (このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする)<br>
 |  | 
|  | <br>
 |  | 
|  | ===== warning : GLX/DRI2 is not supported/failed to authenticate =====
 |  | 
|  | 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> |  | <br> | 
|  | ===== QtWebEngineのビルドとインストール ===== |  | OpenSSL 3.x.xをQt Creatorで使用するため、環境変数を設定する。<br> | 
|  | 次に、QtWebEngineのConfigureスクリプトを実行する。<br>
 |  | # Qt Creatorを起動する。 | 
|  |   /opt/Qt/5.15.2/bin/qmake /<QtWebEngineのソースコードがあるディレクトリ>-- -no-webengine-geolocation |  | # Qt Creatorの画面左にある[プロジェクト]を選択する。 | 
|  |  | # [ビルドと実行]から、該当するキットの[実行]を選択する。 | 
|  |  | # [実行環境]セクションで、[環境]セクションから[この実行構成用の基本環境:]プルダウンから[ビルド時の環境変数]を選択して、以下に示す環境変数を追加する。 | 
|  |  |  PATH=+/<OpenSSL3のインストールディレクトリ>/bin | 
|  |  |   LD_LIBRARY_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64 | 
|  |  |  PKG_CONFIG_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64/pkgconfig | 
|  |  |  OPENSSL_CONF=/<OpenSSL3のインストールディレクトリ>/ssl/openssl.cnf | 
|  | <br> |  | <br> | 
|  | 正常に終了する時、以下のようなサマリが表示される。<br>
 |  | [[ファイル:Install Qt 2.png|フレームなし|中央]] | 
|  |  QtWebEngine:
 |  | 
|  |   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> |  | <br> | 
|  | 最後に、QtWebEngineをビルドする。<br>
 |  | または、以下に示す方法でもOpenSSL 3.x.xを設定することができる。<br> | 
|  | もし、ビルドするPCのメモリが8[GB]以下の場合、NINJAJOBSを4以下にして、Ninjaの並列ビルドの量を制限する必要がある。<br>
 |  | # [ビルドと実行]から、該当するキットの[ビルド]を選択する。 | 
|  |  make -j $(nproc)
 |  | # [CMake]セクションの[Base environment the CMake configure step:]プルダウンから[System Environment]を選択して、以下に示す環境変数を追加する。 | 
|  |   または |  |   PATH=+/<OpenSSL3のインストールディレクトリ>/bin | 
|  |   make -j 4 NINJAJOBS=-j4 |  |   LD_LIBRARY_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64 | 
|  |     |  |   PKG_CONFIG_PATH=+/<OpenSSL3のインストールディレクトリ>/lib64/pkgconfig | 
|  |   make install |  |   OPENSSL_CONF=/<OpenSSL3のインストールディレクトリ>/ssl/openssl.cnf | 
|  | <br> |  | <br> | 
|  | ===== QtWebEngineのビルド時に発生する問題 =====
 |  | [[ファイル:Install_Qt_3.png|フレームなし|中央]] | 
|  | 下表は、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
 |  | 
|  | <br>
 |  | 
|  | GCC ARMツールチェーンにおいて、GCC 8以降が必要なため、Linaro社のGCC ARMツールチェーンは使用できない。<br>
 |  | 
|  | そのため、開発者がGCC ARMツールチェーンを作成する必要がある。<br>
 |  | 
|  | 詳細は、[[インストール - 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>
 |  | 
|  |  # CentOS
 |  | 
|  |  sudo yum 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>
 |  | 
|  | 必要に応じて、公開鍵認証を行う場合は、[[設定 - SSHの公開鍵認証|設定 - SSHの公開鍵認証]]を参照すること。<br>
 |  | 
|  | <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 pkg-config 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 libexpect-dev gconf2 gconf2-common libgconf2-dev \
 |  | 
|  |                        libdbus-1-3 libdbus-1-dev libdbus-c++-bin libdbus-c++-dev libsctp1 libsctp-dev libatspi2.0-0 libatspi2.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 libassimp5 libassimp-dev \
 |  | 
|  |                        libproxy-dev liblttng-ust1 liblttng-ust-common1 liblttng-ust-dev libb2-1 libb2-dev libsdl2-dev libdouble-conversion3 libdouble-conversion-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 \
 |  | 
|  |                        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                                      \
 |  | 
|  |                        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 \
 |  | 
|  |                          libwacom assimp fontconfig dbus dbus-c++ nss libxkbcommon alsa-lib libxinerama xorg-xinput xcb-util-xrm \
 |  | 
|  |                          pugixml libxslt openssl libproxy libb2 lttng-ust libglvnd \
 |  | 
|  |                          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<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 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 || 
 |  | 
|  | |-
 |  | 
|  | | アクセシビリティ || 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-dev ||
 |  | 
|  | |-
 |  | 
|  | | マルチメディア || 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> |  | <br> | 
|  | <code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br>
 |  | [表示]メインメニュー - [メニューバーを表示]チェックボックスの選択を解除する。<br> | 
|  |  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot
 |  | メニューバーを再度表示するには、[Ctrl] + [Alt] + [M]キーを同時押下する。<br> | 
|  |  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 (こちらを推奨する)<br>
 |  | 
|  | *: <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 Qt6ToolChain_for_PinePhone.cmake
 |  | 
|  | <br>
 |  | 
|  |  <syntaxhighlight lang="cmake">
 |  | 
|  |  # ToolChain_for_PinePhone.cmake
 |  | 
|  |  
 |  | 
|  |  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/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>
 |  | 
|  |   |  | 
|  | ===== Qtのビルド =====
 |  | 
|  | Qt 6をクロスビルドするため、クロスビルド向けディレクトリを作成する。<br>
 |  | 
|  |  mkdir build && cd build
 |  | 
|  | <br>
 |  | 
|  | Qt 6のクロスビルド向けの設定を行う。<br>
 |  | 
|  |  # 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
 |  | 
|  | <br>
 |  | 
|  | Qt 6をクロスビルドおよびインストールする。<br>
 |  | 
|  | また、Ninjaのビルドエラーの出力は、後方で起きている可能性があるため、テキストファイル等に一時的に出力した方がよい。<br>
 |  | 
|  |  cmake --build . --parallel $(nproc)  または  cmake --build . --parallel $(nproc) > compile.txt 2>&1
 |  | 
|  |  cmake --install .
 |  | 
|  | <br>
 |  | 
|  | GCC 13を使用してQt 6をビルドする場合、以下に示すようなエラーが出力される場合がある。<br>
 |  | 
|  | バグレポートURL : https://bugreports.qt.io/browse/QTBUG-111604?focusedCommentId=718489<br>
 |  | 
|  |  error: 'uint32_t' is not a member of 'std'; did you mean 'wint_t'?
 |  | 
|  | <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>
 |  | 
|  |   |  | 
|  | ===== 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> | 
|  | 
 |  | 
 | 
| 1,863行目: | 606行目: | 
|  | <u>※注意</u><br> |  | <u>※注意</u><br> | 
|  | <u>Bluetoothモジュールを動作させるにはD-Bus機能が必要である。</u><br> |  | <u>Bluetoothモジュールを動作させるにはD-Bus機能が必要である。</u><br> | 
|  |  | <br> | 
|  |  | ==== libstdc++のエラー ==== | 
|  |  | デバッグ時において、以下に示すようなエラーが出力される場合はある。<br> | 
|  |  |  /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) | 
|  |  | <br> | 
|  |  | クロスコンパイラのlibstdc++.so.6ファイルにおいて、ターゲットとなるOSのlibstdc++.so.6ファイルのバージョンと同等または古いものを使用する必要がある。<br> | 
|  |  | 例えば、Debian 12 (Mobian 12)はGLIBCXX_3.4.30であるため、GCC 12.2ツールチェーン以前のものを使用する。<br> | 
|  |  | <br> | 
|  |  | 以下に示すコマンドを実行して、GLIBCXXのバージョンを確認することができる。<br> | 
|  |  |  # クロスコンパイラ | 
|  |  |  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' | 
|  |  | <br> | 
|  |  | ==== AT-SPI2の警告 ==== | 
|  |  | Qt6ライブラリを使用してプロジェクトをクロスコンパイルして実行する時、以下に示すようなAT-SPI2に関するエラーが出力される場合がある。<br> | 
|  |  |  qt.accessibility.atspi Error Not connected to D-Bus server | 
|  |  | <br> | 
|  |  | もし、アクセシビリティが不要な場合、Qt6ライブラリのコンパイルにおいて、<code>cmake</code>コマンドにアクセシビリティを無効にするオプションを付加する。<br> | 
|  |  |  -DQT_FEATURE_accessibility=OFF | 
|  |  |  -DQT_FEATURE_accessibility_atspi_bridge=OFF | 
|  |  | <br> | 
|  |  |  | 
|  |  | ==== GDBデバッグ実行時におけるキャッシュファイルの警告 ==== | 
|  |  | デバッグ実行時において、以下に示すような警告が非常に多く出力される場合がある。<br> | 
|  |  |  index cache: could not make cache directory: Permission denied | 
|  |  | <br> | 
|  |  | この警告は、デバッグ実行時のターゲットデバイスのディレクトリが存在しない場合、または、該当ディレクトリに書き込み権限が無い場合に出力される。<br> | 
|  |  | <br> | 
|  |  | この警告を抑制する場合は、以下に示す設定を行う。 | 
|  |  | # Qt Creatorの[編集]メニューバー - [Preferences...]を選択する。 | 
|  |  | # [設定]ダイアログが開くので、画面左ペインにある[デバッガ] - 画面右ペインにある[GDB]タブ - [追加の起動コマンド]に、以下に示す設定を入力する。 | 
|  |  | #: <code>set index-cache directory /tmp/GDB</code> | 
|  |  | <br> | 
|  |  | この設定により、/tmp/GDBディレクトリにデバッグ関連のログファイルが出力されるようになる。<br> | 
|  | <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]] |