インストール - Qt5
概要
Qtは、デスクトップ、組み込み、モバイルプラットフォーム向けのソフトウェアやユーザーインターフェイスの作成を効率化するために設計されたツールを備えた完全な開発フレームワークである。
Qt 5.15 LTSのサポート期間は、Qtレガシーライセンスは2023年5月26日まで、Qtサブスクリプションライセンスは2025年5月26日までである。
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 +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等を使用したソフトウェアを開発する場合、下表に示すパッケージをインストールする。
機能 | インストールするライブラリ | 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
# 必要な場合は個別に追加ダウンロードする
- GithubからQtのソースコードを個別にダウンロードする。
ソースコードのビルド
ビルド用ディレクトリを作成する。
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を別途インストールする場合は、以下の手順に従う。
- もし、必要ならば、Qtの公式WebサイトからQtWebEngineをダウンロードする。
- もし、上記URLからQtWebEngine単体をダウンロードしてビルドする場合は、ローカルヘッダが利用可能であることを確認する。
find <QtWebEngineのソースコードがあるディレクトリ> -type f -name "*.pr[io]" | xargs sed -i -e 's|INCLUDEPATH += |&$$QTWEBENGINE_ROOT/include |'
- QtWebEngineでのジャンボビルドを無効化する。 (標準のジャンボビルドシステムでは、コンパイル時に不明のエラーが出力されるため)
sed -i -e 's|use_jumbo_build=true|use_jumbo_build=false|' /<QtWebEngineのソースコードがあるディレクトリ>/src/buildtools/config/common.pri
- QtWebEngineは、現在のパブリックリリースよりも遅いリリースを目的としているため、Qt 5.15.2向けとしてビルドするように変更する。
sed -e '/^MODULE_VERSION/s/5.*/5.15.2/' -i /<QtWebEngineのソースコードがあるディレクトリ>/.qmake.conf
- PulseAudioライブラリを実行時ではなく、ビルド時にリンクするようにする。
これは、新しいPulseAudioでの問題を防ぐことにもなる。sed -e '/link_pulseaudio/s/false/true/' -i /<QtWebEngineのソースコードがあるディレクトリ>/src/3rdparty/chromium/media/media_options.gni
- ビルドシステムの変更点として、
make
に-j 20
等を渡す場合、LFSの環境変数NINJAJOBS
の使用でビルドが破壊されることを修正する。sed -i 's/NINJAJOBS/NINJA_JOBS/' /<QtWebEngineのソースコードがあるディレクトリ>/src/core/gn_run.pro
- 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
- インストールされたライブラリ依存ファイル(.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ライブラリをインストールする手順を示す。
- まず、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のインストールディレクトリ>/<バージョン>/gcc_64 # Qt Creatorのビルドに使用されたQt SDKのディレクトリ
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 3B / 4Bのクロスコンパイル
概要
Raspberry Piにおいて、一般的なデスクトップソフトウェアのクロスコンパイルおよび組み込み / デバイス作成のユースケースの
クロスコンパイルを行う手順を記載する。
組み込み / デバイス作成とは、デスクトップソフトウェアをX11の下で実行するためのものではなく、
ソフトウェアがBroadcomドライバを使用して、dispmanx / EGLの上でフルスクリーンで実行するというユースケースのことである。
EGLを使用する場合、Qtソフトウェアはフルスクリーンでのみ動作する。
通常のウインドウで起動する場合は、XCBを使用する必要があるが、XCBはOpenGLやQt Quickは動作しないことに注意すること。
このセクションでは、Raspberry PiにRaspbian Busterをインストールしていることを想定している。
Linux PCの設定
Linux PCにおいて、以下の依存関係のライブラリをインストールする。
(Texinfoは、GNU公式Webサイトにアクセスして、ソースコードからインストールすることを推奨する)
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
Raspberry Pi専用のGCC ARMツールチェインをダウンロードする。
https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/
Raspberry Piの種類 | Raspbian Stretch(32-bit) | Raspbian Buster(32-bit) |
---|---|---|
Raspberry Pi Zero/W/WH Raspberry Pi 1 Model A / B / A+ / B+ |
6.3.0 9.3.0 10.2.0 |
8.3.0 9.3.0 10.2.0 |
Raspberry Pi 2 Model A / B Raspberry Pi 3 Model A / B |
6.3.0 9.3.0 10.2.0 |
8.3.0 9.3.0 10.2.0 |
Raspberry Pi 3 Model A+ / B+ Raspberry Pi 4 Model A+ / B+ Raspberry Pi Compute 3 / 3lite / 3+ |
6.3.0 8.3.0 10.2.0 |
8.3.0 9.3.0 10.2.0 |
また、Linero社が提供しているGCC ARMツールチェーンも使用することができる。
https://releases.linaro.org/components/toolchain/binaries/
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
上表にあるGCC ARM 8.3.0ツールチェーンが動作しない場合、以下のURLにあるGCC ARM 8.3.0ツールチェーンを試すこともできる。
https://bugfreeblog.page.link/rasplinuxgcc830
GCC ARMツールチェインを解凍して、任意のディレクトリに配置する。
ここでは、~/InstallSoftware/GCC_ARMディレクトリに配置している。
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
GCC ARMツールチェーンは、システム固有のLTO(Link Time Optimization)フラグを使用して構築されているため、
ソフトウェアをコンパイルする時、これらのツールチェーンを使用することで、Raspberry PiのSoC固有の機能を簡単に利用することができる。
Raspberry Pi 4は、Broadcom BCM2711 SoC(Cortex-A72 64bit)を採用しており、Raspberry Pi 3B+と同様、ARMv8-aアーキテクチャを採用している。
Raspberry Piの種類 | LTO(Link Time Optimization)フラグ |
---|---|
Raspberry Pi Zero/W/WH Raspberry Pi 1 Model A / B / A+ / B+ |
-march=armv6 -mfloat-abi=hard -mfpu=vfp |
Raspberry Pi 2 Model A / B Raspberry Pi 3 Model A / B |
-march=armv7-a -mfloat-abi=hard -mfpu=neon-vfpv4 |
Raspberry Pi 3 Model A+ / B+ (32Bit) Raspberry Pi 4 Model A+ / B+ (32Bit) Raspberry Pi Compute 3 / 3lite / 3+ (32Bit) |
-march=armv8-a -mfloat-abi=hard -mfpu=neon-fp-armv8 |
Raspberry Pi 3 Model A+ / B+ (64Bit) Raspberry Pi 4 Model A+ / B+ (64Bit) Raspberry Pi Compute 3 / 3lite / 3+ (64Bit) |
-march=armv8-a+fp+simd |
Raspberry Piの設定
描画処理に時間が掛かる場合、Raspberry PiのVRAMを128[MB]や256[MB]程度に変更する。
- VRAMを変更する手順
sudo raspi-config
- 次に、[Performance Options] - [GPU Memory]を選択して、任意の数値を入力する。
- 最後に、[Finish]を選択して終了する。
Raspberry Pi 4Bでは、Broadcom EGLはサポートされていないため、Qt 5を使用する場合は、KMSを有効にする必要がある。
また、KMSを有効にするには、libgles2-mesa-devライブラリとlibgbm-devライブラリをインストールする必要がある。
- GL(FAKE KMS)を有効にする手順
sudo raspi-config
- 次に、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択することにより、KMSが有効になる。
- 最後に、[Finish]を選択して終了する。
- (最小限のビルドを使用する場合、このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする。
次に、/etc/apt/sources.listファイルのdeb-srcから始まる行のコメントを外す。
sudo vi /etc/apt/sources.list
# /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
Raspbian Busterのソフトウェアをアップデートする。
sudo apt-get update sudo apt-get dist-upgrade sudo reboot
Raspberry Piのファームウェアをアップデートする。
sudo rpi-update sudo reboot
Raspberry Piに、Qtライブラリをインストールする。(ここでは簡単にするために、build-depを使用する)
ここで、build-dep
コマンドとは、ビルドに必要なパッケージが全てインストールするコマンドである。
ビルド設定によっては、不要なパッケージも含まれている。
# Raspberry Pi 3B # EGLを使用する場合 sudo apt-get install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-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 python2 libpython2.7 (QtQuickを使用する場合) \ libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合) libraspberrypi-dev # 32ビットOSを使用する場合 # XCBを使用する場合 sudo apt-get install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-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 \ python2 libpython2.7 (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 libraspberrypi-dev # 32ビットOSを使用する場合 # Raspberry Pi 4B # EGLを使用する場合 sudo apt-get install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-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 python2 libpython2.7 (QtQuickを使用する場合) \ libgtk-3-dev (QtWidget向けにGTKネイティブテーマを使用する場合) # XCBを使用する場合 sudo apt-get install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-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 \ 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 python2 libpython2.7 # QtQuickを使用する場合 libgtk-3-dev # QtWidget向けにGTKネイティブテーマを使用する場合 sudo apt-get build-dep libqt5webengine-data (WebEngineを使用する場合) sudo apt-get build-dep libqt5webkit5 (WebKitを使用する場合)
マルチメディア関連やBluetooth等を使用する場合、下表に示す任意のパッケージをインストールする。
機能 | インストールするライブラリ | 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 gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad libgstreamer-plugins-bad1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 libwayland-dev(Wayland開発パッケージは、gstreamerヘッダで必要) |
|
ALSAオーディオ | libasound2-dev | |
Pulseオーディオ | pulseaudio libpulse-dev | |
OpenALオーディオ | libopenal-data libopenal1 libopenal-dev libsndio7.0 libsndio-dev | |
データベース | unixodbc-dev (ODBC) libsqlite3-dev (SQLite) libpq-dev(PostgreSQL) libmariadb-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 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-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev |
|
WebEngine | 必須 : flex bison gperf libre2-dev libnss3-dev libdrm-dev オプション1 : libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev libevent-dev libprotobuf-dev protobuf-compiler オプション2(不安定なため注意すること) : libopus-dev libvpx-dev |
|
アクセシビリティ | libatspi-dev | |
SCTP | libsctp1 libsctp-dev | -sctp |
Broadcom EGLの代わりに VC4ドライバを使用する場合 ※Raspberry Pi 4では必須 |
libgles2-mesa-dev libgbm-dev | -platform linux-rpi-vc4-g++ |
ビルドしたQtソフトウェアをRasberry Piにデプロイするためのディレクトリを作成する。
加えて、Qtライブラリを配置するディレクトリも作成する。
mkdir -p ~/InstallSoftware/QtApplication ~/InstallSoftware/Qt_5_x_x_EGL ~/InstallSoftware/Qt_5_x_x_XCB
Raspberry Pi 4Bの場合、以下のシンボリックリンクを作成する。
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
次のセクションにおいて、rsync
コマンドを使用してLinux PCとRaspberry Piのファイルを同期する。
しかし、同期するファイルには、スーパユーザ権限が必要なものがある。
そのため、一般ユーザでも全てのファイルを同期できるように、/etc/sudoersファイルに以下の設定を追記する。
以下の設定により、rsync
コマンドは、必要に応じてスーパユーザ権限で実行される。
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
システムルートディレクトリの設定
Linux PCで、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。
Raspberry Pi上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。
Linux PC上に開発用ディレクトリを作成する。
また、Raspberry Piのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。
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
rsync
コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。
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
ダウンロードしたファイルおよびディレクトリのシンボリックリンクを相対的に調整する。
fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。
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
Qtライブラリのダウンロード
Raspberry Pi 3B /4B 共通
まず、Qtライブラリのソースコードをダウンロードする。
以下のコマンドにおいて、<Qtのバージョン>および<Qtのショートバージョン>は、ダウンロードするQtのバージョンに変更する。
例えば、Qt 5.15.2をダウンロードする場合、5.15.2と入力する。Qt 5.15の最新版をダウンロードする場合、5.15と入力する。
- QtBaseをダウンロードする場合
cd ~/Program/Qt_Embedded
git clone git://code.qt.io/qt/qtbase.git -b <Qtのバージョン>
- または
git clone https://github.com/qt/qtbase -b <Qtのバージョン>
- Qt Everywhere Opensourceをビルドする場合
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
cd qt-everywhere-opensource-src-x.x.x
- Githubからソースコードをダウンロードする場合
- QtのGithubでは、より多くの新しいアップデートが行われている。
git clone https://github.com/qt/qt5.git
cd qt5
git checkout <Qtのバージョン>
またはgit checkout <Qtのショートバージョン>
init-repository
コマンドは、Qtが提供する指定したモジュールのソースコードを取得するためのツールである。- super-repoはそれ自体は小さく、他の全てはgit submodulesとして保持されている。
- 利用可能な全てのモジュールについてはこちらのWebサイト、ツールについては
init-repository --help
コマンドまたはこちらのWebサイトを参照すること。 ./init-repository --module-subset=essential
Raspberry Pi 4B
Raspberry Pi 4Bの場合、以下のように、qmake.confをカスタマイズする必要がある。
qmake.confファイルは、ビルド時の設定を定義するものである。
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
Raspberry Pi 3B (XCBを使用する場合)
設定不要だと推測される。
以下のように、qmake.confをカスタマイズする必要がある。
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
# 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
Raspberry Pi 3B (EGLを使用する場合)
- 方法 1
Raspberry Pi 3Bの場合も、以下のように、qmake.confをカスタマイズする必要がある。
cd /<Qtのソースコードが存在するディレクトリ>/qtbase/mkspecs/devices cp -r linux-rasp-pi3-g++ linux-rasp-pi3-brcm-g++ vi linux-rasp-pi3-brcm-g++/qmake.conf
# 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)
Raspberry Pi 3Bの場合、上記で作成したqmake.confファイルを使用する必要がある。
これは、Qtをビルドする時、pkg-configを使用して、どのライブラリがどの場所にインストールされているかを判断する。
実際には複数の方法があるが、最良の方法は、上記で作成したqmake.confファイルの静的な定義を使用することである。
そこで、.pcファイルを削除して、configureがMesaのデフォルトを使用せずに、上記の定義を使用する。
cd /<sysrootが存在するディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig mv egl.pc egl.pc.mesa mv glesv2.pc glesv2.pc.mesa
- 方法 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
# 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
次に、以下のソースコードを編集する。
vi /<Qtのソースコードが存在するディレクトリ>/qtbase/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
# 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);
SysRootディレクトリから、nss.pcファイルがあるディレクトリに対して、パスを追加する。
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"
- 方法 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
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)
- 方法 4
この方法は、qt-everywhere-src-5.x.xファイルのみで実行できる。
Githubから、mkspecsを自動編集するツールをダウンロードする。
このツールでは、libbrcm*.soライブラリ名を参照するように設定されている。
git clone https://github.com/oniongarlic/qt-raspberrypi-configuration.git
ツールをQtのソースコードがあるディレクトリにインストールする。
cd ./qt-raspberrypi-configuration make install DESTDIR=<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-5.x.x
Qtライブラリのビルド
ここでは、Qtソフトウェアは~/Program/Qt_Embedded/QtSoftwareディレクトリ、qmake等のホストツールは~/Program/Qt_Embedded/Hostディレクトリ、
Qtライブラリは~/Program/Qt_Embedded/Target_EGLディレクトリまたは~/Program/Qt_Embedded/Target_XCBディレクトリとしている。
<Raspberry Piのバージョン>は、Raspberry Piの種類に変更する。
ただし、上記のセクションでmkspecを変更した場合は、そのディレクトリ名に合わせること。
- <Raspberry Piのバージョン>
- Raspberry Pi 1
linux-rasp-pi-g++
- Raspberry Pi 2
linux-rasp-pi2-g++
- Reaspberry Pi 3
linux-rasp-pi3-g++
(EGL)linux-rasp-pi3-vc4-g++
(XCB)- 上記のセクションで作成した
linux-rasp-pi3-brcm-g++
(EGL) - その他
- Raspberry Pi 4
linux-rasp-pi4-v3d-g++
- Raspberry Pi 1
Raspbian OS 64bitを使用している場合は、-device-option
オプションを以下のように記述する。
-device-option CROSS_COMPILE=/<GCC ARMツールチェインのインストールディレクトリ>/bin/aarch64-linux-gnueabihf-
また、Qt 5.8以降は、-no-use-gold-linker
オプションを追加する必要がある。
- QtBase / Qt Everywhere Opensource / GithubからダウンロードしたQt
- ビルドディレクトリの作成
mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build
- GCC ARM 8.3.0以降を使用する場合は、以下の設定をターミナルで実行する。
CROSS_PI_PATH=/<GCC ARMツールチェインのインストールディレクトリ>
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/"
- Configureスクリプトの実行
- # Raspberry Pi 3B
PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \
PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \
../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \
-opengl es2 -eglfs \
EGLを使用する場合-opengl es2 \
XCBを使用する場合-device <Raspberry Piのバージョン> \
-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \
-opensource -confirm-license -v \
-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \
-ltcg -iconv \
# 必要な場合は指定する-qpa eglfs \
EGLを使用する場合-qpa xcb \
XCBを使用する場合-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \
-sysroot /<SysRootがあるディレクトリ>/sysroot \
-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \
-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \
-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host
-no-gcc-sysroot
GCC ARM 8.3.0以降を使用する場合- # Raspberry Pi 4B
PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \
PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \
../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \
-opengl es2 -eglfs \
EGLを使用する場合-opengl es2 \
XCBを使用する場合-device <Raspberry Piのバージョン> \
-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \
-opensource -confirm-license -v \
-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \
-ltcg -iconv -fontconfig -ccache \
# 必要な場合は指定する-qpa eglfs \
EGLを使用する場合-qpa xcb \
XCBを使用する場合-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \
-sysroot /<SysRootがあるディレクトリ>/sysroot \
-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \
-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \
-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host
-no-gcc-sysroot
GCC ARM 8.3.0以降を使用する場合-I/<SysRootがあるディレクトリ>/sysroot/usr/include/arm-linux-gnueabihf \
# GCC ARM 8.3.0以降を使用する場合に必要(不要の可能性があるため要調査)-L/<SysRootがあるディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf \
# GCC ARM 8.3.0以降を使用する場合に必要(不要の可能性があるため要調査)- ビルドおよびインストール
gmake -j $(nproc)
gmake install
- もし、Linux PCで使用するQtライブラリを配置するディレクトリにrccファイルが存在しない場合は、rccファイルをQtライブラリのbinディレクトリにコピーする。
- (Qtライブラリを使用するソフトウェアをビルドする時、rccファイルが必要である)
cp /<Qtのソースコードがあるディレクトリ>/qtbase/bin/rcc /<Linux PCで使用するQtライブラリを配置するディレクトリ>/bin
必要ならば、以下のようなシェルスクリプトを作成すると便利である。
#!/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以降を使用する場合
Qtライブラリのインストール
ビルドしたQtライブラリを、Raspberry Piにデプロイする。
~/Program/Qt_Embedded/Qt5ディレクトリに存在する全てのファイルを、Raspberry Piの/usr/localディレクトリに同期させる。
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" \ ~/Program/Qt_Embedded/Target <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x
※注意
Raspberry PiにアップロードしたQtライブラリの所有者がrootになっている場合があるため、
以下のコマンドを実行して、所有者をローカルユーザに変更する必要がある。
sudo chown -R <Raspberry Piのユーザ名>:<Raspberry Piのグループ名> ~/InstallSoftware/Qt_5_x_x
Raspberry PiのリンカがQtライブラリを読み込むようにするため、以下のコマンドを実行する。
/etc/ld.so.conf.dディレクトリに配置する場合、Raspberry Pi 2B / 3Bでは、ファイル名の先頭に"00"を付加すること。
# .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
これにより、Raspberry PiでQtライブラリが使用できる。
Qtソフトウェアの動作確認
Qtソフトウェアをビルドして、動作確認を行う。
XCBを使用する場合
Raspberry PiのEGL / GLESライブラリを修正する。
Raspberry Piの/usr/lib/arm-linux-gnueabihfディレクトリには、MesaのlibEGLとlibGLESv2が存在する。
XCBを使用したQtソフトウェアは、/opt/vc/libディレクトリにあるlibbrcmEGLとlibbrcmGLESv2ではなく、libEGLとlibGLESv2が自動的に選択される。
しかし、MesaのlibEGLとlibGLESv2は、OpenGLの描画処理と関わりがあるEGLでは、ほとんど役に立たない。(XCBは、OpenGLの描画処理とほぼ関係無い)
そのため、libbrcmEGLとlibbrcmGLESv2を、libEGLとlibGLESv2に入れ替える。
具体的には、libbrcmEGLとlibbrcmGLESv2のシンボリックリンクを/usr/lib/arm-linux-gnueabihfディレクトリに作成する。
(必ず、元のファイルはバックアップすること)
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
上記で設定したライブラリを読み込むため、以下のコマンドを実行する。
sudo ldconfig
上記のシンボリックリンクの設定を元に戻す場合は、以下のように実行する。
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
次に、Qt Creatorでソフトウェアを開発する時の環境設定を行う。
Qt Creatorを起動して、Qt Creatorメイン画面左の[プロジェクト] - 左ペインの[Run] - 右ペインの[ビルド設定] - [Environment]項目 - [詳細]プルダウンを開く。
[詳細]プルダウンから[追加]ボタンを押下して、以下の項目を設定する。
- 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
さらに、Raspberry Piの~/.profileファイルまたは~/.bashrcファイルに、以下の設定を追記する。
export QT_QPA_PLATFOMRTHEME=qt5ct export DISPLAY=:0 または export DISPLAY=:0.0 export XAUTHORITY=/home/<Raspberry Piのユーザ名>/.Xauthrity export XDG_SESSION_TYPE=x11
EGL / XCB 共通
Qtソフトウェアのサンプルをダウンロードする。
この時、<Qtソフトウェアのサンプル>と<Qtのバージョン>は合致するものを指定すること。
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ソフトウェアを配置するディレクトリ>
最後に、QtソフトウェアをRaspberry Piにデプロイする。
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" /<Qtソフトウェアを配置するディレクトリ> \ <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/<Qtソフトウェアをインストールするディレクトリ>
エラー関連
libEGL warning: DRI2: failed to authenticate
以下のコマンドを実行する。
sudo raspi-config
次に、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択する。(KMSが有効になる)
最後に、[Finish]を選択して終了する。
(このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする)
warning : GLX/DRI2 is not supported/failed to authenticate
Qtプロジェクトをリモートデバッグする時、この警告が出力される場合がある。
この警告は、他のソフトウェアが独自のmesaライブラリ(libEGLとlibGLESv2)を追加しているために表示される。
まず、libEGLとlibGLESv2のパスを確認するため、以下のコマンドを実行する。
(おそらく、/opt/vc/lib/libEGL.soと/opt/vc/lib/libGLESv2.soが表示される)
sudo find / -iname "*egl*" sudo find / -iname "*gles*"
上記で表示されたファイルのシンボリックファイルを、以下のディレクトリに作成する。
# 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
※注意
Debian等では、/usr/lib/x86_64-linux-gnu/mesa-eglディレクトリに存在する場合があるため、それに応じてコマンドを変更する必要がある。
最後に、ライブラリファイルを読み込むため、以下のコマンドを実行する。
sudo ldconfig
上記のシンボリックリンクの設定を元に戻す場合は、以下のように実行する。
# 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
Note: Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing.
Qtのソースコードにおいて、Configureスクリプトを実行する時、この注意が表示される場合がある。
この時、Raspberry Piに対して、以下のライブラリをインストールする。
sudo apt-get install at-spi2-core gir1.2-atspi-2.0 libatspi2.0-dev
QtWebEngineのビルドおよびインストール
上記のセクションでは、QtWebEngineモジュールを無効にしている。
これは、QtWebEngineのビルドには多くの時間とディスクスペースが必要なためである。
勿論、QtWebEngineとQtを同時にビルドすることも可能であるが、ビルドに失敗する場合はビルド全体が失敗したことになるため、
まず、ベースとなるQt 5を個別にビルドした後、QtWebEngineを個別にビルドすることを推奨する。
依存関係のライブラリのインストール
ライブラリ名 | 備考 | |
---|---|---|
必須 | flex bison gperf libre2-dev libnss3-dev | |
X11対応に必要 | libdrm-dev libxdamage-dev | XCB / X11を使用する場合、 これらのライブラリが必要である。 |
オプション | libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev libevent-dev libprotobuf-dev protobuf-compiler libwebp-dev libpoppler-cpp-dev |
追加サポートとして便利である。 |
(オプション) システム構築ツール |
ninja-build re2c | ninjaビルドツールを使用することで、 ビルドを高速化できることがある。 |
使用できないライブラリ | libopus-dev libvpx-dev | OpusとVPXメディアのサポートが追加されるが、 Raspbian busterで利用するには古すぎる。 |
QtWebEngineのダウンロード
Qtの公式Webサイトから、QtWebEngineをダウンロードする。
https://download.qt.io/official_releases/qt/x.x/x.x.x/submodules/qtwebengine-everywhere-src-x.x.x.tar.xz
QtWebEngineのビルド設定
ダウンロードしたQtWebEngineのビルド設定を編集する。
QtWebEngineでのジャンボビルドを無効化する。
標準のジャンボビルドシステムでは、コンパイル時に不明のエラーが出力されるため、無効にする。
sed -i -e 's|use_jumbo_build=true|use_jumbo_build=false|' /<QtWebEngineのソースコードがあるディレクトリ>/src/buildtools/config/common.pri
QtWebEngineのビルドとインストール
次に、QtWebEngineのConfigureスクリプトを実行する。
/opt/Qt/5.15.2/bin/qmake /<QtWebEngineのソースコードがあるディレクトリ> -- -no-webengine-geolocation
正常に終了する時、以下のようなサマリが表示される。
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
最後に、QtWebEngineをビルドする。
もし、ビルドするPCのメモリが8[GB]以下の場合、NINJAJOBSを4以下にして、Ninjaの並列ビルドの量を制限する必要がある。
make -j $(nproc) または make -j 4 NINJAJOBS=-j4 make install
QtWebEngineのビルド時に発生する問題
下表は、QtWebEngineで見つかった問題とビルドの問題を集めたものである。
QtWebEngineのバージョン | 問題 | 解決策 |
---|---|---|
5.15.2 | Internal Compiler Error, gcc 8.30 internal compiler error: in convert_move, at expr.c:218 static void exec_ops(const Op* ops, const void** args, |
GCC Bugzilla bug report Build for ARMv7 Patch the source to disable optimization |
5.15.2 | fatal error: xcb/dri3.h: No such file or directory | 以下のライブラリをインストールする。sudo apt-get install libxcb-dri3-dev
|
5.15.2 | Broadcom EGLを使用するQtのビルドに失敗する。 qtwebengine-everywhere-src-x.x.x/src/3rdparty/chromium/ui/gl/gl_bindings_autogen_egl.h:201:5: error: ‘EGLDeviceEXT’ has not been declared |
Broadcom EGLの代わりに、 VC4 / KMSを使用してビルドする。 |
PinePhone
概要
Allwinner A64 SoC(sun50iw1)は、Cortex-A53 ARM CPU(クアッドコア)とARM社のMali400 MP2 GPUを搭載している。
A64は、基本的にAllwinner H3のCortex-A7コアをCortex-A53コアに置き換えたものである。
メモリマップ、クロック、割り込みのほとんどを共有しており、IPブロックも同じものを使用している。
H3とA64の違いは以下の通りである。
H3は、USBホストコントローラを3つ搭載しているのに対して、A64は1つしか搭載していない。
どちらのSoCもUSB-OTGコントローラを追加しているが、これは通常のホストコントローラとしても使用することを想定している。
H3のDRAMコントローラは最大2[GB]のRAMをサポートしており、A64は最大3[GB]をサポートしている。
64bitチップでありながら、物理的には完全に3bitのSoCとなっている。
H3は5個のUARTをサポートしており、A64は6個のUARTをサポートしている。
MMCコントローラーが更新され、より高速な転送モードをサポートしている。
MMCのクロックは途中で変更され、現在はMMCコントローラ自身が出力とサンプルフェーズをサポートしている。
H3はSRAM A1がアドレス0にマッピングされており、BROMは0xffff0000にある。
A64はBROMがアドレス0にマッピングされており、SRAM A1はそのすぐ後ろの0x10000(64KB)にマッピングされている。
pinmuxの構成はまだ多少似ているが、互換性のない程度に異なる。
顕著な例は(デバッグ用の)UART0で、H3ではPortAにあるが、A64ではPortBにある。
H3にはPortBが無い。
Linux PCの設定
Linux PCにおいて、以下の依存関係のライブラリをインストールする。
(Texinfoは、GNU公式Webサイトにアクセスして、ソースコードからインストールすることを推奨する)
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
Linero社が提供しているGCC ARMツールチェーンをダウンロードする。
- GCC 7.5 : https://releases.linaro.org/components/toolchain/binaries/
- GCC 10.2 : https://snapshots.linaro.org/components/toolchain/binaries/10.2-2021.01-3/aarch64-linux-gnu/
Linaroは、アップストリームビルドのスナップショットをユーザに提供するGNUツールチェーン・インテグレーションビルドを毎月提供している。
これらのビルドにより、開発者はビルド済みバイナリの機能をアップストリームですぐにテストすることができる。
- GCCツールチェーン群 : https://snapshots.linaro.org/gnu-toolchain/
tar xf gcc-linaro-<バージョン>-x86_64_aarch64-linux-gnu.tar.xz
Wayland-Scannerのインストール(重要)
Wayland-Scannerをインストールするには、MesonとNinjaをビルドする必要がある。
まず、Wayland Scannerのビルドに必要なライブラリをインストールする。
sudo zypper install libxml2-devel
次に、Wayland Scannerのソースコードをダウンロードする。
git clone https://gitlab.freedesktop.org/wayland/wayland cd wayland && mkdir build
Wayland Scannerをビルドする。
Wayland Scannerのインストールディレクトリは、PinePhoneのホスト向けターゲットディレクトリを指定すること。
meson ./build/ --prefix=<Wayland-Scannerのインストールディレクトリ> -Ddocumentation=false ninja -C build/ install
PinePhoneの設定
Qtのクロスコンパイルの手順において、SSH接続ができることが必須のため、SSH Serverをインストールおよび設定する。
# Mobian sudo apt-get install openssh-server # Manjaro sudo pacman -S openssh
必要に応じて、公開鍵認証を行う場合は、設定 - SSHの公開鍵認証を参照すること。
SSH Serverの自動起動設定および開始する。
sudo systemctl enable ssh sudo systemctl restart ssh
MobianまたはManjaroをアップデートする。
# Mobian sudo apt-get update sudo apt-get dist-upgrade sudo systemctl reboot # Manajro sudo pacman -Syyu sudo systemctl reboot
Qtライブラリをクロスコンパイルするために必要なライブラリをインストールする。
Qtライブラリのビルド設定によっては、不要なパッケージも含まれている。
# Mobian sudo apt-get install unzip ccache pkgconf-bin pkg-config libpkgconf3 pkgconf build-essential make autoconf cmake extra-cmake-modules gcc gfortran gdb gdbserver python3 libgtk-3-dev \ libc6 libc6-dev linux-libc-dev glibc-source libc-dev-bin libc-devtools libglib2.0-0 libglib2.0-dev libglib2.0-dev-bin \ libgmp-dev libmpc-dev libmpfr-dev libisl-dev gconf2 gconf2-common libgconf2-dev \ libdbus-1-3 libdbus-1-dev libdbus-c++-bin libdbus-c++-dev libsctp1 libsctp-dev libatspi2.0-0 libatspi2.0-dev libzstd1 libzstd-dev \ libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev libicu-dev icu-devtools \ libblkid1 libblkid-dev libffi8 libffi-dev libmount1 libmount-dev libudev1 libudev-dev libhd21 libhd-dev libtsm-dev \ pcre2-utils libpcre2-32-0 libpcre2-dev libselinux1 libselinux1-dev libsepol2 libsepol-dev libwacom9 libwacom-dev libassimp5 libassimp-dev \ libproxy-dev liblttng-ust1 liblttng-ust-common1 liblttng-ust-dev libb2-1 libb2-dev libsdl2-dev \ libfontconfig1 libfontconfig-dev libfontconfig1-dev libjpeg-dev libjpeg62-turbo libjpeg62-turbo-dev libjpeg-dev libasound2 libasound2-dev \ sqlite3 libsqlite3-0 libsqlite3-dev libssl3 libssl-dev libnss3 libnss3-dev libxslt1.1 libxslt1-dev libpugixml1v5 libpugixml-dev \ libxkbcommon-dev libxcb-xinerama0 libxcb-xinerama0-dev libglut3.12 libglut-dev \ libwayland-bin libwayland-dev libwayland-egl1 libwayland-egl++1 libwayland-egl1-mesa libwayland-egl-backend-dev \ libwayland-client++1 libwayland-client-extra++1 libwayland-cursor++1 wayland-scanner++ wayland-protocols waylandpp-dev \ libosmesa6-dev mesa-common-dev libopengl-dev libgl-dev libglm-dev libgl1-mesa-dev libgle3-dev libgles-dev libgles2-mesa-dev libegl-dev libegl1-mesa-dev \ libgegl-dev libglu1-mesa libglu1-mesa-dev libglw1-mesa-dev libglfw3-dev libglew-dev libglx-dev libgbm-dev libdrm-dev libdirectfb-dev \ libglvnd-dev libglvnd-core-dev libglut-dev libopenal-dev libalut-dev \ libweston-10-0 libweston-10-dev # 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
MobianおよびManjaroにおいて、マルチメディア関連やBluetooth等を使用する場合、下表に示す任意のパッケージをインストールする。
機能 | インストールするライブラリ | configureスクリプトのオプション |
---|---|---|
Bluetooth | bluez bluez-tools libbluetooth-dev | |
画像 | libjpeg-dev libpng-dev libtiff-dev libmng-dev libwebp-dev | |
コーデック | libavcodec-dev libavformat-dev libavutil-dev libavdevice-dev libavfilter-dev libswscale-dev libswresample-dev libpostproc-dev libv4l-dev libxvidcore-dev libx264-dev libx265-dev |
|
マルチメディア | libwmf-dev libgstreamer1.0-0 libgstreamer1.0-dev libgstreamermm-1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad libgstreamer-plugins-bad1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 libwayland-dev(Wayland開発パッケージは、gstreamerヘッダで必要) |
|
ALSAオーディオ | libasound2-dev | |
Pulseオーディオ | pulseaudio libpulse-dev | |
OpenALオーディオ | libopenal-data libopenal1 libopenal-dev libsndio7.0 libsndio-dev | |
Text to Speech | flite1-dev libspeechd-dev | |
シリアルポート | libserialport-dev | |
センサ | libsensors-dev libsensors4-dev ※要調査 | |
GPS | libgps-dev ※要調査 | |
データベース | unixodbc unixodbc-common unixodbc-dev (ODBC) libsqlite3-dev (SQLite) libpq-dev(PostgreSQL) libmariadbclient-dev(MariaDB / MySQL) | |
プリンタ | libcups2-dev | |
Wayland | libwayland-dev | |
X11 | libfontconfig-dev libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libsm-dev libice-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev libxfixes-dev libxrender-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-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libxcb-damage0-dev libxcb-composite0-dev libxcb-record0-dev libxcb-present-dev libxcb-res0-dev libxcb-render0-dev libxcb-xinput-dev libxcb-xv0-dev libxcb-xtest0-dev libxcb-cursor-dev libxcb-util-dev libxcb-ewmh-dev libxcb-xvmc0-dev libxcb-imdkit-dev libxcb-xrm-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-dpms0-dev libxcb-xf86dri0-dev |
|
WebEngine | 必須 : flex bison gperf libre2-dev libnss3-dev libdrm-dev オプション1 : libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev libevent-dev libprotobuf-dev protobuf-compiler オプション2(不安定なため注意すること) : libopus-dev libvpx-dev |
|
アクセシビリティ | libatspi2.0-dev | |
SCTP | libsctp1 libsctp-dev | -sctp |
機能 | インストールするライブラリ | 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 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オーディオ | alsa-lib | |
Pulseオーディオ | pulseaudio-alsa | |
OpenAL | openal | |
Text to Speech | flite | |
シリアルポート | libserialport | |
センサ | sensorfw | |
データベース | postgresql-libs libpqxx (PostgreSQL) mariadb-clients mariadb-libs (MariaDB) unixodbc (ODBC) |
|
プリンタ | libcups | |
Wayland (X11) | xorg-xwayland | |
X11 | ||
WebEngine | 必須 : flex bison gperf readline nss libdrm オプション1 : libxml2 libxml++ libxslt minizip jsoncpp lcms2 libevent protobuf protobuf-c オプション2(不安定なため注意すること) : opus libvpx |
|
アクセシビリティ | at-spi2-core at-spi2-atk | |
SCTP | lksctp-tools | -sctp |
- 上表のライブラリを全てインストールする場合
- Mobianの場合
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 \
libx264-dev libx265-dev \
libgstreamer1.0-dev libgstreamermm-1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev libopenal-dev libsndio-dev libwayland-dev \
unixodbc-dev libsqlite3-dev libcups2-dev \
libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-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-xinerama0-dev libxcb-xkb-dev \
libxkbcommon-dev libxkbcommon-x11-dev \
flex bison gperf libre2-dev libnss3-dev libdrm-dev \
libxml2-dev libxslt1-dev libminizip-dev libjsoncpp-dev liblcms2-dev libevent-dev libprotobuf-dev protobuf-compiler libopus-dev libvpx-dev \
libatspi2.0-dev libsctp1 libsctp-dev
- Manjaro ARMの場合
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 \
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 \
pulseaudio-alsa openal flite libserialport sensorfw unixodbc sqlite libcups xorg-xwayland flex bison gperf readline nss libdrm libxml2 libxml++ libxslt minizip jsoncpp \
lcms2 libevent protobuf protobuf-c opus libvpx at-spi2-core at-spi2-atk lksctp-tools
次のセクションにおいて、rsyncコマンドを使用してLinux PCとPinePhoneのファイルを同期する。
しかし、同期するファイルには、スーパユーザ権限が必要なものがある。
そのため、一般ユーザでも全てのファイルを同期できるように、/etc/sudoersファイルに以下の設定を追記する。
以下の設定により、rsyncコマンドは、必要に応じてスーパユーザ権限で実行される。
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
システムルートディレクトリの設定
Linux PCで、PinePhone向けのQtソフトウェアをクロスコンパイルできるように開発環境を設定する。
PinePhone上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。
Linux PC上に開発用ディレクトリを作成する。
また、PinePhoneのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。
mkdir -p ~/Program/Qt_Embedded/sysroot \ ~/Program/Qt_Embedded/sysroot/usr \ ~/Program/Qt_Embedded/sysroot/usr/share
rsync
コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。
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
ダウンロードしたシステムルートディレクトリにあるファイルおよびディレクトリのシンボリックリンクを相対的に調整する。
fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。
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
Qtのソースコードのダウンロード
- Qt Everywhere (推奨)
- Qtの公式Webサイトにアクセスして、Qt 5.15のソースコードをダウンロードする。
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として保持されている。
- 利用可能な全てのモジュールについてはこちらのWebサイト、ツールについては
init-repository --help
コマンドまたはこちらのWebサイトを参照すること。 ./init-repository --module-subset=essential,qtsvg,qtvirtualkeyboard,qtquickcontrols
./init-repository -f --module-subset=qtquick3d,qtquicktimeline,qtwayland
# 必要な場合は個別に追加ダウンロードする
- GithubからQtのソースコードを個別にダウンロードする。
Qtの設定
Qtのソースコードがあるディレクトリにおいて、qtbase/mkspecs/devices/linux-pinephone-g++ディレクトリを作成する。
mkdir <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++
次に、<Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qplatformdefs.hファイルを以下の内容で作成する。
vi <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qplatformdefs.h
// qplatformdefs.hファイル
#include "../../linux-g++/qplatformdefs.h"
さらに、<Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qmake.confファイルを以下の内容で作成する。
vi <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++/qmake.conf
# 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)
Qtのビルド
GCC 11以降を使用する場合
GCC 11以降のツールチェーンを使用する場合、Qt 5.15のビルド時において、以下に示すエラーが発生する。
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();
これは、std::limitsが削除されて、limits.hファイルに移行されたからである。
もし、GCC 11以降を使用してQt 5.15をビルドする場合は、qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.hファイルを、以下に示すように編集する。
vi qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.h
// 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
GCC 13を使用する場合の注意点
GCC 13を使用する場合、QtLocationのビルドにおいて、以下に示すようなビルドエラーが出力される場合がある。
error: 'uint8_t' was not declared in this scope
これは、GCC 13では、いくつかの内部インクルードをシャッフルしているため、<cstdint>
は過渡的にインクルードされない。
uint8_t
には<cstdint>
を明示的にインクルードする必要がある。
// qt-everywhere-src-5.15.XX/qtlocation/src/3rdparty/mapbox-gl-native/include/mbgl/util/string.hppファイル
// 7行目
#include <cstdint> // 追加
// qt-everywhere-src-5.15.XX/qtlocation/src/3rdparty/mapbox-gl-native/include/mbgl/util/geometry.hppファイル
// 6行目
#include <cstdint> // 追加
// qt-everywhere-src-5.15.XX/qtlocation/src/3rdparty/mapbox-gl-native/src/mbgl/gl/stencil_mode.hppファイル
// 4行目
#include <cstdint> // 追加
Qtのビルド
Qtをビルドするため、ビルド用のディレクトリを作成する。
mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build
Configureスクリプトを実行する。
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
Qtをビルドおよびインストールする。
gmake -j $(nproc) gmake install
Qt Waylandのビルド
まず、Qt Waylandのソースコードのディレクトリ(/<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner)に対して、
wayland-text-input-unstable-v2-client-protocolファイル、wayland-text-input-unstable-v2-server-protocol.hファイル、wayland-wayland-client-protocol.hファイルを作成する。
なお、wayland-text-input-unstable-v2-client-protocolファイルとwayland-text-input-unstable-v2-server-protocol.hファイルは、空のファイルである。
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
vi /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-wayland-client-protocol.h
// wayland-wayland-client-protocol.hファイル
#include "../../../../../src/client/wayland-wayland-client-protocol.h"
次に、Wayland Scannerをインストールする。
なお、Wayland Scannerのビルドには、Meson(Pythonライブラリ)とNinjaが必要である。
- Wayland Scannerのビルドに必要なライブラリをインストールする。
sudo zypper install meson ninja expat-devel libxml2-devel
- Wayland Scannerのソースコードをダウンロードする。
git clone https://github.com/wayland-project/wayland.git
cd wayland && mkdir build
- Wayland Scannerのビルドおよびインストールする。
meson ./build --prefix=<上記でインストールしたQtツールのインストールディレクトリ> -Ddocumentation=false
ninja -C ./build install
最後に、Qt Waylandをビルドおよびインストールする。
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
Qt SVGのビルド
もし、Qt SVGをビルドおよびインストールしていない場合は、手動で行う。
なお、Qt SVGをインストールするには、上記でインストールしたQtツール(Linux PC向け)のディレクトリにあるqmakeファイルを使用する必要がある。
まず、Qt SVGのソースコードが存在するディレクトリに移動して、ビルド用ディレクトリを作成する。
cd /<Qtのソースコードがあるディレクトリ>/qtsvg mkdir build && cd build
Qt SVGをビルドおよびインストールする。
なお、Qt SVGのインストールディレクトリは、自動的にQtライブラリ(ターゲット向け)のディレクトリにインストールされる。
そのため、DESTDIR
オプション等は付加しない。(付加しても無視される)
/<上記でインストールしたLinux PC向けのQtツールのディレクトリ>/Host/bin/qmake ../qtsvg.pro make -j $(nproc) make install
Qt Virtual Keyboardのビルド
もし、Qt Virtual Keyboardをビルドおよびインストールしていない場合は、手動で行う。
この時、Qt Virtual Keyboardがインストールされているディレクトリを環境変数LD_LIBRARY_PATH
に追加する必要がある。
なお、Qt Virtual Keyboardをインストールするには、上記でインストールしたQtツール(Linux PC向け)のディレクトリにあるqmakeファイルを使用する必要がある。
まず、Qt Virtual Keyboardのソースコードが存在するディレクトリに移動して、ビルド用ディレクトリを作成する。
cd /<Qtのソースコードがあるディレクトリ>/qtvirtualkeyboard mkdir build && cd build
Qt Virtual Keyboardをビルドおよびインストールする。
なお、Qt Virtual Keyboardのインストールディレクトリは、自動的にQtライブラリ(ターゲット向け)のディレクトリにインストールされる。
そのため、DESTDIR
オプション等は付加しない。(付加しても無視される)
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
Qtライブラリのインストール
ビルドしたQtライブラリを、PinePhoneにデプロイする。
まず、~/Program/Qt_Embedded/Qt5ディレクトリに存在する全てのファイルを、PinePhoneの任意のディレクトリ(例. ~/InstallSoftware/Qt_5_x_xディレクトリ)に同期させる。
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" \ ~/Program/Qt_Embedded/Target <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/home/<PinePhoneのユーザ名>/InstallSoftware/Qt_5_x_x
※注意
PinePhoneにアップロードしたQtライブラリの所有者がrootになっている場合があるため、
以下のコマンドを実行して、所有者をローカルユーザに変更する必要がある。
sudo chown -R <ユーザ名>:<グループ名> ~/InstallSoftware/Qt_5_x_x
PinePhoneのリンカがQtライブラリを読み込むようにするため、以下のコマンドを実行する。
/etc/ld.so.conf.dディレクトリに配置する場合、ファイル名の先頭に"00
"を付加すること。
※注意
~/.profileファイルに環境変数LD_LIBRARY_PATH
を設定する場合、再度、Qt Creatorで環境変数LD_LIBRARY_PATH
を設定する必要がある。
Qt Creatorでの設定は、Qt Creatorメイン画面左にある[プロジェクト] - [RUN] - [Environment]で設定する。
# .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
ライブラリを読み込む。
# .profileファイルに設定した場合 source ~/.profile # /etc/ld.so.conf.d/00-Qt_5_x_x.confファイルに設定した場合 sudo ldconfig
Qtライブラリの設定
さらに、PinePhoneの~/.profileファイルまたは~/.bashrcファイルに、以下の設定を追記する。
# 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
Qt Creatorの設定
次に、Qt Creatorでソフトウェアを開発する時の環境設定を行う。
まず、プロジェクトの環境変数の設定を行う。
Qt Creatorを起動して、Qt Creatorメイン画面左の[プロジェクト] - 左ペインの[Run] - 右ペインの[ビルド設定] - [Environment]項目 - [詳細]プルダウンを開く。
[詳細]プルダウンから[追加]ボタンを押下して、以下の項目を設定する。
Qtプロジェクトをデバッグする場合は、必ず[デバイス環境の取得]ボタンを押下すること。
- 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
Variable - XAUTHORITY(不要)Value - /home/<PinePhoneのユーザ名>/.Xauthrity
Variable - XDG_SESSION_TYPE(不要)Value - wayland
また、上記の設定を簡潔に行う場合、Qtプロジェクトのディレクトリにある.pro.userファイルにおいて、
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">〜</valuemap>
要素内に、以下の設定を追記する。
以下の設定を追記する場合、必ず、Qtプロジェクトを閉じた状態で行うこと。
# .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>
もし、デバッグにおいて、以下のようなエラーが出力される場合は、
Qt Creatorのサイドメニューから、[プロジェクト] - [Build & Run] - [Run] - [コマンドライン引数:]項目に、-platform wayland
を記述する。
# エラー内容 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"
次に、GDBデバッガの設定を行う。
リモートターゲットをデバッグする時、GDBは、Linux PC側にダウンロードしているPinePhoneのシステムルートディレクトリを検索する。
そのため、GDBにターゲット側のPinePhoneのシステムルートディレクトリを検索するように設定する必要がある。
これは、Qt Creatorメイン画面から、[ツール]メニューバー - [オプション] - [デバッガ] - [GDB]タブ - [追加の起動コマンド]に、以下の内容を設定する。
ただし、この設定はQt Quickを使用する時のみである。(Qt Widgetを使用する場合は設定不要)
set sysroot target:/
しかし、上記の[追加の起動コマンド]において、set sysroot target:/
オプションを使用する場合、デバッグの開始に時間が掛かる。
そのため、以下のように、[追加の起動コマンド]を記述して、
システムルートディレクトリに対して、Qtライブラリのインストールディレクトリのシンボリックリンクを作成することを推奨する。
システムルートディレクトリに対して、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
Qt Creatorメイン画面から、[ツール]メニューバー - [オプション] - [デバッガ] - [GDB]タブ - [追加の起動コマンド]に、以下の内容を設定する。
# Kit名に"PinePhone"という文字列が入っている場合のみ、PinePhoneのシステムルートディレクトリを参照する # x86 / x64のKitを使用する場合は、PinePhoneのシステムルートディレクトリを参照しない [ -n $(grep -i PinePhone %{ActiveProject:Kit:Name}) ] && set sysroot /<PinePhoneのシステムルートディレクトリ> # または set sysroot /<PinePhoneのシステムルートディレクトリ>
もし、デバッグ時において、以下の警告が出力される場合は、GDBのみをGCC AArch64 ToolChain 10.2に変更する。
# 警告の内容 while parsing target description (at line 68): Vector "v8f" references undefined type "ieee_half" Could not load XML target description; ignoring
GCC AArch64 ToolChain 10.2は、以下に示すURLからダウンロードできる。
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
これにより、PinePhoneでQtライブラリが使用できる。
PinePhone向けソフトウェアの設計
PinePhone向けソフトウェアのUIをデザインする場合、375x812[px]のウィンドウサイズで動作するように指定する。
これは、PhoshシェルでPinephoneに表示されるソフトウェアのサイズである。(2倍の拡大率で700x1200[px]の解像度まで)
また、画面を横向きする場合は、812x375[px]に反転させる。