インストール - 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でクロスコンパイルを行う場合、インストール - Qt5 Raspberry Piのページを参照すること。
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]に反転させる。