|   |   | 
| (同じ利用者による、間の42版が非表示) | 
| 1行目: | 1行目: | 
|  | == 概要 == |  | == 概要 == | 
|  | Qt 5のインストール手順およびクロスコンパイル手順を記載する。<br> |  | Qtは、デスクトップ、組み込み、モバイルプラットフォーム向けのソフトウェアやユーザーインターフェイスの作成を効率化するために設計されたツールを備えた完全な開発フレームワークである。<br> | 
|  |  | <br> | 
|  |  | Qt 5.15 LTSのサポート期間は、Qtレガシーライセンスは2023年5月26日まで、Qtサブスクリプションライセンスは2025年5月26日までである。<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;" | 
|  | | <html><a href="https://www.amazon.co.jp/Mastering-Qt-stunning-cross-platform-applications-ebook/dp/B07DH9YK9Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-1&linkCode=li2&tag=presire0207-22&linkId=6985d8b028d210742e6c127a918d80a1&language=ja_JP&ref_=as_li_ss_il" target="_blank"><imgborder="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07DH9YK9Q&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=B07DH9YK9Q" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></html><br>[https://www.amazon.co.jp/Mastering-Qt-stunning-cross-platform-applications-ebook/dp/B07DH9YK9Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-1&linkCode=ll1&tag=presire0207-22&linkId=129cc14a0538277f53ebad7f9bb485d5&language=ja_JP&ref_=as_li_ss_tl Mastering Qt 5<br>C++, Qt Widgets, QMLを使用したクロスプラットフォームアプリケーションの作成] || <html><a href="https://www.amazon.co.jp/Hands-Mobile-Embedded-Development-Raspberry-ebook/dp/B07RH6QM95?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-6&linkCode=li2&tag=presire0207-22&linkId=fd638b95ab8c00a2385dc30ca2d29968&language=ja_JP&ref_=as_li_ss_il" target="_blank"><imgborder="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07RH6QM95&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=B07RH6QM95" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></html><br>[https://www.amazon.co.jp/Hands-Mobile-Embedded-Development-Raspberry-ebook/dp/B07RH6QM95?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-6&linkCode=ll1&tag=presire0207-22&linkId=fa3acb1b8e7b6537f1f33fd02dd711eb&language=ja_JP&ref_=as_li_ss_tl Hands-On Mobile and Embedded Development with Qt 5<br>C++/QtでAndroid, iOS, Raspberry Pi用のアプリケーションを作成] || <html><a href="https://www.amazon.co.jp/Qt5-GUI-Programming-Cookbook-cross-platform/dp/1789803829?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-14&linkCode=li2&tag=presire0207-22&linkId=e44338d700b118f07a878c9edc2a8e14&language=ja_JP&ref_=as_li_ss_il" target="_blank"><imgborder="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=1789803829&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=1789803829" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></html><br>[https://www.amazon.co.jp/Qt5-GUI-Programming-Cookbook-cross-platform/dp/1789803829?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-14&linkCode=ll1&tag=presire0207-22&linkId=77ab51068e8a8bc8c4de4c3f40fe263c&language=ja_JP&ref_=as_li_ss_tl Qt5 C++ GUI Programming Cookbook<br>Qt5でクロスプラットフォームのアプリケーションの作成] |  | | <center><html><a href="https://www.amazon.co.jp/Mastering-Qt-stunning-cross-platform-applications-ebook/dp/B07DH9YK9Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-1&linkCode=ll1&tag=presire2-22&linkId=2118a0260e6e51aa7f7440827dee4266&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/71ZdxoixPvL._SL1500_.jpg" ></a></html><br>[https://www.amazon.co.jp/Mastering-Qt-stunning-cross-platform-applications-ebook/dp/B07DH9YK9Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-1&linkCode=ll1&tag=presire2-22&linkId=2118a0260e6e51aa7f7440827dee4266&language=ja_JP&ref_=as_li_ss_tl Mastering Qt 5<br>C++, Qt Widgets, QMLを使用したクロスプラットフォームアプリケーションの作成]</center> | 
|  |  | | <center><html><a href="https://www.amazon.co.jp/Hands-Mobile-Embedded-Development-Raspberry-ebook/dp/B07RH6QM95?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-6&linkCode=ll1&tag=presire2-22&linkId=fabbe4470bf7cb690cadc2cf00e7af96&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/91V16o+L03L._SL1500_.jpg" ></a></html><br>[https://www.amazon.co.jp/Hands-Mobile-Embedded-Development-Raspberry-ebook/dp/B07RH6QM95?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-6&linkCode=ll1&tag=presire2-22&linkId=fabbe4470bf7cb690cadc2cf00e7af96&language=ja_JP&ref_=as_li_ss_tl Hands-On Mobile and Embedded Development with Qt 5<br>C++/QtでAndroid, iOS, Raspberry Pi用のアプリケーションを作成]</center> | 
|  |  | | <center><html><a href="https://www.amazon.co.jp/Qt5-GUI-Programming-Cookbook-cross-platform/dp/1789803829?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-14&linkCode=ll1&tag=presire2-22&linkId=981d01e080c07e69b683bbd3eee91fd9&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/717s6aji8ZL._SL1360_.jpg" ></a></html><br>[https://www.amazon.co.jp/Qt5-GUI-Programming-Cookbook-cross-platform/dp/1789803829?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-14&linkCode=ll1&tag=presire2-22&linkId=981d01e080c07e69b683bbd3eee91fd9&language=ja_JP&ref_=as_li_ss_tl Qt5 C++ GUI Programming Cookbook<br>Qt5でクロスプラットフォームのアプリケーションの作成]</center> | 
|  | |} |  | |} | 
|  | </center> |  | </center> | 
|  |  | <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> | 
|  | 
 |  | 
 | 
| 16行目: | 37行目: | 
|  | Qtの依存関係のライブラリをインストールする。<br> |  | Qtの依存関係のライブラリをインストールする。<br> | 
|  | これらのライブラリは不要な可能性がある。(調査中)<br> |  | これらのライブラリは不要な可能性がある。(調査中)<br> | 
|  |  |  # RHEL | 
|  |  |  sudo dnf install mesa-libOSMesa-devel | 
|  |  |   | 
|  |  |  # SUSE | 
|  |   sudo zypper install Mesa-devel Mesa-KHR-devel |  |   sudo zypper install Mesa-devel Mesa-KHR-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 \ |  |   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 \ | 
| 34行目: | 59行目: | 
|  | <br> |  | <br> | 
|  | 次に、GCCおよびmake、付随するライブラリをインストールする。<br> |  | 次に、GCCおよびmake、付随するライブラリをインストールする。<br> | 
|  |   # CentOS |  |   # RHEL | 
|  |   sudo yum groupinstall "Development tools" |  |   sudo dnf groupinstall "Development tools" | 
|  |     |  |     | 
|  |   # SUSE |  |   # SUSE | 
| 445行目: | 470行目: | 
|  | <br><br> |  | <br><br> | 
|  | 
 |  | 
 | 
|  | == Raspberry Pi 3B / 4Bのクロスコンパイル == |  | == Raspberry Piのクロスコンパイル == | 
|  | ==== 概要 ====
 |  | Raspberry Piでクロスコンパイルを行う場合、[[インストール - Qt5 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:#00ffff;" | Raspberry Piの種類 
 |  | 
|  | ! style="background-color:#00ffff;" | Raspbian Stretch(32-bit) 
 |  | 
|  | ! style="background-color:#00ffff;" | Raspbian Buster(32-bit) 
 |  | 
|  | |-
 |  | 
|  | | Raspberry Pi Zero/W/WH<br>RaspberryPi 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.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.3.0-pi_0-1.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.2.0] 
 |  | 
|  | | 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.0]<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.0]<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.2.0]
 |  | 
|  | |-
 |  | 
|  | | 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.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.3.0-pi_2-3.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz/download 10.2.0]
 |  | 
|  | | 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.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.3.0-pi_2-3.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.2.0-pi_2-3.tar.gz/download 10.2.0]
 |  | 
|  | |-
 |  | 
|  | | 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.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.3.0-pi_3%2B.tar.gz/download 8.3.0]<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.2.0-pi_3%2B.tar.gz/download 10.2.0]
 |  | 
|  | | 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.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.3.0-pi_3%2B.tar.gz/download 9.3.0]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.2.0-pi_3%2B.tar.gz/download 10.2.0]
 |  | 
|  | |}
 |  | 
|  | </center>
 |  | 
|  | <br>
 |  | 
|  | また、Linero社が提供しているGCC ARMツールチェーンも使用することができる。<br>
 |  | 
|  | https://releases.linaro.org/components/toolchain/binaries/<br>
 |  | 
|  |  wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
 |  | 
|  |  tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
 |  | 
|  | <br>
 |  | 
|  | 上表にあるGCC ARM 8.3.0ツールチェーンが動作しない場合、以下のURLにあるGCC ARM 8.3.0ツールチェーンを試すこともできる。<br>
 |  | 
|  | https://bugfreeblog.page.link/rasplinuxgcc830
 |  | 
|  | <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:#00ffff;" | Raspberry Piの種類 
 |  | 
|  | ! style="background-color:#00ffff;" | 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>
 |  | 
|  |   |  | 
|  | ==== Raspberry Piの設定 ====
 |  | 
|  | 描画処理に時間が掛かる場合、Raspberry PiのVRAMを128[MB]や256[MB]程度に変更する。<br>
 |  | 
|  | * VRAMを変更する手順
 |  | 
|  | *: <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 libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
 |  | 
|  |                       libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-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
 |  | 
|  |                       python (QtQuickを使用する場合) \
 |  | 
|  |                       libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
 |  | 
|  |  
 |  | 
|  |  # XCBを使用する場合
 |  | 
|  |  sudo apt-get install ccache libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
 |  | 
|  |                       libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-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 \
 |  | 
|  |                       python (QtQuickを使用する場合) \
 |  | 
|  |                       libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合) \
 |  | 
|  |                       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
 |  | 
|  |  
 |  | 
|  |  # Raspberry Pi 4B
 |  | 
|  |  # EGLを使用する場合
 |  | 
|  |  sudo apt-get install ccache libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
 |  | 
|  |                       libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-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 libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
 |  | 
|  |                       libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-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ネイティブテーマを使用する場合) \
 |  | 
|  |                       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
 |  | 
|  |  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 libx265-dev ||
 |  | 
|  | |-
 |  | 
|  | | マルチメディア || 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 libopenal1 libopenal-dev libsndio7.0 libsndio-dev ||
 |  | 
|  | |-
 |  | 
|  | | データベース || unixodbc-dev (ODBC)<br>libsqlite3-dev (SQLite)<br>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>
 |  | 
|  |   |  | 
|  | ==== システムルートディレクトリの設定 ====
 |  | 
|  | Linux PCで、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。<br>
 |  | 
|  | Raspberry Pi上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。<br>
 |  | 
|  | <br>
 |  | 
|  | Linux PC上に開発用ディレクトリを作成する。<br>
 |  | 
|  | また、Raspberry Piのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<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>
 |  | 
|  | <code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br>
 |  | 
|  |  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot
 |  | 
|  |  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>
 |  | 
|  | fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。<br>
 |  | 
|  |  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>
 |  | 
|  |   |  | 
|  | ==== Qtライブラリのダウンロード ====
 |  | 
|  | ===== 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 /<RaspberryPiにインストールする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 Pi2B / 3Bでは、ファイル名の先頭に"00"を付加すること。</u><br>
 |  | 
|  |  # .profileファイルに設定する場合
 |  | 
|  |  export LD_LIBRARY_PATH="/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x/lib:$LD_LIBRARY_PATH"
 |  | 
|  |  
 |  | 
|  |  # /etc/ld.so.conf.dディレクトリに配置する場合
 |  | 
|  |  echo /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x/lib | sudo tee /etc/ld.so.conf.d/00-Qt_5_x_x.conf
 |  | 
|  |  sudo ldconfig
 |  | 
|  | <br>
 |  | 
|  | これにより、Raspberry PiでQtライブラリが使用できる。<br>
 |  | 
|  | <br>
 |  | 
|  |   |  | 
|  | ==== Qtソフトウェアの動作確認 ====
 |  | 
|  | Qtソフトウェアをビルドして、動作確認を行う。<br>
 |  | 
|  | <br>
 |  | 
|  | ===== XCBを使用する場合 =====
 |  | 
|  | Raspberry PiのEGL / GLESライブラリを修正する。<br>
 |  | 
|  | <br>
 |  | 
|  | Raspberry Piの/usr/lib/arm-linux-gnueabihfディレクトリには、MesaのlibEGLとlibGLESv2が存在する。<br>
 |  | 
|  | XCBを使用したQtソフトウェアは、/opt/vc/libディレクトリにあるlibbrcmEGLとlibbrcmGLESv2ではなく、libEGLとlibGLESv2が自動的に選択される。<br>
 |  | 
|  | <u>しかし、MesaのlibEGLとlibGLESv2は、OpenGLの描画処理と関わりがあるEGLでは、ほとんど役に立たない。(XCBは、OpenGLの描画処理とほぼ関係無い)</u><br>
 |  | 
|  | <br>
 |  | 
|  | そのため、libbrcmEGLとlibbrcmGLESv2を、libEGLとlibGLESv2に入れ替える。<br>
 |  | 
|  | 具体的には、libbrcmEGLとlibbrcmGLESv2のシンボリックリンクを/usr/lib/arm-linux-gnueabihfディレクトリに作成する。<br>
 |  | 
|  | (必ず、元のファイルはバックアップすること)<br>
 |  | 
|  |  sudo ln -sf /opt/vc/lib/libbrcmEGL.so /opt/vc/lib/libEGL.so
 |  | 
|  |  sudo ln -sf /opt/vc/libbrcmGLESv2.so /opt/vc/libGLESv2.so
 |  | 
|  |  
 |  | 
|  |  sudo ln -sf /opt/vc/lib/libEGL.so                    /usr/lib/arm-linux-gnueabihf/libEGL.so.1
 |  | 
|  |  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libEGL.so.1 /usr/lib/arm-linux-gnueabihf/libEGL.so
 |  | 
|  |  
 |  | 
|  |  sudo ln -sf /opt/vc/lib/libGLESv2.so                    /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
 |  | 
|  |  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 /usr/lib/arm-linux-gnueabihf/libGLESv2.so
 |  | 
|  | <br>
 |  | 
|  | 上記で設定したライブラリを読み込むため、以下のコマンドを実行する。<br>
 |  | 
|  |  sudo ldconfig
 |  | 
|  | <br>
 |  | 
|  | 上記のシンボリックリンクの設定を元に戻す場合は、以下のように実行する。<br>
 |  | 
|  |  sudo rm -rf /opt/vc/lib/libEGL.so /opt/vc/libGLESv2.so
 |  | 
|  |  
 |  | 
|  |  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libEGL.so.1.1.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1
 |  | 
|  |  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libEGL.so.1     /usr/lib/arm-linux-gnueabihf/libEGL.so
 |  | 
|  |  
 |  | 
|  |  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.1.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
 |  | 
|  |  sudo ln -sf /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2     /usr/lib/arm-linux-gnueabihf/libGLESv2.so
 |  | 
|  | <br>
 |  | 
|  | 次に、Qt Creatorでソフトウェアを開発する時の環境設定を行う。<br>
 |  | 
|  | Qt Creatorを起動して、Qt Creatorメイン画面左の[プロジェクト] - 左ペインの[Run] - 右ペインの[ビルド設定] - [Environment]項目 - [詳細]プルダウンを開く。<br>
 |  | 
|  | [詳細]プルダウンから[追加]ボタンを押下して、以下の項目を設定する。<br>
 |  | 
|  | * Variable - QT_QPA_PLATFOMRTHEME
 |  | 
|  | *: Value - qt5ct
 |  | 
|  | * Variable - DISPLAY
 |  | 
|  | *: Value - :0 または :0.0
 |  | 
|  | * Variable - XAUTHORITY
 |  | 
|  | *: Value - /home/<Raspberry Piのユーザ名>/.Xauthrity
 |  | 
|  | * Variable - XDG_SESSION_TYPE
 |  | 
|  | *: Value - x11
 |  | 
|  | <br>
 |  | 
|  | さらに、Raspberry Piの~/.profileファイルまたは~/.bashrcファイルに、以下の設定を追記する。<br>
 |  | 
|  |  export QT_QPA_PLATFOMRTHEME=qt5ct
 |  | 
|  |  export DISPLAY=:0 または export DISPLAY=:0.0
 |  | 
|  |  export XAUTHORITY=/home/<Raspberry Piのユーザ名>/.Xauthrity
 |  | 
|  |  export XDG_SESSION_TYPE=x11
 |  | 
|  | <br>
 |  | 
|  |   |  | 
|  | ===== EGL / XCB 共通 =====
 |  | 
|  | Qtソフトウェアのサンプルをダウンロードする。<br>
 |  | 
|  | この時、<Qtソフトウェアのサンプル>と<Qtのバージョン>は合致するものを指定すること。<br>
 |  | 
|  |  git clone git://code.qt.io/qt/<Qtソフトウェアのサンプル>.git -b <Qtのバージョン>
 |  | 
|  |  
 |  | 
|  |  cd <Qtソフトウェアのサンプル>
 |  | 
|  |  
 |  | 
|  |  ~/Program/Qt_Embedded/Qt5/bin/qmake
 |  | 
|  |  make -j $(nproc)
 |  | 
|  |  make install DESTDIR=<Qtソフトウェアを配置するディレクトリ>
 |  | 
|  | <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. ===== |  | == PinePhoneのクロスコンパイル == | 
|  | Qtのソースコードにおいて、Configureスクリプトを実行する時、この注意が表示される場合がある。<br>
 |  | Raspberry Piでクロスコンパイルを行う場合、[[インストール_-_Qt5_PinePhone]]のページを参照すること。<br> | 
|  | この時、Raspberry Piに対して、以下のライブラリをインストールする。<br>
 |  | 
|  |  sudo apt-get install at-spi2-core gir1.2-atspi-2.0 libatspi2.0-dev
 |  | 
|  | <br>
 |  | 
|  | ==== QtWebEngineのビルドおよびインストール ====
 |  | 
|  | 上記のセクションでは、QtWebEngineモジュールを無効にしている。<br>
 |  | 
|  | これは、QtWebEngineのビルドには多くの時間とディスクスペースが必要なためである。<br>
 |  | 
|  | <br>
 |  | 
|  | 勿論、QtWebEngineとQtを同時にビルドすることも可能であるが、ビルドに失敗する場合はビルド全体が失敗したことになるため、<br>
 |  | 
|  | まず、ベースとなるQt 5を個別にビルドした後、QtWebEngineを個別にビルドすることを推奨する。<br>
 |  | 
|  | <br>
 |  | 
|  | ===== 依存関係のライブラリのインストール =====
 |  | 
|  | <center>
 |  | 
|  | {| class="wikitable" style="background-color:#fefefe;"
 |  | 
|  | |+ 必須およびオプションのライブラリ
 |  | 
|  | |-
 |  | 
|  | ! style="background-color:#00ffff;" |  
 |  | 
|  | ! style="background-color:#00ffff;" | ライブラリ名 
 |  | 
|  | ! style="background-color:#00ffff;" | 備考
 |  | 
|  | |-
 |  | 
|  | | 必須 || flex bison gperf libre2-dev libnss3-dev || 
 |  | 
|  | |-
 |  | 
|  | | X11対応に必要 || libdrm-dev libxdamage-dev || XCB / X11を使用する場合、<br>これらのライブラリが必要である。
 |  | 
|  | |-
 |  | 
|  | | オプション || libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev<br>libevent-dev libprotobuf-dev protobuf-compiler libwebp-dev libpoppler-cpp-dev || 追加サポートとして便利である。
 |  | 
|  | |-
 |  | 
|  | | (オプション)<br>システム構築ツール || ninja-build re2c || ninjaビルドツールを使用することで、<br>ビルドを高速化できることがある。
 |  | 
|  | |-
 |  | 
|  | | 使用できないライブラリ || libopus-dev libvpx-dev || OpusとVPXメディアのサポートが追加されるが、<br>Raspbian busterで利用するには古すぎる。
 |  | 
|  | |}
 |  | 
|  | </center>
 |  | 
|  | <br>
 |  | 
|  | ===== QtWebEngineのダウンロード =====
 |  | 
|  | Qtの公式Webサイトから、QtWebEngineをダウンロードする。<br>
 |  | 
|  | https://download.qt.io/official_releases/qt/x.x/x.x.x/submodules/qtwebengine-everywhere-src-x.x.x.tar.xz<br>
 |  | 
|  | <br>
 |  | 
|  | ===== QtWebEngineのビルド設定 =====
 |  | 
|  | ダウンロードしたQtWebEngineのビルド設定を編集する。<br>
 |  | 
|  | <br>
 |  | 
|  | QtWebEngineでのジャンボビルドを無効化する。<br>
 |  | 
|  | 標準のジャンボビルドシステムでは、コンパイル時に不明のエラーが出力されるため、無効にする。<br>
 |  | 
|  |  sed -i -e 's|use_jumbo_build=true|use_jumbo_build=false|' /<QtWebEngineのソースコードがあるディレクトリ>/src/buildtools/config/common.pri
 |  | 
|  | <br>
 |  | 
|  | ===== QtWebEngineのビルドとインストール =====
 |  | 
|  | 次に、QtWebEngineのConfigureスクリプトを実行する。<br>
 |  | 
|  |  /opt/Qt/5.15.2/bin/qmake /<QtWebEngineのソースコードがあるディレクトリ> -- -no-webengine-geolocation
 |  | 
|  | <br>
 |  | 
|  | 正常に終了する時、以下のようなサマリが表示される。<br>
 |  | 
|  |  Qt WebEngine:
 |  | 
|  |   Embedded build ......................... no
 |  | 
|  |   Full debug information ................. no
 |  | 
|  |   Pepper Plugins ......................... yes
 |  | 
|  |   Printing and PDF ....................... yes
 |  | 
|  |   Proprietary Codecs ..................... no
 |  | 
|  |   Spellchecker ........................... yes
 |  | 
|  |   Native Spellchecker .................... no
 |  | 
|  |   WebRTC ................................. yes
 |  | 
|  |   Use System Ninja ....................... yes
 |  | 
|  |   Geolocation ............................ no
 |  | 
|  |   WebChannel support ..................... yes
 |  | 
|  |   Use v8 snapshot ........................ yes
 |  | 
|  |   Kerberos Authentication ................ no
 |  | 
|  |   Support qpa-xcb ........................ yes
 |  | 
|  |   Use ALSA ............................... yes
 |  | 
|  |   Use PulseAudio ......................... no
 |  | 
|  |   Optional system libraries used:
 |  | 
|  |     re2 .................................. yes
 |  | 
|  |     icu .................................. no
 |  | 
|  |     libwebp, libwebpmux and libwebpdemux . no
 |  | 
|  |     opus ................................. no
 |  | 
|  |     ffmpeg ............................... no
 |  | 
|  |     libvpx ............................... no
 |  | 
|  |     snappy ............................... no
 |  | 
|  |     glib ................................. yes
 |  | 
|  |     zlib ................................. yes
 |  | 
|  |     minizip .............................. yes
 |  | 
|  |     libevent ............................. yes
 |  | 
|  |     jsoncpp .............................. yes
 |  | 
|  |     protobuf ............................. yes
 |  | 
|  |     libxml2 and libxslt .................. yes
 |  | 
|  |     lcms2 ................................ yes
 |  | 
|  |     png .................................. yes
 |  | 
|  |     JPEG ................................. yes
 |  | 
|  |     harfbuzz ............................. no
 |  | 
|  |     freetype ............................. yes
 |  | 
|  |   Required system libraries:
 |  | 
|  |     fontconfig ........................... yes
 |  | 
|  |     dbus ................................. yes
 |  | 
|  |     nss .................................. yes
 |  | 
|  |     khr .................................. yes
 |  | 
|  |     glibc ................................ yes
 |  | 
|  |   Required system libraries for qpa-xcb:
 |  | 
|  |     x11 .................................. yes
 |  | 
|  |     libdrm ............................... yes
 |  | 
|  |     xcomposite ........................... yes
 |  | 
|  |     xcursor .............................. yes
 |  | 
|  |     xi ................................... yes
 |  | 
|  |     xtst ................................. yes
 |  | 
|  | <br>
 |  | 
|  | 最後に、QtWebEngineをビルドする。<br>
 |  | 
|  | もし、ビルドするPCのメモリが8[GB]以下の場合、NINJAJOBSを4以下にして、Ninjaの並列ビルドの量を制限する必要がある。<br>
 |  | 
|  |  make -j $(nproc)
 |  | 
|  |  または
 |  | 
|  |  make -j 4 NINJAJOBS=-j4
 |  | 
|  |  
 |  | 
|  |  make install
 |  | 
|  | <br>
 |  | 
|  | ===== QtWebEngineのビルド時に発生する問題 =====
 |  | 
|  | 下表は、QtWebEngineで見つかった問題とビルドの問題を集めたものである。<br>
 |  | 
|  | <center>
 |  | 
|  | {| class="wikitable" style="background-color:#fefefe;"
 |  | 
|  | |+ ビルド時の問題点と解決策
 |  | 
|  | |-
 |  | 
|  | ! style="background-color:#00ffff;" | QtWebEngineのバージョン 
 |  | 
|  | ! style="background-color:#00ffff;" | 問題 
 |  | 
|  | ! style="background-color:#00ffff;" | 解決策 
 |  | 
|  | |-
 |  | 
|  | | 5.15.2 || Internal Compiler Error, gcc 8.30<br><br>internal compiler error: in convert_move, at expr.c:218<br> static void exec_ops(const Op* ops, const void** args, || [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96206 GCC Bugzilla bug report]<br><br>Build for ARMv7<br>Patch the source to disable optimization
 |  | 
|  | |-
 |  | 
|  | | 5.15.2 || fatal error: xcb/dri3.h: No such file or directory || 以下のライブラリをインストールする。<br><code>sudo apt-get install libxcb-dri3-dev</code>
 |  | 
|  | |-
 |  | 
|  | | 5.15.2 || Broadcom EGLを使用するQtのビルドに失敗する。<br><br>qtwebengine-everywhere-src-x.x.x/src/3rdparty/chromium/ui/gl/gl_bindings_autogen_egl.h:201:5:<br>error: ‘EGLDeviceEXT’ has not been declared || Broadcom EGLの代わりに、<br>VC4 / KMSを使用してビルドする。
 |  | 
|  | |}
 |  | 
|  | </center>
 |  | 
|  | <br><br> |  | <br><br> | 
|  | 
 |  | 
 | 
|  | == PinePhone ==
 |  | 
|  | ==== 概要 ====
 |  | 
|  | 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>
 |  | 
|  | Linero社が提供しているGCC ARMツールチェーンをダウンロードする。<br>
 |  | 
|  | * GCC 7.5 : https://releases.linaro.org/components/toolchain/binaries/
 |  | 
|  | * GCC 10.2 : https://snapshots.linaro.org/components/toolchain/binaries/10.2-2021.01-3/aarch64-linux-gnu/
 |  | 
|  | <br>
 |  | 
|  | Linaroは、アップストリームビルドのスナップショットをユーザに提供するGNUツールチェーン・インテグレーションビルドを毎月提供している。<br>
 |  | 
|  | これらのビルドにより、開発者はビルド済みバイナリの機能をアップストリームですぐにテストすることができる。<br>
 |  | 
|  | * GCCツールチェーン群 : https://snapshots.linaro.org/gnu-toolchain/
 |  | 
|  | <br>
 |  | 
|  |  tar xf gcc-linaro-<バージョン>-x86_64_aarch64-linux-gnu.tar.xz
 |  | 
|  | <br>
 |  | 
|  | 
 |  | 
|  | ==== '''Wayland-Scannerのインストール(重要)''' ====
 |  | 
|  | Wayland-Scannerをインストールするには、MesonとNinjaをビルドする必要がある。<br>
 |  | 
|  | <br>
 |  | 
|  | まず、Wayland Scannerのビルドに必要なライブラリをインストールする。<br>
 |  | 
|  |  sudo zypper install libxml2-devel
 |  | 
|  | <br>
 |  | 
|  | 次に、Wayland Scannerのソースコードをダウンロードする。<br>
 |  | 
|  |  git clone https://gitlab.freedesktop.org/wayland/wayland
 |  | 
|  |  cd wayland && mkdir build  
 |  | 
|  | <br>
 |  | 
|  | Wayland Scannerをビルドする。<br>
 |  | 
|  | <u>Wayland Scannerのインストールディレクトリは、PinePhoneのホスト向けターゲットディレクトリを指定すること。</u><br>
 |  | 
|  |  meson ./build/ --prefix=<Wayland-Scannerのインストールディレクトリ> -Ddocumentation=false  
 |  | 
|  |  ninja -C build/ install
 |  | 
|  | <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>
 |  | 
|  | Qtライブラリをクロスコンパイルするために必要なライブラリをインストールする。<br>
 |  | 
|  | Qtライブラリのビルド設定によっては、不要なパッケージも含まれている。<br>
 |  | 
|  |  # Mobian
 |  | 
|  |  sudo apt-get install  unzip ccache pkg-config build-essential make cmake gcc gfortran gdb gdbserver python3 \
 |  | 
|  |                        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 \
 |  | 
|  |                        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-ctl0 liblttng-ctl-dev libb2-1 libb2-dev libsdl2-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 freeglut3-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 \
 |  | 
|  |                        libgl1-mesa-dev libgles-dev libgles2-mesa-dev libegl-dev libegl1-mesa-dev libgegl-dev libglu1-mesa libglu1-mesa-dev libglfw3-dev libglew-dev libgbm-dev \
 |  | 
|  |                        libweston-10-0 libweston-10-dev
 |  | 
|  |  
 |  | 
|  |  # 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 libtsm mtdev libevdev libffi pcre pcre2 \
 |  | 
|  |                          libwacom assimp fontconfig dbus dbus-c++ nss libxkbcommon alsa-lib libxinerama pugixml sqlite libxslt openssl \
 |  | 
|  |                          wayland wayland-utils wayland-protocols egl-wayland waylandpp waylandpp wrapland wlc wayfire glew-wayland glfw-wayland libva1 \
 |  | 
|  |                          mesa mesa-utils glu libglvnd libb2 lttng-ust libproxy
 |  | 
|  | <br>
 |  | 
|  | MobianおよびManjaroにおいて、マルチメディア関連やBluetooth等を使用する場合、下表に示す任意のパッケージをインストールする。<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 ||
 |  | 
|  | |-
 |  | 
|  | | コーデック || libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libx265-dev ||
 |  | 
|  | |-
 |  | 
|  | | マルチメディア || 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 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<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 ||
 |  | 
|  | |-
 |  | 
|  | | マルチメディア || 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 (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>
 |  | 
|  | * 上表のライブラリを全てインストールする場合
 |  | 
|  | *: Mobianの場合
 |  | 
|  | *: <code>sudo apt install bluez bluez-tools libbluetooth-dev libjpeg-dev libpng-dev libtiff-dev libmng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev \</code>
 |  | 
|  | *: <code>libx264-dev libx265-dev \</code>
 |  | 
|  | *: <code>libgstreamer1.0-dev libgstreamermm-1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev libopenal-dev libsndio-dev libwayland-dev \</code>
 |  | 
|  | *: <code>unixodbc-dev libsqlite3-dev libcups2-dev \</code>
 |  | 
|  | *: <code>libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev libx11-xcb-dev libxext-dev \</code>
 |  | 
|  | *: <code>libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev \</code>
 |  | 
|  | *: <code>libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev \</code>
 |  | 
|  | *: <code>libxkbcommon-dev libxkbcommon-x11-dev \</code>
 |  | 
|  | *: <code>flex bison gperf libre2-dev libnss3-dev libdrm-dev \</code>
 |  | 
|  | *: <code>libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev libevent-dev libprotobuf-dev protobuf-compiler libopus-dev libvpx-dev \</code>
 |  | 
|  | *: <code>libatspi2.0-dev libsctp1 libsctp-dev</code>
 |  | 
|  | *: <br>
 |  | 
|  | *: Manjaro ARMの場合
 |  | 
|  | *: <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>
 |  | 
|  | 
 |  | 
 | 
|  | ==== システムルートディレクトリの設定 ====
 |  | {{#seo: | 
|  | Linux PCで、PinePhone向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。<br>
 |  | |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | 
|  | PinePhone上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。<br>
 |  | |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,電気回路,電子回路,基板,プリント基板 | 
|  | <br>
 |  | |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | 
|  | Linux PC上に開発用ディレクトリを作成する。<br>
 |  | |image=/resources/assets/MochiuLogo_Single_Blue.png | 
|  | また、PinePhoneのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<br>
 |  | }} | 
|  |  mkdir -p ~/Program/Qt_Embedded/sysroot \
 |  | 
|  |           ~/Program/Qt_Embedded/sysroot/usr \
 |  | 
|  |           ~/Program/Qt_Embedded/sysroot/usr/share 
 |  | 
|  | <br>
 |  | 
|  | <code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br>
 |  | 
|  |  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot
 |  | 
|  |  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/include ~/Program/Qt_Embedded/sysroot/usr
 |  | 
|  |  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/lib ~/Program/Qt_Embedded/sysroot/usr
 |  | 
|  |  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/share/pkgconfig ~/Program/Qt_Embedded/sysroot/usr/share
 |  | 
|  | <br>
 |  | 
|  | ダウンロードしたシステムルートディレクトリにあるファイルおよびディレクトリのシンボリックリンクを相対的に調整する。<br>
 |  | 
|  | fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。<br>
 |  | 
|  |  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>
 |  | 
|  | ==== Qtのソースコードのダウンロード ====
 |  | 
|  | * Qt Everywhere (こちらを推奨する)<br>
 |  | 
|  | *: <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>
 |  | 
|  | *: <br>
 |  | 
|  | * Githubの使用
 |  | 
|  | *: GithubからQtのソースコードを個別にダウンロードする。<br>
 |  | 
|  | *: <code>git clone https://github.com/qt/qt5.git</code>
 |  | 
|  | *: <br>
 |  | 
|  | *: ダウンロードしたスーパーリポジトリに移動する。<br>
 |  | 
|  | *: <code>cd qt5</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のビルド ====
 |  | 
|  | ===== GCC 11以降を使用する場合 =====
 |  | 
|  | GCC 11以降のツールチェーンを使用する場合、Qt 5.15のビルド時において、以下に示すエラーが発生する。<br>
 |  | 
|  |  error: 'numeric_limits' is not a member of 'std'  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
 |  | 
|  |  
 |  | 
|  |  error: expected primary-expression before '>' token  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
 |  | 
|  |  
 |  | 
|  |  error: '::max' has not been declared; did you mean 'std::max'?   static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
 |  | 
|  | <br>
 |  | 
|  | これは、std::limitsが削除されて、limits.hファイルに移行されたからである。<br>
 |  | 
|  | もし、GCC 11以降を使用してQt 5.15をビルドする場合は、qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.hファイルを、以下に示すように編集する。<br>
 |  | 
|  |  vi qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.h
 |  | 
|  | <br>
 |  | 
|  |  <syntaxhighlight lang="c++">
 |  | 
|  |  // qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.hファイル
 |  | 
|  |  // 45〜48行目あたり
 |  | 
|  |  
 |  | 
|  |  // 編集前
 |  | 
|  |  #ifdef __cplusplus
 |  | 
|  |  #  include <type_traits>
 |  | 
|  |  #  include <cstddef>
 |  | 
|  |  #  include <utility>
 |  | 
|  |  #endif
 |  | 
|  |  
 |  | 
|  |  // 編集後
 |  | 
|  |  #ifdef __cplusplus
 |  | 
|  |  #  include <type_traits>
 |  | 
|  |  #  include <cstddef>
 |  | 
|  |  #  include <utility>
 |  | 
|  |  #include <limits>
 |  | 
|  |  #endif
 |  | 
|  |  </syntaxhighlight>
 |  | 
|  | <br>
 |  | 
|  | ===== Qtのビルド =====
 |  | 
|  | Qtをビルドするため、ビルド用のディレクトリを作成する。<br>
 |  | 
|  |  mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build
 |  | 
|  | <br>
 |  | 
|  | Configureスクリプトを実行する。<br>
 |  | 
|  |  export PATH="/<Wayland Scannerのインストールディレクトリ>/bin:$PATH"
 |  | 
|  |  export LD_LIBRARY_PATH="/<Wayland Scannerのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
 |  | 
|  |  
 |  | 
|  |  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 COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-"
 |  | 
|  |  # または
 |  | 
|  |  # export COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-unknown-linux-gnu-"
 |  | 
|  |  
 |  | 
|  |  ../<Qtのソースコードがあるディレクトリ>/configure -v 
 |  | 
|  |  -release \
 |  | 
|  |  -opensource \
 |  | 
|  |  -confirm-license \
 |  | 
|  |  -opengl es2 \
 |  | 
|  |  -qpa wayland \
 |  | 
|  |  -device linux-pinephone-g++ \
 |  | 
|  |  -device-option CROSS_COMPILE=$COMPILER \
 |  | 
|  |  -nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all \
 |  | 
|  |  -skip qtscript -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \
 |  | 
|  |  -skip qtgamepad -skip qtpurchasing -skip qtcharts -skip qtsensors \   (不要な場合)
 |  | 
|  |  -skip qtlocation -skip qtspeech -skip qtlottie \                      (不要な場合)
 |  | 
|  |  -skip qtdoc \
 |  | 
|  |  -sysroot /<SysRootが存在するディレクトリ>/sysroot \
 |  | 
|  |  -prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \
 |  | 
|  |  -extprefix /<PinePhoneにインストールするQtライブラリを配置するディレクトリ>/Target \
 |  | 
|  |  -hostprefix /<LinuxPCで使用するQtツールを配置するディレクトリ>/Host
 |  | 
|  | <br>
 |  | 
|  | Qtをビルドおよびインストールする。<br>
 |  | 
|  |  gmake -j $(nproc)
 |  | 
|  |  gmake install
 |  | 
|  | <br>
 |  | 
|  |   |  | 
|  | ===== Qt Waylandのビルド =====
 |  | 
|  | まず、Qt Waylandのソースコードのディレクトリ(/<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner)に対して、<br>
 |  | 
|  | wayland-text-input-unstable-v2-client-protocolファイル、wayland-text-input-unstable-v2-server-protocol.hファイル、wayland-wayland-client-protocol.hファイルを作成する。<br>
 |  | 
|  | <br>
 |  | 
|  | <u>なお、wayland-text-input-unstable-v2-client-protocolファイルとwayland-text-input-unstable-v2-server-protocol.hファイルは、空のファイルである。</u><br>
 |  | 
|  |  touch /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-text-input-unstable-v2-client-protocol.h \
 |  | 
|  |        /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-text-input-unstable-v2-server-protocol.h \
 |  | 
|  |        /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-wayland-client-protocol.h
 |  | 
|  | <br>
 |  | 
|  |  vi /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-wayland-client-protocol.h
 |  | 
|  | <br>
 |  | 
|  |  <syntaxhighlight lang="c++">
 |  | 
|  |  // wayland-wayland-client-protocol.hファイル
 |  | 
|  |  #include "../../../../../src/client/wayland-wayland-client-protocol.h"
 |  | 
|  |  </syntaxhighlight>
 |  | 
|  | <br>
 |  | 
|  | 次に、Wayland Scannerをインストールする。<br>
 |  | 
|  | なお、Wayland Scannerのビルドには、Meson(Pythonライブラリ)とNinjaが必要である。<br>
 |  | 
|  | # Wayland Scannerのビルドに必要なライブラリをインストールする。
 |  | 
|  | #: <code>sudo zypper install meson ninja expat-devel libxml2-devel</code>
 |  | 
|  | #: <br>
 |  | 
|  | # Wayland Scannerのソースコードをダウンロードする。<br>
 |  | 
|  | #: <code>git clone https://github.com/wayland-project/wayland.git</code>
 |  | 
|  | #: <code>cd wayland && mkdir build</code>
 |  | 
|  | #: <br>
 |  | 
|  | # Wayland Scannerのビルドおよびインストールする。
 |  | 
|  | #: <code>meson ./build --prefix=<上記でインストールしたQtツールのインストールディレクトリ> -Ddocumentation=false</code>
 |  | 
|  | #: <code>ninja -C ./build install</code>
 |  | 
|  | <br>
 |  | 
|  | 最後に、Qt Waylandをビルドおよびインストールする。<br>
 |  | 
|  |  export PATH="/<Wayland Scannerのインストールディレクトリ>/bin:$PATH"
 |  | 
|  |  export LD_LIBRARY_PATH="/<Wayland Scannerのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
 |  | 
|  |  
 |  | 
|  |  export LD_LIBRARY_PATH="/<上記でインストールしたQtライブラリのインストールディレクトリ>/lib:$LD_LIBRARY_PATH"
 |  | 
|  |  
 |  | 
|  |  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"
 |  | 
|  |  
 |  | 
|  |  cd /<Qtのソースコードがあるディレクトリ>/qtwayland
 |  | 
|  |  mkdir build && cd build
 |  | 
|  |  
 |  | 
|  |  /<上記でインストールしたQtツールがあるディレクトリ>/bin/qmake ../qtwayland.pro
 |  | 
|  | <br>
 |  | 
|  |   |  | 
|  | ===== Qt SVGのビルド =====
 |  | 
|  | もし、Qt SVGをビルドおよびインストールしていない場合は、手動で行う。<br>
 |  | 
|  | <u>なお、Qt SVGをインストールするには、上記でインストールしたQtツール(Linux PC向け)のディレクトリにあるqmakeファイルを使用する必要がある。</u><br>
 |  | 
|  | <br>
 |  | 
|  | まず、Qt SVGのソースコードが存在するディレクトリに移動して、ビルド用ディレクトリを作成する。<br>
 |  | 
|  |  cd /<Qtのソースコードがあるディレクトリ>/qtsvg
 |  | 
|  |  mkdir build && cd build
 |  | 
|  | <br>
 |  | 
|  | Qt SVGをビルドおよびインストールする。<br>
 |  | 
|  | <u>なお、Qt SVGのインストールディレクトリは、自動的にQtライブラリ(ターゲット向け)のディレクトリにインストールされる。</u><br>
 |  | 
|  | <u>そのため、<code>DESTDIR</code>オプション等は付加しない。(付加しても無視される)</u>
 |  | 
|  |  /<上記でインストールしたLinux PC向けのQtツールのディレクトリ>/Host/bin/qmake ../qtsvg.pro
 |  | 
|  |  make -j $(nproc)
 |  | 
|  |  make install
 |  | 
|  | <br>
 |  | 
|  | <br>
 |  | 
|  |   |  | 
|  | ===== Qt Virtual Keyboardのビルド =====
 |  | 
|  | もし、Qt Virtual Keyboardをビルドおよびインストールしていない場合は、手動で行う。<br>
 |  | 
|  | この時、Qt Virtual Keyboardがインストールされているディレクトリを環境変数<code>LD_LIBRARY_PATH</code>に追加する必要がある。<br>
 |  | 
|  | <br>
 |  | 
|  | <u>なお、Qt Virtual Keyboardをインストールするには、上記でインストールしたQtツール(Linux PC向け)のディレクトリにあるqmakeファイルを使用する必要がある。</u><br>
 |  | 
|  | <br>
 |  | 
|  | まず、Qt Virtual Keyboardのソースコードが存在するディレクトリに移動して、ビルド用ディレクトリを作成する。<br>
 |  | 
|  |  cd /<Qtのソースコードがあるディレクトリ>/qtvirtualkeyboard
 |  | 
|  |  mkdir build && cd build
 |  | 
|  | <br>
 |  | 
|  | Qt Virtual Keyboardをビルドおよびインストールする。<br>
 |  | 
|  | <u>なお、Qt Virtual Keyboardのインストールディレクトリは、自動的にQtライブラリ(ターゲット向け)のディレクトリにインストールされる。</u><br>
 |  | 
|  | <u>そのため、<code>DESTDIR</code>オプション等は付加しない。(付加しても無視される)</u>
 |  | 
|  |  export LD_LIBRARY_PATH="/<上記でインストールしたQtライブラリ(ターゲット向け)のディレクトリ>/lib:$LD_LIBRARY_PATH"
 |  | 
|  |  
 |  | 
|  |  /<上記でインストールしたLinux PC向けのQtツールのディレクトリ>/Host/bin/qmake "CONFIG+=lang-all" ../qtvirtualkeyboard.pro
 |  | 
|  |  make -j $(nproc)
 |  | 
|  |  make install
 |  | 
|  | <br>
 |  | 
|  |   |  | 
|  | ==== Qtライブラリのインストール ====
 |  | 
|  | ビルドしたQtライブラリを、PinePhoneにデプロイする。<br>
 |  | 
|  | <br>
 |  | 
|  | まず、~/Program/Qt_Embedded/Qt5ディレクトリに存在する全てのファイルを、PinePhoneの任意のディレクトリ(例. ~/InstallSoftware/Qt_5_x_xディレクトリ)に同期させる。<br>
 |  | 
|  |  rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" \
 |  | 
|  |  ~/Program/Qt_Embedded/Target <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x
 |  | 
|  | <br>
 |  | 
|  | <u>※注意</u><br>
 |  | 
|  | <u>PinePhoneにアップロードしたQtライブラリの所有者がrootになっている場合があるため、</u><br>
 |  | 
|  | <u>以下のコマンドを実行して、所有者をローカルユーザに変更する必要がある。</u><br>
 |  | 
|  |  sudo chown -R <ユーザ名>:<グループ名> ~/InstallSoftware/Qt_5_x_x
 |  | 
|  | <br>
 |  | 
|  | PinePhoneのリンカがQtライブラリを読み込むようにするため、以下のコマンドを実行する。<br>
 |  | 
|  | /etc/ld.so.conf.dディレクトリに配置する場合、ファイル名の先頭に"<code>00</code>"を付加すること。<br>
 |  | 
|  | <br>
 |  | 
|  | <u>※注意</u><br>
 |  | 
|  | <u>~/.profileファイルに環境変数<code>LD_LIBRARY_PATH</code>を設定する場合、再度、Qt Creatorで環境変数<code>LD_LIBRARY_PATH</code>を設定する必要がある。</u><br>
 |  | 
|  | <u>Qt Creatorでの設定は、Qt Creatorメイン画面左にある[プロジェクト] - [RUN] - [Environment]で設定する。</u><br>
 |  | 
|  |  # .profileファイルに設定する場合
 |  | 
|  |  export LD_LIBRARY_PATH="/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/lib:$LD_LIBRARY_PATH"
 |  | 
|  |  export LD_LIBRARY_PATH="/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/plugins/qmltooling:$LD_LIBRARY_PATH"  
 |  | 
|  |  
 |  | 
|  |  # /etc/ld.so.conf.d/00-Qt_5_x_x.confファイルに設定する場合
 |  | 
|  |  echo /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/lib | sudo tee /etc/ld.so.conf.d/00-Qt_5_x_x.conf
 |  | 
|  |  echo /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/plugins/qmltooling |sudo tee /etc/ld.so.conf.d/00-Qt_5_x_x.conf
 |  | 
|  | <br>
 |  | 
|  | ライブラリを読み込む。<br>
 |  | 
|  |  # .profileファイルに設定した場合
 |  | 
|  |  source ~/.profile
 |  | 
|  |  
 |  | 
|  |  # /etc/ld.so.conf.d/00-Qt_5_x_x.confファイルに設定した場合
 |  | 
|  |  sudo ldconfig
 |  | 
|  | <br>
 |  | 
|  | ==== Qtライブラリの設定 ====
 |  | 
|  | さらに、PinePhoneの~/.profileファイルまたは~/.bashrcファイルに、以下の設定を追記する。<br>
 |  | 
|  |  # Enable Qt Debug
 |  | 
|  |  export QT_QPA_PLATFORMTHEME="qt5ct"
 |  | 
|  |  export DISPLAY=":0" または export DISPLAY=":0.0"
 |  | 
|  |  # export XAUTHORITY="/home/<PinePhoneのユーザ名>/.Xauthrity"    (不要)
 |  | 
|  |  # export XDG_SESSION_TYPE="wayland"                 (不要)
 |  | 
|  |  # export XDG_RUNTIME_DIR="<XDG_RUNTIME_DIRに指定するディレクトリ>" (不要)
 |  | 
|  |  
 |  | 
|  |  # Enable Qt Quick Debug
 |  | 
|  |  export QML_IMPORT_PATH="/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/qml"
 |  | 
|  |  export QML2_IMPORT_PATH="/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/qml"
 |  | 
|  |  export QT_PLUGIN_PATH="/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/plugins"
 |  | 
|  |  export QT_QPA_PLATFORM_PLUGIN_PATH="/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x/plugins/platforms"
 |  | 
|  |  export QML_IMPORT_TRACE=1
 |  | 
|  | <br>
 |  | 
|  | ==== Qt Creatorの設定 ====
 |  | 
|  | 次に、Qt Creatorでソフトウェアを開発する時の環境設定を行う。<br>
 |  | 
|  | <br>
 |  | 
|  | まず、プロジェクトの環境変数の設定を行う。<br>
 |  | 
|  | Qt Creatorを起動して、Qt Creatorメイン画面左の[プロジェクト] - 左ペインの[Run] - 右ペインの[ビルド設定] - [Environment]項目 - [詳細]プルダウンを開く。<br>
 |  | 
|  | [詳細]プルダウンから[追加]ボタンを押下して、以下の項目を設定する。<br>
 |  | 
|  | <br>
 |  | 
|  | <u>Qtプロジェクトをデバッグする場合は、必ず[デバイス環境の取得]ボタンを押下すること。</u><br>
 |  | 
|  | * Variable - QT_QPA_PLATFORMTHEME
 |  | 
|  | *: Value - qt5ct
 |  | 
|  | * Variable - DISPLAY
 |  | 
|  | *: Value - :0 または :0.0
 |  | 
|  | * Variable : PATH
 |  | 
|  | *: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/bin  ※PATHの設定が既に存在する場合は、追記する
 |  | 
|  | * Variable : LD_LIBRARY_PATH  (PinePhoneの~/.profileファイルに環境変数LD_LIBRARY_PATHを設定している場合)
 |  | 
|  | *: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/lib:/home/<PinePhone's User Name>/InstallSoftware/Qt_5_15_2/plugins/qmltooling
 |  | 
|  | * Variable : QML_IMPORT_PATH
 |  | 
|  | *: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/qml
 |  | 
|  | * Variable : QML2_IMPORT_PATH
 |  | 
|  | *: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/qml
 |  | 
|  | * Variable : QT_PLUGIN_PATH
 |  | 
|  | *: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/plugins
 |  | 
|  | * Variable : QT_QPA_PLATFORM_PLUGIN_PATH
 |  | 
|  | *: Value : /home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/plugins/platforms
 |  | 
|  | * <del>Variable - XAUTHORITY</del>(不要)
 |  | 
|  | *: <del>Value - /home/<PinePhoneのユーザ名>/.Xauthrity</del>
 |  | 
|  | * <del>Variable - XDG_SESSION_TYPE(不要)</del>
 |  | 
|  | *: <del>Value - wayland</del>
 |  | 
|  | <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=qt5ct</value>
 |  | 
|  |      <value type="QString">DISPLAY=:0</value>
 |  | 
|  |      <value type="QString">PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games</value>
 |  | 
|  |      <value type="QString">LD_LIBRARY_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/lib:/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/plugins/qmltooling</value>
 |  | 
|  |      <value type="QString">QML_IMPORT_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/qml</value>
 |  | 
|  |      <value type="QString">QML2_IMPORT_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/qml</value>
 |  | 
|  |      <value type="QString">QT_PLUGIN_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/plugins</value>
 |  | 
|  |      <value type="QString">QT_QPA_PLATFORM_PLUGIN_PATH=/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_15_2/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_5_15_2
 |  | 
|  | <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>
 |  | 
|  | もし、デバッグ時において、以下の警告が出力される場合は、GDBのみをGCC AArch64 ToolChain 10.2に変更する。<br>
 |  | 
|  |  # 警告の内容
 |  | 
|  |  while parsing target description (at line 68): Vector "v8f" references undefined type "ieee_half"
 |  | 
|  |  Could not load XML target description; ignoring
 |  | 
|  | <br>
 |  | 
|  | GCC AArch64 ToolChain 10.2は、以下に示すURLからダウンロードできる。<br>
 |  | 
|  | https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads<br>
 |  | 
|  | <br>
 |  | 
|  | これにより、PinePhoneでQtライブラリが使用できる。<br>
 |  | 
|  | <br><br>
 |  | 
|  |   |  | 
|  | == PinePhone向けソフトウェアの設計 ==
 |  | 
|  | PinePhone向けソフトウェアのUIをデザインする場合、375x812[px]のウィンドウサイズで動作するように指定する。<br>
 |  | 
|  | これは、PhoshシェルでPinephoneに表示されるソフトウェアのサイズである。(2倍の拡大率で700x1200[px]の解像度まで)<br>
 |  | 
|  | <br>
 |  | 
|  | また、画面を横向きする場合は、812x375[px]に反転させる。<br>
 |  | 
|  | <br><br>
 |  | 
|  | 
 |  | 
 | 
|  | __FORCETOC__ |  | __FORCETOC__ | 
|  | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Qt]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] |  | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Qt]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] |