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

ナビゲーションに移動 検索に移動
編集の要約なし
タグ: 差し戻し済み
編集の要約なし
タグ: 取り消し
1,324行目: 1,324行目:
                     gawk bison openssl flex figlet pigz ncurses-devel ncurses5-devel texinfo
                     gawk bison openssl flex figlet pigz ncurses-devel ncurses5-devel texinfo
<br>
<br>
GCC ARMツールチェーンにおいて、GCC 8以降が必要なため、Linaro社のGCC ARMツールチェーンは使用できない。<br>
Linero社が提供しているGCC ARMツールチェーンをダウンロードする。<br>
そのため、開発者がGCC ARMツールチェーンを作成する必要がある。<br>
https://releases.linaro.org/components/toolchain/binaries/<br>
詳細は、[[インストール - GCC#クロスコンパイラ向けGCCツールチェーンのインストール]]を参照すること。<br>
<br>
<br>
Qt 6を使用してクロスコンパイルする場合、x86 64向けのQtライブラリも必要となる。<br>
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
そのため、Qtオンラインインストーラからx86 64向けのQtライブラリをインストールする。<br>
tar xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
<br>
<br>
<u>(Qt 6のソースコードからx86 64向けのQt 6ライブラリをビルドおよびインストールしてもよいが、煩雑なため推奨しない)</u><br>
<br>
wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run
<br>
ダウンロードしたファイルに実行権限を付加する。<br>
chmod +x qt-unified-linux-x64-online.run
<br>
次に、GCCおよびmake等の開発に付随するライブラリをインストールする。<br>
# CentOS
sudo yum groupinstall "Development tools"
# SUSE
sudo zypper install --type pattern devel_basis
<br>
Qtオンラインインストーラを実行する。<br>
./qt-unified-linux-x64-online.run
<br>
Qtのインストール画面に従って、Qt 6をインストールする。<br>
<br>
==== '''Wayland-Scannerのインストール(重要)''' ====
==== '''Wayland-Scannerのインストール(重要)''' ====
Wayland-Scannerをインストールするには、MesonとNinjaをビルドする必要がある。<br>
Wayland-Scannerをインストールするには、MesonとNinjaをビルドする必要がある。<br>
<br>
Wayland Scannerのビルドに必要なライブラリをインストールする。<br>
sudo zypper install meson ninja expat-devel libxml2-devel
<br>
<br>
まず、Wayland Scannerをダウンロードする。<br>
まず、Wayland Scannerをダウンロードする。<br>
1,363行目: 1,339行目:
次に、Wayland Scannerをビルドする。<br>
次に、Wayland Scannerをビルドする。<br>
<u>Wayland Scannerのインストールディレクトリは、PinePhoneのホスト向けターゲットディレクトリを指定すること。</u><br>
<u>Wayland Scannerのインストールディレクトリは、PinePhoneのホスト向けターゲットディレクトリを指定すること。</u><br>
  meson ./build --prefix=<Wayland-Scannerのインストールディレクトリ> -Ddocumentation=false   
  meson ./build/ --prefix=<Wayland-Scannerのインストールディレクトリ> -Ddocumentation=false   
  ninja -C ./build install
  ninja -C build/ install
<br>
<br>


1,491行目: 1,467行目:
  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/share/pkgconfig ~/Program/Qt_Embedded/sysroot/usr/share
  rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <PinePhoneのユーザ名>@<PinePhoneのホスト名またはIPアドレス>:/usr/share/pkgconfig ~/Program/Qt_Embedded/sysroot/usr/share
<br>
<br>
 
ダウンロードしたシステムルートディレクトリにあるファイルおよびディレクトリのシンボリックリンクを相対的に調整する。<br>
fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。<br>
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py ~/Program/Qt_Embedded/sysroot
<br>
==== Qtのソースコードのダウンロード ====
==== Qtのソースコードのダウンロード ====
* Qt Everywhere (こちらを推奨する)<br>
* Qt Everywhere (こちらを推奨する)<br>
*: <code>wget https://download.qt.io/official_releases/qt/6.x/6.x.x/single/qt-everywhere-src-6.x.x.tar.xz</code>
*: <code>wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz</code>
*: <code>tar xf qt-everywhere-opensource-src-6.x.x.tar.gz</code>
*: <code>tar xf qt-everywhere-opensource-src-x.x.x.tar.gz</code>
*: <br>
*: <br>
* Githubの使用
* Githubの使用
*: GithubからQt 6のソースコードを個別にダウンロードする。<br>
*: GithubからQtのソースコードを個別にダウンロードする。<br>
*: <code>git clone https://github.com/qt/qt5.git qt6</code>
*: <code>git clone https://github.com/qt/qt5.git</code>
*: <br>
*: <br>
*: ダウンロードしたスーパーリポジトリに移動する。<br>
*: ダウンロードしたスーパーリポジトリに移動する。<br>
*: <code>cd qt6</code>
*: <code>cd qt5</code>
*: <code>git checkout <Qtのバージョン></code>
*: <code>git checkout <Qtのバージョン></code>
*: または
*: または
1,515行目: 1,497行目:
<br>
<br>


==== Qtデバイスファイルの作成 ====
==== Qtの設定 ====
Qtのソースコードがあるディレクトリにおいて、qtbase/mkspecs/devices/linux-pinephone-g++ディレクトリを作成する。<br>
Qtのソースコードがあるディレクトリにおいて、qtbase/mkspecs/devices/linux-pinephone-g++ディレクトリを作成する。<br>
  mkdir <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++
  mkdir <Qtのソースコードがあるディレクトリ>/qtbase/mkspecs/devices/linux-pinephone-g++
1,585行目: 1,567行目:


==== Qtのビルド ====
==== Qtのビルド ====
Qt 6をクロスビルドするため、クロスビルド向けディレクトリを作成する。<br>
===== GCC 11以降を使用する場合 =====
  mkdir build && cd build
GCC 11以降のツールチェーンを使用する場合、Qt 5.15のビルド時において、以下に示すエラーが発生する。<br>
error: 'numeric_limits' is not a member of 'std'  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
error: expected primary-expression before '>' token  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
error: '::max' has not been declared; did you mean 'std::max'?  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
<br>
これは、std::limitsが削除されて、limits.hファイルに移行されたからである。<br>
もし、GCC 11以降を使用してQt 5.15をビルドする場合は、qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.hファイルを、以下に示すように編集する。<br>
vi qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.h
<br>
<syntaxhighlight lang="c++">
// qt-everywhere-src-5.15.2/qtbase/src/corelib/global/qglobal.hファイル
// 45〜48行目あたり
// 編集前
#ifdef __cplusplus
#  include <type_traits>
#  include <cstddef>
#  include <utility>
#endif
// 編集後
#ifdef __cplusplus
#  include <type_traits>
#  include <cstddef>
#  include <utility>
#include <limits>
#endif
</syntaxhighlight>
<br>
===== Qtのビルド =====
Qtをビルドするため、ビルド用のディレクトリを作成する。<br>
  mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build
<br>
<br>
Qt 6のクロスビルド向けの設定を行う。<br>
Configureスクリプトを実行する。<br>
# Wayland Scannerのパスを設定
  export PATH="/<Wayland Scannerのインストールディレクトリ>/bin:$PATH"
  export PATH="/<Wayland Scannerのインストールディレクトリ>/bin:$PATH"
  export LD_LIBRARY_PATH="/<Wayland Scannerのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
  export LD_LIBRARY_PATH="/<Wayland Scannerのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
   
   
# PinePhoneのシステムルートディレクトリを設定
  export PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/aarch64-linux-gnu/pkgconfig"
  export SYSROOT=<PinePhoneのシステムルートディレクトリ>
  export PKG_CONFIG_LIBDIR="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/aarch64-linux-gnu/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig"
# Pkg-Configの設定
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 CROSS_COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-"
  export COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-"
  # または
  # または
  # export CROSS_COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-unknown-linux-gnu-"
  # export COMPILER="/<GCC ARMツールチェーンのインストールディレクトリ>/bin/aarch64-unknown-linux-gnu-"
../<Qtのソースコードがあるディレクトリ>/configure -v
-release \
-opensource \
-confirm-license \
-opengl es2 \
-qpa wayland \
-device linux-pinephone-g++ \
-device-option CROSS_COMPILE=$COMPILER \
-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all \
-skip qtscript -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \
-skip qtgamepad -skip qtpurchasing -skip qtcharts -skip qtsensors \  (不要な場合)
-skip qtlocation -skip qtspeech -skip qtlottie \                      (不要な場合)
-skip qtdoc \
-sysroot /<SysRootが存在するディレクトリ>/sysroot \
-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \
-extprefix /<PinePhoneにインストールするQtライブラリを配置するディレクトリ>/Target \
-hostprefix /<Linux PCで使用するQtツールを配置するディレクトリ>/Host
<br>
Qtをビルドおよびインストールする。<br>
gmake -j $(nproc)
gmake install
<br>
 
===== Qt Waylandのビルド =====
まず、Qt Waylandのソースコードのディレクトリ(/<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner)に対して、<br>
wayland-text-input-unstable-v2-client-protocolファイル、wayland-text-input-unstable-v2-server-protocol.hファイル、wayland-wayland-client-protocol.hファイルを作成する。<br>
<br>
<u>なお、wayland-text-input-unstable-v2-client-protocolファイルとwayland-text-input-unstable-v2-server-protocol.hファイルは、空のファイルである。</u><br>
touch /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-text-input-unstable-v2-client-protocol.h \
      /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-text-input-unstable-v2-server-protocol.h \
      /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-wayland-client-protocol.h
<br>
vi /<Qtのソースコードがあるディレクトリ>/qtwayland/config.tests/wayland_scanner/wayland-wayland-client-protocol.h
<br>
<syntaxhighlight lang="c++">
// wayland-wayland-client-protocol.hファイル
#include "../../../../../src/client/wayland-wayland-client-protocol.h"
</syntaxhighlight>
<br>
次に、Wayland Scannerをインストールする。<br>
なお、Wayland Scannerのビルドには、Meson(Pythonライブラリ)とNinjaが必要である。<br>
# Wayland Scannerのビルドに必要なライブラリをインストールする。
#: <code>sudo zypper install meson ninja expat-devel libxml2-devel</code>
#: <br>
# Wayland Scannerのソースコードをダウンロードする。<br>
#: <code>git clone https://github.com/wayland-project/wayland.git</code>
#: <code>cd wayland && mkdir build</code>
#: <br>
# Wayland Scannerのビルドおよびインストールする。
#: <code>meson ./build --prefix=<上記でインストールしたQtツールのインストールディレクトリ> -Ddocumentation=false</code>
#: <code>ninja -C ./build install</code>
<br>
最後に、Qt Waylandをビルドおよびインストールする。<br>
export PATH="/<Wayland Scannerのインストールディレクトリ>/bin:$PATH"
export LD_LIBRARY_PATH="/<Wayland Scannerのインストールディレクトリ>/lib64:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="/<上記でインストールしたQtライブラリのインストールディレクトリ>/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/aarch64-linux-gnu/pkgconfig"
export PKG_CONFIG_LIBDIR="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/aarch64-linux-gnu/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig"
cd /<Qtのソースコードがあるディレクトリ>/qtwayland
mkdir build && cd build
   
   
  cmake -G Ninja \
  /<上記でインストールしたQtツールがあるディレクトリ>/bin/qmake ../qtwayland.pro
<Qt 6のソースコードがあるディレクトリ>       \
<br>
-DCMAKE_BUILD_TYPE=Release          \
 
-DQT_FEATURE_eglfs_egldevice=ON    \
===== Qt SVGのビルド =====
-DQT_FEATURE_eglfs_gbm=ON          \
もし、Qt SVGをビルドおよびインストールしていない場合は、手動で行う。<br>
-DCMAKE_TOOLCHAIN_FILE=<CMakeデバイスファイルのパス>           \
<u>なお、Qt SVGをインストールするには、上記でインストールしたQtツール(Linux PC向け)のディレクトリにあるqmakeファイルを使用する必要がある。</u><br>
-DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON                  \
-DQT_QMAKE_TARGET_MKSPEC=devices/linux-pinephone-g++    \
-DQT_QMAKE_DEVICE_OPTIONS=CROSS_COMPILE=$CROSS_COMPILER  \
-DQT_BUILD_EXAMPLES=OFF  \
-DQT_BUILD_TESTS=OFF    \
-DBUILD_qtdoc=OFF        \  # QtDocをインストールしない場合
-DBUILD_qtwebengine=OFF  \  # QtWebEngineをインストールしない場合
-DBUILD_qtwebview=OFF    \  # QtWebViewをインストールしない場合
-DBUILD_qtwebchannel=OFF \  # QtWebChannelをインストールしない場合
-DCMAKE_SYSROOT=$SYSROOT \
-DQT_HOST_PATH=<x86 64向けQt 6のパスのトップディレクトリ  例: /home/user/Qt/6.x.x/gcc_64> \
-DCMAKE_STAGING_PREFIX=<PinePhone向けQt 6ライブラリを配置するディレクトリ>     \
-DCMAKE_INSTALL_PREFIX=<Qtソフトウェアを配置するディレクトリ>                 \
-DCMAKE_PREFIX_PATH=$SYSROOT/usr/lib
<br>
<br>
Qt 6をクロスビルドおよびインストールする。<br>
まず、Qt SVGのソースコードが存在するディレクトリに移動して、ビルド用ディレクトリを作成する。<br>
  cmake --build . --parallel $(nproc)
cd /<Qtのソースコードがあるディレクトリ>/qtsvg
  cmake --install .
mkdir build && cd build
<br>
Qt SVGをビルドおよびインストールする。<br>
<u>なお、Qt SVGのインストールディレクトリは、自動的にQtライブラリ(ターゲット向け)のディレクトリにインストールされる。</u><br>
<u>そのため、<code>DESTDIR</code>オプション等は付加しない。(付加しても無視される)</u>
/<上記でインストールしたLinux PC向けのQtツールのディレクトリ>/Host/bin/qmake ../qtsvg.pro
  make -j $(nproc)
make install
<br>
<br>
 
===== Qt Virtual Keyboardのビルド =====
もし、Qt Virtual Keyboardをビルドおよびインストールしていない場合は、手動で行う。<br>
この時、Qt Virtual Keyboardがインストールされているディレクトリを環境変数<code>LD_LIBRARY_PATH</code>に追加する必要がある。<br>
<br>
<u>なお、Qt Virtual Keyboardをインストールするには、上記でインストールしたQtツール(Linux PC向け)のディレクトリにあるqmakeファイルを使用する必要がある。</u><br>
<br>
まず、Qt Virtual Keyboardのソースコードが存在するディレクトリに移動して、ビルド用ディレクトリを作成する。<br>
cd /<Qtのソースコードがあるディレクトリ>/qtvirtualkeyboard
mkdir build && cd build
<br>
Qt Virtual Keyboardをビルドおよびインストールする。<br>
<u>なお、Qt Virtual Keyboardのインストールディレクトリは、自動的にQtライブラリ(ターゲット向け)のディレクトリにインストールされる。</u><br>
<u>そのため、<code>DESTDIR</code>オプション等は付加しない。(付加しても無視される)</u>
export LD_LIBRARY_PATH="/<上記でインストールしたQtライブラリ(ターゲット向け)のディレクトリ>/lib:$LD_LIBRARY_PATH"
/<上記でインストールしたLinux PC向けのQtツールのディレクトリ>/Host/bin/qmake "CONFIG+=lang-all" ../qtvirtualkeyboard.pro
make -j $(nproc)
  make install
<br>
<br>


案内メニュー