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

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


== PinePhone ==
==== 概要 ====
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>
https://releases.linaro.org/components/toolchain/binaries/<br>
<br>
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar xf gcc-linaro-7.5.0-2019.12-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 \
                      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 \
                      libxkbcommon-dev libxcb-xinerama0 libxcb-xinerama0-dev \
                      sqlite3 libsqlite3-0 libsqlite3-dev libssl3 libssl-dev libnss3 libnss3-dev libxslt1.1 libxslt1-dev libpugixml1v5 libpugixml-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 ||
|-
| センサ || sensorfw ||
|-
| データベース || 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>
==== システムルートディレクトリの設定 ====
Linux PCで、PinePhone向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。<br>
PinePhone上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。<br>
<br>
Linux PC上に開発用ディレクトリを作成する。<br>
また、PinePhoneのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<br>
mkdir -p ~/Program/Qt_Embedded/sysroot \
          ~/Program/Qt_Embedded/sysroot/usr \
          ~/Program/Qt_Embedded/sysroot/usr/share
<br>
<code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br>
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/include ~/Program/Qt_Embedded/sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/lib ~/Program/Qt_Embedded/sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/share/pkgconfig ~/Program/Qt_Embedded/sysroot/usr/share
<br>
ダウンロードしたシステムルートディレクトリにあるファイルおよびディレクトリのシンボリックリンクを相対的に調整する。<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 /<Linux PCで使用するQtツールを配置するディレクトリ>/Host
<br>
Qtをビルドおよびインストールする。<br>
gmake -j $(nproc)
gmake install
<br>


===== Qt Waylandのビルド =====
{{#seo:
まず、Qt Waylandのソースコードのディレクトリ(/<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner)に対して、<br>
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
wayland-text-input-unstable-v2-client-protocolファイル、wayland-text-input-unstable-v2-server-protocol.hファイル、wayland-wayland-client-protocol.hファイルを作成する。<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
<u>なお、wayland-text-input-unstable-v2-client-protocolファイルとwayland-text-input-unstable-v2-server-protocol.hファイルは、空のファイルである。</u><br>
|image=/resources/assets/MochiuLogo_Single_Blue.png
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]]

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

概要

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

Qt 5.15 LTSのサポート期間は、Qtレガシーライセンスは2023年5月26日まで、Qtサブスクリプションライセンスは2025年5月26日までである。

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

参考書
71ZdxoixPvL._SL1500_.jpg
Mastering Qt 5
C++, Qt Widgets, QMLを使用したクロスプラットフォームアプリケーションの作成
91V16o+L03L._SL1500_.jpg
Hands-On Mobile and Embedded Development with Qt 5
C++/QtでAndroid, iOS, Raspberry Pi用のアプリケーションを作成
717s6aji8ZL._SL1360_.jpg
Qt5 C++ GUI Programming Cookbook
Qt5でクロスプラットフォームのアプリケーションの作成



Qt ライセンス

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

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

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

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

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


通常のインストール

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

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

# RHEL
sudo dnf install mesa-libOSMesa-devel

# SUSE
sudo zypper install Mesa-devel Mesa-KHR-devel
# または
sudo zypper install Mesa-KHR-devel Mesa-devel Mesa-dri-devel Mesa-libEGL-devel Mesa-libGL-devel Mesa-libGLESv1_CM-devel Mesa-libGLESv2-devel \
                    Mesa-libglapi-devel kbproto-devel libOSMesa-devel libOSMesa8 libX11-devel libXau-devel libdrm-devel libgbm-devel \
                    libglvnd-devel libxcb-devel libxcb-screensaver0 libxcb-xf86dri0 libxcb-xtest0 libxcb-xvmc0 pthread-stubs-devel xproto-devel


Qtのダウンロード

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

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

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

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


Qtのインストール

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

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

# RHEL
sudo dnf groupinstall "Development tools"

# SUSE
sudo zypper install --type pattern devel_basis


Qtをインストールする。

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


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

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

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

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



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

必須環境

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


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

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

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

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

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


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

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

sudo zypper install flex bison gperf git-core gcc-c++ make cmake unzip pkg-config python3 ruby perl libicu-devel \
                    glib2-devel dbus-1-devel fontconfig-devel libfontenc-devel libproxy-devel assimp-devel \
                    mozilla-nspr-devel nodejs16 nodejs16-devel re2-devel glproto-devel snappy-devel libSDL2-devel \
                    libinput-devel libhidapi-devel mtdev-devel tslib-devel \
                    Mesa-libGL-devel Mesa-libGLESv1_CM-devel Mesa-libGLESv2-devel Mesa-libGLESv3-devel Mesa-libEGL-devel \
                    wayland-devel wayland-protocols-devel


SUSEにおいて、マルチメディア関連やBluetooth等を使用したソフトウェアを開発する場合、下表に示すパッケージをインストールする。

SUSE向け その他のライブラリ(オプション)
機能 インストールするライブラリ configureスクリプトのオプション
Bluetooth bluez bluez-devel bluez-tools
画像 openjpeg-devel openjpeg2-devel libjpeg62-devel libpng12-devel libpng16-devel
libtiff-devel libmng-devel libwebp-devel libjasper-devel
マルチメディア ffmpeg-4-libavdevice-devel ffmpeg-4-private-devel
gstreamer-devel gstreamermm-devel gstreamer-plugins-base-devel
gstreamer-plugins-bad-devel gstreamer-plugins-rs-devel gstreamer-devtools-devel
gnome-video-effects-devel gstreamer-editing-services-devel
ALSAオーディオ alsa-devel alsa-lib-devel
Pulseオーディオ libpulse-devel pulseaudio-qt-devel
OpenAL openal-soft-devel
GPS libgypsy-devel
Text to Speech festival-devel libspeechd-devel
シリアルポート libserialport-devel
センサ libsensors4-devel
データベース postgresql14-devel postgresql14-server-devel (PostgreSQL)
libmariadb-devel libmariadbd-devel libmariadbprivate (MariaDB)
unixODBC-devel (ODBC)
sqlite3-devel (SQLite)
プリンタ cups-devel
X11 libXft-devel libX11-devel libxcb-devel libXext-devel libXfixes-devel libXrender-devel
libxcb-devel xcb-util-keysyms-devel xcb-util-image-devel xcb-util-wm-devel libXfixes-devel
xcb-util-renderutil-devel libXinerama-devel libXcomposite-devel libXcursor-devel
libXrandr-devel libXtst-devel xcb-proto-devel xcb-util-cursor-devel xcb-util-errors-devel
xcb-util-xrm-devel xorg-x11-libxcb-devel xcb-util-devel xcb-util-image-devel
xcb-util-keysyms-devel xcb-util-wm-devel xorg-x11-devel libxkbcommon-x11-devel
libxkbcommon-devel libXi-devel libxkbfile-devel xorg-x11-util-devel xorg-x11-libs
X Wayland xwayland-devel
WebEngine 必須 :
flex bison gperf glibc-devel-static libcap-devel readline-devel mozilla-nss-devel mozilla-nspr-devel
libgcrypt20 libgcrypt-devel libgudev-1_0-devel ruby npm16 nodejs16-devel nodejs-common
libdrm-devel pciutils-devel xmlsec1-nss-devel systemd-devel libxshmfence-devel
libqt5-qtsvg-devel libqt5-qtsvg-private-headers-devel

オプション1 :
libxml2-devel libxml++-devel libxslt-devel minizip-devel jsoncpp-devel
liblcms2-devel libevent-devel protobuf-devel libprotobuf-c-devel
pipewire-devel krb5-devel

オプション2(不安定なため注意すること) :
libopus-devel libvpx-devel libpoppler-devel libpoppler-glib-devel
アクセシビリティ at-spi2-atk-devel at-spi2-core-devel
SCTP lksctp-tools-devel -sctp


  • 上表のライブラリを全てインストールする場合
    sudo zypper install \
    bluez bluez-devel bluez-tools \
    openjpeg-devel openjpeg2-devel libjpeg62-devel libpng12-devel libpng16-devel libtiff-devel libmng-devel libwebp-devel libjasper-devel \
    ffmpeg-4-libavdevice-devel ffmpeg-4-private-devel \
    gstreamer-devel gstreamermm-devel gstreamer-plugins-base-devel gstreamer-plugins-bad-devel gstreamer-plugins-rs-devel gstreamer-devtools-devel \
    gnome-video-effects-devel gstreamer-editing-services-devel \
    alsa-devel libpulse-devel openal-soft-devel libgypsy-devel \
    festival-devel libspeechd-devel \
    libserialport-devel libsensors4-devel unixODBC-devel sqlite3-devel cups-devel \
    libXft-devel libX11-devel libxcb-devel libXext-devel libXfixes-devel libXrender-devel libxcb-devel xcb-util-keysyms-devel xcb-util-image-devel \
    xcb-util-wm-devel libXfixes-devel xcb-util-renderutil-devel libXinerama-devel libXcomposite-devel libXcursor-devel libXrandr-devel libXtst-devel \
    xcb-proto-devel xcb-util-cursor-devel xcb-util-errors-devel xcb-util-xrm-devel xorg-x11-libxcb-devel xcb-util-devel xcb-util-image-devel \
    xcb-util-keysyms-devel xcb-util-wm-devel xorg-x11-devel libxkbcommon-x11-devel libxkbcommon-devel libXi-devel libxshmfence-devel \
    libxkbfile-devel xorg-x11-util-devel xorg-x11-libs xwayland-devel \
    at-spi2-atk-devel at-spi2-core-devel lksctp-tools-devel \
    flex bison gperf libcap-devel readline-devel mozilla-nss-devel mozilla-nspr-devel libdrm-devel \
    libxml2-devel libxml++-devel libxslt-devel minizip-devel jsoncpp-devel liblcms2-devel libevent-devel protobuf-devel libprotobuf-c-devel pipewire-devel krb5-devel \
    libgcrypt20 libgcrypt-devel libgudev-1_0-devel ruby npm-default pciutils-devel xmlsec1-nss-devel systemd-devel \
    libqt5-qtsvg-devel libqt5-qtsvg-private-headers-devel


fliteライブラリおよびlibspeechdライブラリのインストール

もし、fliteライブラリおよびlibspeechdライブラリがパッケージ管理システムに存在しない場合、
fliteライブラリおよびlibspeechdライブラリのビルドに必要なライブラリをインストールする。

sudo zypper install glib2-devel gcc-c+ automake autoconf pkg-config libtool makeinfo texinfo gettext-runtime gettext-tools \
                    dotconf-devel libsndfile-devel python3-pyxdg festival-devel libpulse-devel espeak-devel


fliteライブラリの公式Webサイト、または、fliteライブラリのGithubにアクセスして、ソースコードをダウンロードする。
または、git cloneコマンドを実行して、fliteライブラリのソースコードをダウンロードする。

git clone https://github.com/festvox/flite.git
cd flite


fliteライブラリをビルドおよびインストールする。

./configure --prefix=<fliteライブラリのインストールディレクトリ> --enable-shared
make -j $(nproc)
make get_voices -j $(nproc)
make install


libspeechdライブラリのGithubにアクセスして、ソースコードをダウンロードする。
または、git cloneコマンドを実行して、libspeechdライブラリのソースコードをダウンロードする。

git clone https://github.com/brailcom/speechd.git
cd speechd


libspeechdライブラリをビルドおよびインストールする。

export PATH="/<fliteライブラリのインストールディレクトリ>/bin:$PATH"
export LD_LIBRARY_PATH="/<fliteライブラリのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"

autoreconf -i

./configure --prefix=<libspeechdライブラリのインストールディレクトリ> --enable-shared --with-flite=<fliteライブラリのインストールディレクトリ>
make -j $(nproc)
sudo make install


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

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

  • Qt Everywhere (推奨)
    wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz
    tar xf qt-everywhere-opensource-src-x.x.x.tar.gz

  • Githubの使用
    GithubからQtのソースコードを個別にダウンロードする。
    git clone https://github.com/qt/qt5.git

    ダウンロードしたスーパーリポジトリに移動する。
    cd qt5
    git checkout <Qtのバージョン>
    または
    git checkout <Qtのショートバージョン>

    init-repositoryコマンドは、Qtが提供する指定したモジュールのソースコードを取得するためのツールである。
    スーパーリポジトリは小さく、全てのモジュール(ライブラリ)はgit submodulesとして保持されている。

    利用可能な全てのモジュールについてはQt5の公式Webサイト、ツールについてはinit-repository --helpコマンドまたはQt5のGithubを参照すること。
    ./init-repository --module-subset=essential,qtsvg,qtvirtualkeyboard,qtquickcontrols
    ./init-repository -f --module-subset=qtquick3d,qtquicktimeline,qtwayland # 必要な場合は個別に追加ダウンロードする


ソースコードのビルド

ビルド用ディレクトリを作成する。

mkdir build && cd build


Qtをビルドおよびインストールする。

  • configureスクリプトを使用する場合
    CC=<GCC 8以降のGCC実行ファイルのパス> CXX=<GCC 8以降のG++実行ファイルのパス> \
    ../configure -release \
    -opensource -confirm-license -v \
    -opengl es2 \ # このオプションは不要の可能性あり
    -no-use-gold-linker -recheck-all \ # このオプションは不要の可能性あり
    -no-compile-examples -make libs \
    -skip qtandroidextras -skip qtmacextras -skip qtwinextras \
    -prefix <Qtのインストールディレクトリ> \
    -no-pch

  • qmakeを使用する場合
    オプションのClang Code Modelプラグインをビルドする場合、LLVMのインストールディレクトリへのパスを指定する必要がある。
    export LLVM_INSTALL_DIR=<LLVMのインストールディレクトリ>

    qmake ../qt-creator/qtcreator.pro
    make qmake_all
    make -j $(nproc)

    もし、Project ERROR: Unknown module(s) in QT: scriptというエラーが出力される場合、以下のコマンドを実行する。
    make -j $(nproc) module-qtscript

  • cmakeを使用する場合
    Qtのソースコードをビルドする。
    cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=<Qtのインストールディレクトリ> <LLVMのインストールディレクトリ> ../qt-creator
    ninja -C ../ build


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

Qtのインストール

Qtをインストールする。

make install INSTALL_ROOT=<Qtのインストールディレクトリ>


QtWebEngineのインストール

QtWebEngineを別途インストールする場合は、以下の手順に従う。

  1. もし、必要ならば、Qtの公式WebサイトからQtWebEngineをダウンロードする。
    https://download.qt.io/official_releases/qt/x.x/x.x.x/submodules/qtwebengine-everywhere-src-x.x.x.tar.xz

  2. もし、上記URLからQtWebEngine単体をダウンロードしてビルドする場合は、ローカルヘッダが利用可能であることを確認する。
    find <QtWebEngineのソースコードがあるディレクトリ> -type f -name "*.pr[io]" | xargs sed -i -e 's|INCLUDEPATH += |&$$QTWEBENGINE_ROOT/include |'

  3. QtWebEngineでのジャンボビルドを無効化する。 (標準のジャンボビルドシステムでは、コンパイル時に不明のエラーが出力されるため)
    sed -i -e 's|use_jumbo_build=true|use_jumbo_build=false|' /<QtWebEngineのソースコードがあるディレクトリ>/src/buildtools/config/common.pri

  4. QtWebEngineは、現在のパブリックリリースよりも遅いリリースを目的としているため、Qt 5.15.2向けとしてビルドするように変更する。
    sed -e '/^MODULE_VERSION/s/5.*/5.15.2/' -i /<QtWebEngineのソースコードがあるディレクトリ>/.qmake.conf

  5. PulseAudioライブラリを実行時ではなく、ビルド時にリンクするようにする。
    これは、新しいPulseAudioでの問題を防ぐことにもなる。
    sed -e '/link_pulseaudio/s/false/true/' -i /<QtWebEngineのソースコードがあるディレクトリ>/src/3rdparty/chromium/media/media_options.gni

  6. ビルドシステムの変更点として、make-j 20等を渡す場合、LFSの環境変数NINJAJOBSの使用でビルドが破壊されることを修正する。
    sed -i 's/NINJAJOBS/NINJA_JOBS/' /<QtWebEngineのソースコードがあるディレクトリ>/src/core/gn_run.pro

  7. Qt WebEngineをビルドおよびインストールする。
    mkdir build && cd build

    export PATH="/<Qtのインストールディレクトリ>/bin:$PATH"; \
    export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"; \
    export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)" \
    export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/lib/pkgconfig:$PKG_CONFIG_PATH"

    qmake .. -- -system-ffmpeg -webengine-icu
    make -j $(nproc)
    make install

  8. インストールされたライブラリ依存ファイル(.prlファイル)から、ビルドディレクトリへの参照を削除する。
    find /<Qtのインストールディレクトリ> -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;



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

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

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


# Qt_Creator.desktopファイル

[Desktop Entry]
Type=Application
Exec="/home/<ユーザ名>/Qt/Tools/QtCreator/bin/qtcreator" %F
Name=Qt Creator <バージョン名>
GenericName=Qt Creator
Icon=QtProject-qtcreator
StartupWMClass=qtcreator
Terminal=false
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;


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


# Qt_MaintenanceTool.desktopファイル

[Desktop Entry]
Type=Application
Path=/home/<ユーザ名>/Qt
Name=Qt Maintenance Tool
GenericName=Install or uninstall Qt components.
Exec=/home/<ユーザ名>/Qt/MaintenanceTool
Icon=/home/<ユーザ名>/Qt/QtIcon.png
Terminal=false
Categories=Development;Qt;


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


# Qt_Designer.desktopファイル

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



日本語入力

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

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

以下に、fcitx-qt5ライブラリをインストールする手順を示す。

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

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

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

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

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

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

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

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



Felgoのインストール

Felgoとは

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

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

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


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

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

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


Felgoのインストール

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

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

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

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

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


Raspberry Piのクロスコンパイル

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


PinePhoneのクロスコンパイル

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