|
|
366行目: |
366行目: |
| <br><br> | | <br><br> |
|
| |
|
| == Raspberry Pi 3B / 4Bのクロスコンパイル == | | == Raspberry Piのクロスコンパイル == |
| ==== 概要 ====
| | Raspberry Piでクロスコンパイルを行う場合、[[インストール_-_Qt6_Raspberry_Pi]]のページを参照すること。<br> |
| Raspberry Piにおいて、一般的なデスクトップソフトウェアのクロスコンパイルおよび組み込み / デバイス作成のユースケースの<br>
| |
| クロスコンパイルを行う手順を記載する。<br>
| |
| <br>
| |
| 組み込み / デバイス作成とは、デスクトップソフトウェアをX11の下で実行するためのものではなく、<br>
| |
| ソフトウェアがBroadcomドライバを使用して、dispmanx / EGLの上でフルスクリーンで実行するというユースケースのことである。<br>
| |
| <br>
| |
| <u>EGLを使用する場合、Qtソフトウェアはフルスクリーンでのみ動作する。</u><br>
| |
| <u>通常のウインドウで起動する場合は、XCBを使用する必要があるが、XCBはOpenGLやQt Quickは動作しないことに注意すること。</u><br>
| |
| <br>
| |
| <u>このセクションでは、Raspberry PiにRaspbian Busterをインストールしていることを想定している。</u><br>
| |
| <br>
| |
| ==== Linux PCの設定 ====
| |
| Linux PCにおいて、以下の依存関係のライブラリをインストールする。<br>
| |
| (Texinfoは、GNU公式Webサイトにアクセスして、ソースコードからインストールすることを推奨する)<br>
| |
| sudo zypper install autoconf automake cmake unzip tar git wget pkg-config gperf gcc gcc-c++ \
| |
| gawk bison openssl flex figlet pigz ncurses-devel ncurses5-devel texinfo
| |
| <br>
| |
| Raspberry Pi専用のGCC ARMツールチェインをダウンロードする。<br>
| |
| https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/<br>
| |
| <center>
| |
| {| class="wikitable" style="background-color:#fefefe;"
| |
| |+ 表. GCC ARMツールチェーンのダウンロード
| |
| |-
| |
| ! style="background-color:#66ccff;" | Raspberry Piの種類
| |
| ! style="background-color:#66ccff;" | Raspbian Stretch(32-bit)
| |
| ! style="background-color:#66ccff;" | Raspbian Buster(32-bit)
| |
| ! style="background-color:#66ccff;" | Raspbian Bullseye(32-bit)
| |
| |-
| |
| | Raspberry Pi Zero/W/WH<br>Raspberry Pi 1 Model A / B / A+ / B+
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-6.3.0-pi_0-1.tar.gz/download 6.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.4.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.4.0-pi_0-1.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.3.0-pi_0-1.tar.gz/download 10.3]
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-8.3.0-pi_0-1.tar.gz/download 8.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-9.3.0-pi_0-1.tar.gz/download 9.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.2.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.2.0-pi_0-1.tar.gz/download 10.3]
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%201%2C%20Zero/cross-gcc-10.3.0-pi_0-1.tar.gz/download 10.3]
| |
| |-
| |
| | Raspberry Pi 2 Model A / B<br>Raspberry Pi 3 Model A / B
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-6.3.0-pi_2-3.tar.gz/download 6.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.4.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.4.0-pi_2-3.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.3.0-pi_2-3.tar.gz/download 10.3]
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-8.3.0-pi_2-3.tar.gz/download 8.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.4.0/Raspberry%20Pi%202%2C%203/cross-gcc-9.4.0-pi_2-3.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.3.0-pi_2-3.tar.gz/download 10.3]
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%202%2C%203/cross-gcc-10.3.0-pi_2-3.tar.gz/download 10.3]
| |
| |-
| |
| | Raspberry Pi 3 Model A+ / B+<br>Raspberry Pi 4 Model A+ / B+<br>Raspberry Pi Compute 3 / 3lite / 3+
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%206.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-6.3.0-pi_3%2B.tar.gz/download 6.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%209.4.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.4.0-pi_3%2B.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Stretch/GCC%2010.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz/download 10.3]
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%208.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-8.3.0-pi_3%2B.tar.gz/download 8.3]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%209.4.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-9.4.0-pi_3%2B.tar.gz/download 9.4]<br>[https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2010.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz/download 10.3]
| |
| | style="text-align:center;" | [https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Bullseye/GCC%2010.3.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204/cross-gcc-10.3.0-pi_3%2B.tar.gz/download 10.3]
| |
| |}
| |
| </center>
| |
| <br>
| |
| GCC ARMツールチェーンにおいて、GCC 8以降が必要なため、Linaro社のGCC ARMツールチェーンは使用できない。<br>
| |
| 上表にあるGCC ARM 8.3.0ツールチェーンが動作しない場合、以下のURLにあるGCC ARM 8.3.0ツールチェーンを使用する。<br>
| |
| https://bugfreeblog.page.link/rasplinuxgcc830<br>
| |
| <br>
| |
| または、開発者がGCC ARMツールチェーンを作成する。<br>
| |
| 詳細は、[[インストール - GCC#クロスコンパイラ向けGCCツールチェーンのインストール]]を参照すること。<br>
| |
| <br>
| |
| GCC ARMツールチェインを解凍して、任意のディレクトリに配置する。<br>
| |
| ここでは、~/InstallSoftware/GCC_ARMディレクトリに配置している。<br>
| |
| mv cross-gcc-10.2.0-pi_3+.tar.gz GCC_Raspbian_Buster32_10_2_0
| |
| cd GCC_Raspbian_Buster32_10_2_0 ~/InstallSoftware/GCC_ARM
| |
| <br>
| |
| GCC ARMツールチェーンは、システム固有のLTO(Link Time Optimization)フラグを使用して構築されているため、<br>
| |
| ソフトウェアをコンパイルする時、これらのツールチェーンを使用することで、Raspberry PiのSoC固有の機能を簡単に利用することができる。<br>
| |
| <br>
| |
| Raspberry Pi 4は、Broadcom BCM2711 SoC(Cortex-A72 64bit)を採用しており、Raspberry Pi 3B+と同様、ARMv8-aアーキテクチャを採用している。<br> | |
| <br>
| |
| <center>
| |
| {| class="wikitable" style="background-color:#fefefe;"
| |
| |+ 表. Raspberry PiとLTO(Link Time Optimization)フラグの関係
| |
| |-
| |
| ! style="background-color:#66ccff;" | Raspberry Piの種類
| |
| ! style="background-color:#66ccff;" | LTO(Link Time Optimization)フラグ
| |
| |-
| |
| | Raspberry Pi Zero/W/WH<br>Raspberry Pi 1 Model A / B / A+ / B+ || -march=armv6 -mfloat-abi=hard -mfpu=vfp
| |
| |-
| |
| | Raspberry Pi 2 Model A / B<br>Raspberry Pi 3 Model A / B || -march=armv7-a -mfloat-abi=hard -mfpu=neon-vfpv4
| |
| |-
| |
| | Raspberry Pi 3 Model A+ / B+ (32Bit)<br>Raspberry Pi 4 Model A+ / B+ (32Bit)<br>Raspberry Pi Compute 3 / 3lite / 3+ (32Bit) || -march=armv8-a -mfloat-abi=hard -mfpu=neon-fp-armv8
| |
| |-
| |
| | Raspberry Pi 3 Model A+ / B+ (64Bit)<br>Raspberry Pi 4 Model A+ / B+ (64Bit)<br>Raspberry Pi Compute 3 / 3lite / 3+ (64Bit) || -march=armv8-a+fp+simd
| |
| |}
| |
| </center>
| |
| <br>
| |
| Qt 6を使用してクロスコンパイルする場合、x86 64向けのQtライブラリも必要となる。<br>
| |
| そのため、Qtオンラインインストーラからx86 64向けのQtライブラリをインストールする。<br>
| |
| <br>
| |
| <u>(Qt 6のソースコードからx86 64向けのQt 6ライブラリをビルドおよびインストールしてもよいが、煩雑なため推奨しない)</u><br>
| |
| <br>
| |
| wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run
| |
| <br>
| |
| ダウンロードしたファイルに実行権限を付加する。<br>
| |
| chmod +x qt-unified-linux-x64-online.run
| |
| <br>
| |
| 次に、GCCおよびmake等の開発に付随するライブラリをインストールする。<br>
| |
| # RHEL
| |
| sudo dnf groupinstall "Development tools"
| |
|
| |
| # SUSE
| |
| sudo zypper install --type pattern devel_basis
| |
| <br>
| |
| Qtオンラインインストーラを実行する。<br>
| |
| ./qt-unified-linux-x64-online.run
| |
| <br>
| |
| Qtのインストール画面に従って、Qt 6をインストールする。<br>
| |
| <br>
| |
| | |
| ==== Raspberry Piの設定 ====
| |
| 描画処理に時間が掛かる場合、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 flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
| |
| libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
| |
| libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
| |
| libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
| |
| libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \
| |
| libxcb-xinerama0 libxcb-xinerama0-dev gdbserver \
| |
| mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev \
| |
| python (QtQuickを使用する場合) \
| |
| libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
| |
|
| |
| # XCBを使用する場合
| |
| sudo apt-get install ccache flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
| |
| libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
| |
| libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
| |
| libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
| |
| libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \
| |
| libxcb-xinerama0 libxcb-xinerama0-dev gdbserver \
| |
| libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev \
| |
| libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev \
| |
| libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \
| |
| libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev \
| |
| libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev at-spi2-core gir1.2-atspi-2.0 libatspi2.0-dev \
| |
| python (QtQuickを使用する場合) \
| |
| libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
| |
|
| |
| # Raspberry Pi 4B
| |
| # EGLを使用する場合
| |
| sudo apt-get install ccache flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
| |
| libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
| |
| libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
| |
| libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
| |
| libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev libgbm-dev \
| |
| libxcb-xinerama0 libxcb-xinerama0-dev gdbserver
| |
| python (QtQuickを使用する場合) \
| |
| libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
| |
|
| |
| # XCBを使用する場合
| |
| sudo apt-get install ccache flex bison gperf ruby libicu-dev icu-devtools libhidrd0 libhidrd0-dev libsctp1 libsctp-dev libzstd1 libzstd-dev \
| |
| libatkmm-1.6-dev libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
| |
| libboost1.71-all-dev libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
| |
| libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
| |
| libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev libgbm-dev \
| |
| libxcb-xinerama0 libxcb-xinerama0-dev gdbserver \
| |
| libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev \
| |
| libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev \
| |
| libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \
| |
| libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev \
| |
| libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev \
| |
| python (QtQuickを使用する場合) \
| |
| libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合)
| |
|
| |
| sudo apt-get build-dep libqt5webengine-data (WebEngineを使用する場合)
| |
| sudo apt-get build-dep libqt5webkit5 (WebKitを使用する場合)
| |
| <br>
| |
| マルチメディア関連やBluetooth等を使用する場合、下表に示す任意のパッケージをインストールする。<br>
| |
| <center>
| |
| {| class="wikitable" style="background-color:#fefefe;"
| |
| |+ その他のライブラリ(オプション)
| |
| |-
| |
| ! style="background-color:#00ffff;" | 機能
| |
| ! style="background-color:#00ffff;" | インストールするライブラリ
| |
| ! style="background-color:#00ffff;" | configureスクリプトのオプション
| |
| |-
| |
| | Bluetooth || bluez bluez-tools libbluetooth-dev ||
| |
| |-
| |
| | 画像 || libjpeg-dev libpng-dev libtiff-dev ||
| |
| |-
| |
| | コーデック || libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev ||
| |
| |-
| |
| | マルチメディア || gstreamer1.0-omx libgstreamer1.0-0 libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base<br>gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad<br>libgstreamer-plugins-bad1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-tools<br>gstreamer1.0-alsa gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5<br>libwayland-dev(Wayland開発パッケージは、gstreamerヘッダで必要) ||
| |
| |-
| |
| | ALSAオーディオ || libasound2-dev ||
| |
| |-
| |
| | Pulseオーディオ || pulseaudio libpulse-dev ||
| |
| |-
| |
| | OpenALオーディオ || libopenal-data libsndio7.0 libopenal1 libopenal-dev ||
| |
| |-
| |
| | データベース || libpq-dev(PostgreSQL)<br>libmariadbclient-dev(MariaDB / MySQL) ||
| |
| |-
| |
| | プリンタ || libcups2-dev ||
| |
| |-
| |
| | Wayland || libwayland-dev ||
| |
| |-
| |
| | X11 || libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev<br>libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev<br>libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev<br>libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev<br> libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev ||
| |
| |-
| |
| | WebEngine || 必須 :<br>flex bison gperf libre2-dev libnss3-dev libdrm-dev<br><br>オプション1 :<br>libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev libevent-dev libprotobuf-dev<br>protobuf-compiler<br><br>オプション2(不安定なため注意すること) :<br>libopus-dev libvpx-dev ||
| |
| |-
| |
| | アクセシビリティ || libatspi-dev ||
| |
| |-
| |
| | SCTP || libsctp1 libsctp-dev || -sctp
| |
| |-
| |
| | Broadcom EGLの代わりに<br>VC4ドライバを使用する場合<br><br><u>※Raspberry Pi 4では必須</u> || libgles2-mesa-dev libgbm-dev || -platform linux-rpi-vc4-g++
| |
| |}
| |
| </center>
| |
| <br>
| |
| ビルドしたQtソフトウェアをRasberry Piにデプロイするためのディレクトリを作成する。<br>
| |
| 加えて、Qtライブラリを配置するディレクトリも作成する。<br>
| |
| mkdir -p ~/InstallSoftware/QtApplication ~/InstallSoftware/Qt_5_x_x_EGL ~/InstallSoftware/Qt_5_x_x_XCB
| |
| <br>
| |
| <u>Raspberry Pi 4Bの場合、以下のシンボリックリンクを作成する。</u><br>
| |
| sudo ln -sf -r /usr/include/arm-linux-gnueabihf/asm /usr/include
| |
| sudo ln -sf -r /usr/include/arm-linux-gnueabihf/gnu /usr/include
| |
| sudo ln -sf -r /usr/include/arm-linux-gnueabihf/bits /usr/include
| |
| sudo ln -sf -r /usr/include/arm-linux-gnueabihf/sys/* /usr/include/sys
| |
| sudo ln -sf -r /usr/include/arm-linux-gnueabihf/openssl/* /usr/include/openssl
| |
| sudo ln -sf /usr/lib/arm-linux-gnueabihf/crtn.o /usr/lib/crtn.o && \
| |
| sudo ln -sf /usr/lib/arm-linux-gnueabihf/crt1.o /usr/lib/crt1.o && \
| |
| sudo ln -sf /usr/lib/arm-linux-gnueabihf/crti.o /usr/lib/crti.o
| |
| <br>
| |
| 次のセクションにおいて、<code>rsync</code>コマンドを使用してLinux PCとRaspberry Piのファイルを同期する。<br>
| |
| <u>しかし、同期するファイルには、スーパユーザ権限が必要なものがある。</u><br>
| |
| <br>
| |
| そのため、一般ユーザでも全てのファイルを同期できるように、/etc/sudoersファイルに以下の設定を追記する。<br>
| |
| 以下の設定により、<code>rsync</code>コマンドは、必要に応じてスーパユーザ権限で実行される。<br>
| |
| echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
| |
| <br>
| |
| | |
| ==== システムルートディレクトリの設定 ====
| |
| Linux PCで、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。<br>
| |
| Raspberry Pi上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。<br>
| |
| <br>
| |
| Linux PC上に開発用ディレクトリを作成する。<br>
| |
| また、Raspberry Piのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<br>
| |
| mkdir -p ~/Program/Qt_Embedded/sysroot ~/Program/Qt_Embedded/sysroot/lib ~/Program/Qt_Embedded/sysroot/opt \
| |
| ~/Program/Qt_Embedded/sysroot/usr ~/Program/Qt_Embedded/sysroot/usr/share
| |
| <br>
| |
| <code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br>
| |
| rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot
| |
| rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/include ~/Program/Qt_Embedded/sysroot/usr
| |
| rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/lib ~/Program/Qt_Embedded/sysroot/usr
| |
| rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/share/pkgconfig ~/Program/Qt_Embedded/sysroot/usr/share
| |
| rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/opt/vc ~/Program/Qt_Embedded/sysroot/opt
| |
| <br>
| |
| ダウンロードしたファイルおよびディレクトリのシンボリックリンクを相対的に調整する。<br>
| |
| fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。<br>
| |
| wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
| |
| chmod +x sysroot-relativelinks.py
| |
| ./sysroot-relativelinks.py ~/Program/Qt_Embedded/sysroot
| |
| <br>
| |
| | |
| ==== Qtライブラリのダウンロード ====
| |
| ===== Raspberry Pi 3B /4B 共通 =====
| |
| まず、Qtライブラリのソースコードをダウンロードする。<br>
| |
| <br>
| |
| 以下のコマンドにおいて、<Qtのバージョン>および<Qtのショートバージョン>は、ダウンロードするQtのバージョンに変更する。<br>
| |
| 例えば、Qt 5.15.2をダウンロードする場合、5.15.2と入力する。Qt 5.15の最新版をダウンロードする場合、5.15と入力する。<br>
| |
| * QtBaseをダウンロードする場合
| |
| *: <code>cd ~/Program/Qt_Embedded</code>
| |
| *: <code>git clone git://code.qt.io/qt/qtbase.git -b <Qtのバージョン></code>
| |
| *: または
| |
| *: <code>git clone https://github.com/qt/qtbase -b <Qtのバージョン></code>
| |
| *: <br>
| |
| * Qt Everywhere Opensourceをビルドする場合
| |
| *: <code>wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz</code>
| |
| *: <code>tar xf qt-everywhere-opensource-src-x.x.x.tar.gz</code>
| |
| *: <code>cd qt-everywhere-opensource-src-x.x.x</code>
| |
| *: <br>
| |
| * Githubからソースコードをダウンロードする場合
| |
| *: QtのGithubでは、より多くの新しいアップデートが行われている。
| |
| *: <code>git clone https://github.com/qt/qt5.git</code>
| |
| *: <code>cd qt5</code>
| |
| *: <code>git checkout <Qtのバージョン></code>または<code>git checkout <Qtのショートバージョン></code>
| |
| *: <br>
| |
| *: <code>init-repository</code>コマンドは、Qtが提供する指定したモジュールのソースコードを取得するためのツールである。
| |
| *: super-repoはそれ自体は小さく、他の全てはgit submodulesとして保持されている。
| |
| *: 利用可能な全てのモジュールについては[https://doc.qt.io/qt-5/qtmodules.html こちらのWebサイト]、ツールについては<code>init-repository --help</code>コマンドまたは[https://github.com/qt/qt5/blob/dev/init-repository こちらのWebサイト]を参照すること。
| |
| *: <code>./init-repository --module-subset=essential</code>
| |
| *: <br>
| |
| <br>
| |
| | |
| ===== Raspberry Pi 4B =====
| |
| <u>Raspberry Pi 4Bの場合、以下のように、qmake.confをカスタマイズする必要がある。</u><br>
| |
| qmake.confファイルは、ビルド時の設定を定義するものである。<br>
| |
| cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs
| |
| cp -r linux-arm-gnueabi-g++ linux-arm-gnueabihf-g++
| |
| sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' ./linux-arm-gnueabihf-g++/qmake.conf
| |
| <br>
| |
| | |
| ===== Raspberry Pi 3B (XCBを使用する場合) =====
| |
| <u>設定不要だと推測される。</u><br>
| |
| <br>
| |
| 以下のように、qmake.confをカスタマイズする必要がある。<br>
| |
| cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
| |
| cp -r linux-rasp-pi3-vc4-g++ linux-rasp-pi3-vc4-brcm-g++
| |
| vi linux-rasp-pi3-vc4-brcm-g++/qmake.conf
| |
| <br>
| |
| # linux-rasp-pi3-vc4-brcm-g++/qmake.confファイル
| |
|
| |
| # 編集前
| |
| QMAKE_LIBS_EGL += -lEGL
| |
| QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL
| |
|
| |
| # 編集後
| |
| QMAKE_LIBS_EGL += -lbrcmEGL -lbrcmGLESv2
| |
| QMAKE_LIBS_OPENGL_ES2 += -lbrcmGLESv2 -lbrcmEGL
| |
| <br>
| |
| ===== Raspberry Pi 3B (EGLを使用する場合)=====
| |
| * 方法 1
| |
| Raspberry Pi 3Bの場合も、以下のように、qmake.confをカスタマイズする必要がある。<br>
| |
| cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
| |
| cp -r linux-rasp-pi3-g++ linux-rasp-pi3-brcm-g++
| |
| vi linux-rasp-pi3-brcm-g++/qmake.conf
| |
| <br>
| |
| # qmake.confファイル
| |
|
| |
| # qmake configuration for the Raspberry Pi 3 using the Broadcom graphics stack
| |
| # MODIFIED to use the library names that are shipped since 2016
| |
| #
| |
| # Also setting the linker flags according to the pkg-config files that are shipped with the libraries.
| |
| # Remove egl.pc and glesv2.pc from /usr/lib/arm-linux-gnueabihf/pkgconfig/ for these to take effect.
| |
| # The reason for using static values instead of supplying the correct pkg-config files is that configure ignores -pthread from there
| |
| #
| |
| # Including headers from /opt/vc first, but also from mesa version of EGL and GLES, since the /opt/vc headers are from 2009 and don't work with qtwebengine.
| |
| # This way you can make mesa headers available by manually removing directories EGL, GLES and GLES2 from /opt/vc/include before building.
| |
|
| |
| include(../common/linux_device_pre.conf)
| |
|
| |
| # Let the linker know about /opt/vc/lib. Required for EGL config.test (at least) because brcmGLESv2 also needs brcmEGL.
| |
| QMAKE_RPATHLINKDIR_POST += $$[QT_SYSROOT]/opt/vc/lib
| |
| VC_LIBRARY_PATH = $$[QT_SYSROOT]/opt/vc/lib
| |
| VC_INCLUDE_PATH = $$[QT_SYSROOT]/opt/vc/include
| |
| MESA_INCLUDE_PATH = $$[QT_SYSROOT]/usr/include
| |
| QMAKE_LIBDIR_OPENGL_ES2 = $${VC_LIBRARY_PATH}
| |
| QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2
| |
| QMAKE_LIBDIR_OPENVG = $$QMAKE_LIBDIR_OPENGL_ES2
| |
| QMAKE_LIBDIR_BCM_HOST = $$VC_LIBRARY_PATH
| |
| QMAKE_INCDIR_EGL = \
| |
| $${VC_INCLUDE_PATH} \
| |
| $${MESA_INCLUDE_PATH} \
| |
| $${VC_INCLUDE_PATH}/interface/vcos/pthreads \
| |
| $${VC_INCLUDE_PATH}/interface/vmcs_host/linux
| |
| QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
| |
| QMAKE_INCDIR_BCM_HOST = $$VC_INCLUDE_PATH
| |
|
| |
| # recreating pkg-config --libs glesv2
| |
| QMAKE_LIBS_OPENGL_ES2 = -L$${VC_LIBRARY_PATH} -lbrcmGLESv2 -lbcm_host -lvcos -lvchiq_arm -pthread
| |
|
| |
| # recreating pkg-config --libs egl
| |
| QMAKE_LIBS_EGL = -L$${VC_LIBRARY_PATH} -lbrcmEGL -lbrcmGLESv2 -lbcm_host -lvchostif -lbcm_host -lvcos -lvchiq_arm -pthread
| |
|
| |
| #recreating pkg-config --libs bcm_host
| |
| QMAKE_LIBS_BCM_HOST = -L$${VC_LIBRARY_PATH} -lbcm_host -lvcos -lvchiq_arm -pthread
| |
| QMAKE_CFLAGS = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
| |
| QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
| |
| DISTRO_OPTS += hard-float
| |
| DISTRO_OPTS += deb-multi-arch
| |
| EGLFS_DEVICE_INTEGRATION = eglfs_brcm
| |
|
| |
| include(../common/linux_arm_device_post.conf)
| |
| load(qt_config)
| |
| <br>
| |
| <u>Raspberry Pi 3Bの場合、上記で作成したqmake.confファイルを使用する必要がある。</u><br>
| |
| これは、Qtをビルドする時、pkg-configを使用して、どのライブラリがどの場所にインストールされているかを判断する。<br>
| |
| <br>
| |
| 実際には複数の方法があるが、最良の方法は、上記で作成したqmake.confファイルの静的な定義を使用することである。<br>
| |
| そこで、.pcファイルを削除して、configureがMesaのデフォルトを使用せずに、上記の定義を使用する。<br>
| |
| cd /<sysrootが存在するディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig
| |
| mv egl.pc egl.pc.mesa
| |
| mv glesv2.pc glesv2.pc.mesa
| |
| <br>
| |
| * 方法 2
| |
| cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
| |
| cp -r linux-rasp-pi2-g++ linux-rasp-pi3-brcm-g++
| |
| vi linux-rasp-pi3-brcm-g++/qmake.conf
| |
| <br>
| |
| # linux-rasp-pi3-ex-g++/qmake.confファイル
| |
| # 編集前
| |
| QMAKE_LIBS_EGL = -lEGL -lGLESv2
| |
| QMAKE_LIBS_OPENVG = -lEGL -lOpenVG -lGLESv2
| |
|
| |
| # 編集後
| |
| QMAKE_LIBS_EGL = -lbrcmEGL -lbrcmGLESv2
| |
| QMAKE_LIBS_OPENGL_ES2 = -lbrcmEGL -lbrcmGLESv2 # 追記
| |
| QMAKE_LIBS_OPENVG = -lbrcmEGL -lbrcmOpenVG -lbrcmGLESv2
| |
| <br>
| |
| 次に、以下のソースコードを編集する。<br>
| |
| vi /<Qtのソースコードが存在するディレクトリ>/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
| |
| <br>
| |
| # qxcbeglwindow.cppファイル 96行目あたり
| |
| # 編集前
| |
| m_surface = eglCreateWindowSurface(m_glIntegration->eglDisplay(), m_config, m_window, 0);
| |
|
| |
| # 編集後
| |
| m_surface = eglCreateWindowSurface(m_glIntegration->eglDisplay(), m_config, (void*)m_window, 0);
| |
| <br>
| |
| SysRootディレクトリから、nss.pcファイルがあるディレクトリに対して、パスを追加する。<br>
| |
| find <SysRootディレクトリ> -type f -name nss.pc
| |
|
| |
| export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
| |
| export PKG_CONFIG_PATH="<nss.pcファイルが存在するディレクトリ>:$PKG_CONFIG_PATH"
| |
| <br>
| |
| * 方法 3
| |
| cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices
| |
| cp -r linux-rasp-pi3-g++ linux-rasp-pi3-brcm-g++
| |
| vi linux-rasp-pi3-brcm-g++/qmake.conf
| |
| <br>
| |
| include(../common/linux_device_pre.conf)
| |
|
| |
| QMAKE_LFLAGS += -Wl,-rpath-link,$$[QT_SYSROOT]/opt/vc/lib
| |
| QMAKE_LFLAGS += -Wl,-rpath-link,$$[QT_SYSROOT]/home/pi/<Qtライブラリをデプロイするディレクトリ>/lib
| |
|
| |
| QMAKE_LIBDIR_OPENGL_ES2 = $$[QT_SYSROOT]/opt/vc/lib
| |
| QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2
| |
| QMAKE_LIBDIR_OPENVG = $$QMAKE_LIBDIR_OPENGL_ES2
| |
|
| |
| QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/opt/vc/include \
| |
| $$[QT_SYSROOT]/opt/vc/include/interface/vcos/pthreads \
| |
| $$[QT_SYSROOT]/opt/vc/include/interface/vmcs_host/linux
| |
|
| |
| QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
| |
| QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
| |
|
| |
| QMAKE_LIBS_EGL = -lEGL -lGLESv2
| |
| QMAKE_LIBS_OPENVG = -lEGL -lOpenVG -lGLESv2
| |
|
| |
| QMAKE_CFLAGS = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
| |
| QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
| |
|
| |
| DISTRO_OPTS += hard-float
| |
| DISTRO_OPTS += deb-multi-arch
| |
|
| |
| # Preferred eglfs backend
| |
| EGLFS_DEVICE_INTEGRATION= eglfs_brcm
| |
|
| |
| include(../common/linux_arm_device_post.conf)
| |
|
| |
| load(qt_config)
| |
| <br>
| |
| * 方法 4
| |
| <u>この方法は、qt-everywhere-src-5.x.xファイルのみで実行できる。</u><br>
| |
| <br>
| |
| Githubから、mkspecsを自動編集するツールをダウンロードする。<br>
| |
| このツールでは、libbrcm*.soライブラリ名を参照するように設定されている。<br>
| |
| git clone https://github.com/oniongarlic/qt-raspberrypi-configuration.git
| |
| <br>
| |
| ツールをQtのソースコードがあるディレクトリにインストールする。<br>
| |
| cd ./qt-raspberrypi-configuration
| |
| make install DESTDIR=<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-5.x.x
| |
| <br>
| |
| | |
| ==== Qtライブラリのビルド ====
| |
| ここでは、Qtソフトウェアは~/Program/Qt_Embedded/QtSoftwareディレクトリ、qmake等のホストツールは~/Program/Qt_Embedded/Hostディレクトリ、<br>
| |
| Qtライブラリは~/Program/Qt_Embedded/Target_EGLディレクトリまたは~/Program/Qt_Embedded/Target_XCBディレクトリとしている。<br>
| |
| <br>
| |
| <Raspberry Piのバージョン>は、Raspberry Piの種類に変更する。<br>
| |
| <u>ただし、上記のセクションでmkspecを変更した場合は、そのディレクトリ名に合わせること。</u><br>
| |
| * <Raspberry Piのバージョン>
| |
| ** Raspberry Pi 1
| |
| **: <code>linux-rasp-pi-g++</code>
| |
| ** Raspberry Pi 2
| |
| **: <code>linux-rasp-pi2-g++</code>
| |
| ** Reaspberry Pi 3
| |
| *** <code>linux-rasp-pi3-g++</code>(EGL)
| |
| *** <code>linux-rasp-pi3-vc4-g++</code>(XCB)
| |
| *** 上記のセクションで作成した<code>linux-rasp-pi3-brcm-g++</code>(EGL)
| |
| *** その他
| |
| ** Raspberry Pi 4
| |
| **: <code>linux-rasp-pi4-v3d-g++</code>
| |
| <br>
| |
| <u>Raspbian OS 64bitを使用している場合は、<code>-device-option</code>オプションを以下のように記述する。</u><br>
| |
| <code>-device-option CROSS_COMPILE=/<GCC ARMツールチェインのインストールディレクトリ>/bin/aarch64-linux-gnueabihf-</code><br>
| |
| また、Qt 5.8以降は、<code>-no-use-gold-linker</code>オプションを追加する必要がある。<br>
| |
| <br>
| |
| * QtBase / Qt Everywhere Opensource / GithubからダウンロードしたQt
| |
| *: ビルドディレクトリの作成
| |
| *: <code>mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build</code>
| |
| *: <br>
| |
| *: <u>GCC ARM 8.3.0以降を使用する場合は、以下の設定をターミナルで実行する。</u>
| |
| *: <code>CROSS_PI_PATH=/<GCC ARMツールチェインのインストールディレクトリ></code>
| |
| *: <code>CROSS_COMPILE=$CROSS_PI_PATH/bin/arm-linux-gnueabihf-</code>
| |
| *: <br>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/lib:$LD_LIBRARY_PATH</code>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/lib:$LD_LIBRARY_PATH</code>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib:$LD_LIBRARY_PATH</code>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib:$LD_LIBRARY_PATH</code>
| |
| *: <br>
| |
| *: <code>LDFLAGS="-L$CROSS_PI_PATH/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib/"</code>
| |
| *: <br>
| |
| *: Configureスクリプトの実行
| |
| *: <u># Raspberry Pi 3B</u>
| |
| *: <code>PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \</code>
| |
| *: <code>PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \</code>
| |
| *: <code>../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \</code>
| |
| *: <code>-opengl es2 -eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-opengl es2 \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-device <Raspberry Piのバージョン> \</code>
| |
| *: <code>-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \</code>
| |
| *: <code>-opensource -confirm-license -v \</code>
| |
| *: <code>-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \</code>
| |
| *: <code>-ltcg -iconv \</code> # 必要な場合は指定する
| |
| *: <code>-qpa eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-qpa xcb \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \</code>
| |
| *: <code>-sysroot /<SysRootがあるディレクトリ>/sysroot \</code>
| |
| *: <code>-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \</code>
| |
| *: <code>-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \</code>
| |
| *: <code>-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host</code>
| |
| *: <code>-no-gcc-sysroot</code> <span style="color:#C00000"><u>GCC ARM 8.3.0以降を使用する場合</u></span>
| |
| *: <br>
| |
| *: <u># Raspberry Pi 4B</u>
| |
| *: <code>PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \</code>
| |
| *: <code>PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \</code>
| |
| *: <code>../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \</code>
| |
| *: <code>-opengl es2 -eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-opengl es2 \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-device <Raspberry Piのバージョン> \</code>
| |
| *: <code>-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \</code>
| |
| *: <code>-opensource -confirm-license -v \</code>
| |
| *: <code>-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \</code>
| |
| *: <code>-ltcg -iconv -fontconfig -ccache \</code> # 必要な場合は指定する
| |
| *: <code>-qpa eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-qpa xcb \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \</code>
| |
| *: <code>-sysroot /<SysRootがあるディレクトリ>/sysroot \</code>
| |
| *: <code>-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \</code>
| |
| *: <code>-extprefix /<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> |
|
| |
|
概要
Qtは、デスクトップ、組み込み、モバイルプラットフォーム向けのソフトウェアやユーザーインターフェイスの作成を効率化するために設計されたツールを備えた完全な開発フレームワークである。
Qt 6.2 LTSのサポート期間は、2024年9月30日まで、Qt 6.5 LTSのサポート期間は2026年3月30日までである。
Qtライセンスを購入するには、http://www.qt.io/download/ を参照すること。
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 u+x qt-unified-linux-x64-online.run
Qtのインストール
/usr/localディレクトリ等にインストールする場合は、スーパーユーザでインストールする。
ホームディレクトリにインストールする場合は、ローカルユーザでインストールする。
次に、GCCおよびmake、付随するライブラリをインストールする。
# RHEL
sudo dnf groupinstall "Development tools"
# SUSE
sudo zypper install --type pattern devel_basis
Qtをインストールする。
./qt-unified-linux-x64-online.run
Qtのインストール画面に従って、インストールを実行する。
Qtをインストールした後、必要ならば、以下のコマンドを実行する。
これは、pkg-config
コマンドが指すディレクトリを変更する設定である。
cd /<Qtのインストールディレクトリ>/<Qtのバージョン>/gcc_64/lib
cp ./pkgconfig ./pkgconfig_org
cd /<Qtのインストールディレクトリ>/<Qtのバージョン>/gcc_64/lib/pkgconfig
sed -i -e "s/prefix=\/home\/qt\/work\/install/prefix=\/<Qtのインストールディレクトリ>\/<Qtのバージョン>\/gcc_64/g" ./*
ソースコードからインストール
必須環境
- Qt 6.0以降
- Qt WebEngine module for QtWebEngine based help viewer
- GCC 7以降
- オプション : CMake
- CMakeを使用してLLVM / ClangとQt Creatorをビルドする時に必要である。
- オプション : Ninja
- CMakeを使用してビルドする時に必要である。
- オプション : LLVM / Clang 8.0.0以降
- Clang Code Model、Clang Tools、ClangFormat、Clang PCH Manager、Clang Refactoringプラグインに必要である。
- LLVM C++ APIは互換性を保証するものではないので、それ以降のバージョンがコンパイルできない場合は、そのバージョンをサポートしていない。
- オプション : Qbs 1.7.x
- Qtのソースコードには、Qbs自身も含まれている。
また、Qtをビルドする時のオプション設定を以下に記載する。
# オプション : 環境変数PATHにおいて、llvm-configのパスが通っていない場合に必要である
export LLVM_INSTALL_DIR=<LLVMのインストールディレクトリ>
# オプション : Clangのリファクタリングを無効にする場合、1を設定する
export QTC_DISABLE_CLANG_REFACTORING=1
# オプション : QbsProjectManagerプラグインがQbsを使用する場合に必要である
export QBS_INSTALL_DIR=/path/to/qbs
# オプション : KSyntaxHighlightingを使用する場合、KSYNTAXHIGHLIGHTING_LIB_DIRライブラリを保持するディレクトリを設定する
# インクルードディレクトリの自動推定に失敗する場合、KSYNTAXHIGHLIGHTING_INCLUDE_DIRを設定して、
# 両方の設定をqmakeコマンドのオプションで渡すこともできる
export KSYNTAXHIGHLIGHTING_INCLUDE_DIR=<インクルードファイルを保持するディレクトリ>
export KSYNTAXHIGHLIGHTING_LIB_DIR=<ライブラリを保持するディレクトリ>
依存関係のライブラリのインストール
Qtのソースコードをコンパイルするために必要な依存関係のライブラリをインストールする。
sudo zypper install git-core gcc-c++ make flex bison gperf libicu-devel python3 perl \
mozilla-nss-devel nodejs10 nodejs10-devel ruby mozilla-nspr-devel \
xorg-x11-libxcb-devel xcb-util-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel \
xcb-util-wm-devel xorg-x11-devel libxkbcommon-x11-devel libxkbcommon-devel libXi-devel \
dbus-1-devel libXcomposite-devel libXcursor-devel libXrandr-devel libXtst-devel wayland-devel \
pulseaudio-libs-devel alsa-devel alsa-lib-devel gstreamer1-devel gstreamer1-plugins-base-devel
- fontconfig-devel
- libfontenc-devel
- libXft-devel
- libx11-devel
- libxcb-devel
- libXext-devel
- libXfixes-devel
- libXrender-devel
- Mesa-libGL-devel
- libXinerama-devel
- libxcb-shm0-dev
- libxcb-sync0-dev
- libxcb-shape0-dev
ソースコードのダウンロード
Qtのソースコードをダウンロードする。
git clone --recursive https://code.qt.io/qt-creator/qt-creator.git
ソースコードのビルド
Qtのソースコードをビルドするため、ビルド用のディレクトリを作成する。
mkdir build
cd build
- qmakeを使用する場合
- オプションのClang Code Modelプラグインをビルドする場合、LLVMのインストールディレクトリへのパスを指定する必要がある。
export LLVM_INSTALL_DIR=<LLVMのインストールディレクトリ>
qmake ../qt-creator/qtcreator.pro
make qmake_all
make -j $(nproc)
- もし、
Project ERROR: Unknown module(s) in QT: script
というエラーが出力される場合、以下のコマンドを実行する。
make -j $(nproc) module-qtscript
- cmakeを使用する場合
- Qtのソースコードをビルドする。
cmake -G Ninja -D CMAKE_BUILD_TYPE=Release -D CMAKE_PREFIX_PATH=<Qtのインストールディレクトリ>; <LLVMのインストールディレクトリ> ../qt-creator
cmake --build .. --parallel $(nproc)
コンパイルには時間が掛かることに注意する。(バイナリファイルは、qt-createor-build/binディレクトリに作成される)
Qtのインストール
Qtをインストールする。
# qmakeを使用する場合
make install
# cmakeを使用する場合
cmake --install ..
デスクトップエントリの追加
以下のコマンドを実行して、デスクトップエントリを追加する。
vi ~/.local/share/applications/Qt_Creator.desktop
# Qt_Creator.desktopファイル
[Desktop Entry]
Type=Application
Exec=/<Qt 6のインストールディレクトリ>/Tools/QtCreator/bin/qtcreator %F
Name=Qt Creator <バージョン名>
GenericName=Qt Creator
Icon=QtProject-qtcreator
StartupWMClass=qtcreator
Terminal=false
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;
vi ~/.local/share/applications/Qt_MaintenanceTool.desktop
# Qt_MaintenanceTool.desktopファイル
[Desktop Entry]
Type=Application
Path=/home/<ユーザ名>/Qt
Name=Qt Maintenance Tool
GenericName=Install or uninstall Qt components.
Exec=/<Qt 6のインストールディレクトリ>/MaintenanceTool
Icon=/home/<ユーザ名>/Qt/QtIcon.png
Terminal=false
Categories=Development;Qt;
vi ~/.local/share/applications/Qt_Designer.desktop
# Qt_Designer.desktopファイル
[Desktop Entry]
Type=Application
Name=Qt Designer <バージョン名>
GenericName=Qt Designer
Comment=
Path=
Exec=/<Qt 6のインストールディレクトリ>/<バージョン名>/gcc_64/bin/designer %F
Icon=/home/<ユーザ名>/.icons/Qt_Designer.png
StartupNotify=true
StartupWMClass=qtdesigner
Terminal=false
TerminalOptions=
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=
日本語入力
専用のインストーラからQtをインストールする場合、Qt Creatorにおいて、Fcitxで日本語が入力できない問題が存在する。
これは、plugins/platforminputcontextsディレクトリにlibfcitxplatforminputcontextplugin.soファイルが欠如しているため、IMEの切り替えができないからである。
そのため、ユーザがlibfcitxplatforminputcontextplugin.soファイルを含むfcitx-qt5ライブラリを、ソースコードからビルドしてインストールする必要がある。
FcitxおよびFcitx5を使用している場合で手順が異なることに注意すること。
Fcitxを使用している場合
fcitx-qt5ライブラリ(Fcitx)をインストールする。
- まず、Qt Creatorを起動して、[ヘルプ]メインメニューから[About Qt Creator...]を選択、バージョン情報を確認する。
以下の画像では、Qt Creatorのバージョンは6.0.2、Qt Creatorのビルドに使用されたQt SDKは6.2.2となっている。
- fcitx-qt5のインストールに必要な依存関係のライブラリをインストールする。
sudo zypper install extra-cmake-modules libxkbcommon-devel
- fcitx-qt5のソースコードをダウンロードする。
git clone https://github.com/fcitx/fcitx-qt5.git
- もし、上記の画像のように、Qt Creatorのビルドに使用されたQt SDKが6の場合、
Qtメンテナンスツールを起動して、[コンポーネントの追加または削除]から該当するQtのバージョン以降の[Desktop gcc 64-bit]のみをインストールする。
- ダウンロードしたfcitx-qt5のディレクトリに移動して、ビルド向けディレクトリを作成する。
cd fcitx-qt5 && mkdir build && cd build
- fcitx-qt5ライブラリをビルドおよびインストールする。
インストールディレクトリは、自動的に/<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontextsディレクトリにインストールされる。
- Qt Creatorのビルドに使用されたQt SDKが5の場合
export PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/bin:$PATH"
export CPATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/include:$CPATH"
export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"
- Qt Creatorのビルドに使用されたQt SDKが6の場合
export PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/bin:$PATH"
export CPATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/include:$CPATH"
export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"
- ビルドおよびインストール
ENABLE_LIBRARY=$(pkg-config --exists fcitx icu-uc && echo ON || echo OFF) && \
cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \
-DCMAKE_C_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> -DCMAKE_CXX_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_QT4=<Qt Creatorのビルドに使用されたQt SDKが4の場合はon、それ以外はoff> \
-DENABLE_QT5=<Qt Creatorのビルドに使用されたQt SDKが5の場合はon、それ以外はoff> \
-DENABLE_QT6=<Qt Creatorのビルドに使用されたQt SDKが6の場合はon、それ以外はoff> \
-DCMAKE_PREFIX_PATH=/<Qt 5のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが5の場合
-DCMAKE_PREFIX_PATH=/<Qt 6のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが6の場合
make -j $(nproc)
make install
- インストールしたlibfcitxplatforminputcontextplugin.soファイルを、/<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontextsディレクトリに配置する。
これにより、Qt Creator等において、FcitxでのIMEの切り替えができるようになる。
ただし、Qt Creatorをアップデートする場合は、fcitx-qt5を再インストールする必要があるため注意すること。
cp /<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so \
/<Qtのインストールディレクトリ>/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts
Fcitx5を使用している場合
fcitx5-qtライブラリ(Fcitx5)をインストールする。
- まず、Qt Creatorを起動して、[ヘルプ]メインメニューから[About Qt Creator...]を選択、バージョン情報を確認する。
以下の画像では、Qt Creatorのバージョンは6.0.2、Qt Creatorのビルドに使用されたQt SDKは6.2.2となっている。
- fcitx-qt5のインストールに必要な依存関係のライブラリをインストールする。
sudo zypper install cmake extra-cmake-modules libxkbcommon-devel fcitx5-devel
- fcitx-qt5のソースコードをダウンロードする。
git clone https://github.com/fcitx/fcitx5-qt
- もし、上記の画像のように、Qt Creatorのビルドに使用されたQt SDKが6の場合、
Qtメンテナンスツールを起動して、[コンポーネントの追加または削除]から該当するQtのバージョン以降の[Desktop gcc 64-bit]のみをインストールする。
- ダウンロードしたfcitx5-qtのディレクトリに移動して、ビルド向けディレクトリを作成する。
cd fcitx5-qt && mkdir build && cd build
- fcitx5-qtライブラリをビルドおよびインストールする。
インストールディレクトリは、自動的に/<Qtのインストールディレクトリ>/<バージョン>/gcc_64/plugins/platforminputcontextsディレクトリにインストールされる。
- Qt Creatorのビルドに使用されたQt SDKが5の場合
export PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/bin:$PATH"
export CPATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/include:$CPATH"
export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt5のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"
- Qt Creatorのビルドに使用されたQt SDKが6の場合
export PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/bin:$PATH"
export CPATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/include:$CPATH"
export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$(pkg-config --variable pc_path pkg-config)"
export PKG_CONFIG_PATH="/<Qtのインストールディレクトリ>/<Qt6のバージョン>/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH"
- ビルドおよびインストール
export ENABLE_LIBRARY=$(pkg-config --exists fcitx icu-uc && echo ON || echo OFF) && \
cmake .. -DENABLE_LIBRARY=$ENABLE_LIBRARY \
-DCMAKE_C_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> -DCMAKE_CXX_COMPILER=<GCC 8以降:Qt Creatorのビルドに使用されたQt SDKが6の場合> \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_QT4=<Qt Creatorのビルドに使用されたQt SDKが4の場合はon、それ以外はoff> \
-DENABLE_QT5=<Qt Creatorのビルドに使用されたQt SDKが5の場合はon、それ以外はoff> \
-DENABLE_QT6=<Qt Creatorのビルドに使用されたQt SDKが6の場合はon、それ以外はoff> \
-DCMAKE_PREFIX_PATH=/<Qt 5のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが5の場合
-DCMAKE_PREFIX_PATH=/<Qt 6のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKが6の場合
make -j $(nproc)
make install
- インストールした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でクロスコンパイルを行う場合、インストール_-_Qt6_Raspberry_Piのページを参照すること。
PinePhoneのクロスコンパイル
PinePhoneでクロスコンパイルを行う場合、インストール_-_Qt6_PinePhoneのページを参照すること。
エラー関連
libdbusに関する問題
以下に示すようなlibdbusに関するコンパイルエラーが発生する場合がある。
# ...略
/<GCCクロスコンパイラのパス>/bin/ld: /<PinePhoneのシステムルート>/usr/lib/aarch64-linux-gnu/libdbus-1.a(libdbus_1_la-dbus-message.o):
relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `dbus_message_unref' which may bind externally can not be used when making a shared object; recompile with -fPIC
# ...略
これは、システムルート内にあるlibdbusが動的共有オブジェクトでない場合に発生する可能性がある。
これは通常、Mobian / Manjaro ARMの再インストールすることで解決できる。
別の方法としては、libdbus-1-devパッケージを再インストールすることである。
しかし、この問題が解決せず、D-Busが不要の場合は-DFEATURE_dbus=OFF
オプションを付加することにより、D-Bus機能を無効にすることができる。
さらに別の方法として、set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
の行を、
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -ldbus-1")
に変更する。
この場合、/<PinePhoneのシステムルート>/usr/lib/aarch64-linux-gnu/libdbus-1.soへのリンクが有効であることを確認する。
(同階層のディレクトリのlibdbus-1.so.X.XX.XXにリンクされているはずである)
※注意
Bluetoothモジュールを動作させるにはD-Bus機能が必要である。
libstdc++のエラー
デバッグ時において、以下に示すようなエラーが出力される場合はある。
/Path/to/<Project Name>/bin/<Binary Name>: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.XX' not found (required by /Path/to/Qt6 Library/lib/libQt6Qml.so.6)
クロスコンパイラのlibstdc++.so.6ファイルにおいて、ターゲットとなるOSのlibstdc++.so.6ファイルのバージョンと同等または古いものを使用する必要がある。
例えば、Debian 12 (Mobian 12)はGLIBCXX_3.4.30であるため、GCC 12.2ツールチェーン以前のものを使用する。
以下に示すコマンドを実行して、GLIBCXXのバージョンを確認することができる。
# クロスコンパイラ
strings /<クロスコンパイラのインストールディレクトリ>/<アーキテクチャ名 例: aarch64-linux-gnu>/lib64/libstdc++.so.6 | grep -E '^GLIBCXX'
# Manjaro
strings /usr/lib/libstdc++.so.6 | grep -E '^GLIBCXX'
# Mobian
strings /usr/lib/aarch64-linux-gnu/libstdc++.so.6 | grep -E '^GLIBCXX'
AT-SPI2の警告
Qt6ライブラリを使用してプロジェクトをクロスコンパイルして実行する時、以下に示すようなAT-SPI2に関するエラーが出力される場合がある。
qt.accessibility.atspi Error Not connected to D-Bus server
もし、アクセシビリティが不要な場合、Qt6ライブラリのコンパイルにおいて、cmake
コマンドにアクセシビリティを無効にするオプションを付加する。
-DQT_FEATURE_accessibility=OFF
-DQT_FEATURE_accessibility_atspi_bridge=OFF
GDBデバッグ実行時におけるキャッシュファイルの警告
デバッグ実行時において、以下に示すような警告が非常に多く出力される場合がある。
index cache: could not make cache directory: Permission denied
この警告は、デバッグ実行時のターゲットデバイスのディレクトリが存在しない場合、または、該当ディレクトリに書き込み権限が無い場合に出力される。
この警告を抑制する場合は、以下に示す設定を行う。
- Qt Creatorの[編集]メニューバー - [Preferences...]を選択する。
- [設定]ダイアログが開くので、画面左ペインにある[デバッガ] - 画面右ペインにある[GDB]タブ - [追加の起動コマンド]に、以下に示す設定を入力する。
set index-cache directory /tmp/GDB
この設定により、/tmp/GDBディレクトリにデバッグ関連のログファイルが出力されるようになる。