「インストール - Qt5」の版間の差分
| 174行目: | 174行目: | ||
<br><br> | <br><br> | ||
== | == Raspberry Pi 3B / 4Bのクロスコンパイル == | ||
Raspberry | Raspberry Piにおいて、一般的なデスクトップソフトウェアのクロスコンパイルおよび組み込み / デバイス作成のユースケースの<br> | ||
クロスコンパイルを行う手順を記載する。<br> | |||
<br> | <br> | ||
組み込み / デバイス作成とは、デスクトップソフトウェアをX11の下で実行するためのものではなく、<br> | |||
ソフトウェアがBroadcomドライバを使用して、dispmanx / | ソフトウェアがBroadcomドライバを使用して、dispmanx / EGLの上でフルスクリーンで実行するというユースケースのことである。<br> | ||
<br> | <br> | ||
==== Linux | <u>このセクションでは、Raspberry PiにRaspbian Busterをインストールしていることを想定している。</u><br> | ||
<br> | |||
==== Linux PCの設定 ==== | |||
Linux PCにおいて、以下の依存関係のライブラリをインストールする。<br> | Linux PCにおいて、以下の依存関係のライブラリをインストールする。<br> | ||
(Texinfoは、GNU公式Webサイトにアクセスして、ソースコードからインストールすることを推奨する)<br> | |||
sudo zypper install autoconf automake cmake unzip tar git wget pkg-config gperf gcc gcc-c++ libgfortran5 \ | sudo zypper install autoconf automake cmake unzip tar git wget pkg-config gperf gcc gcc-c++ libgfortran5 \ | ||
gawk bison openssl flex figlet pigz ncurses-devel ncurses5-devel texinfo | gawk bison openssl flex figlet pigz ncurses-devel ncurses5-devel texinfo | ||
<br> | <br> | ||
Raspberry | Raspberry Pi専用のGCC ARMツールチェインをダウンロードする。<br> | ||
https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/<br> | https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/<br> | ||
<center> | <center> | ||
| 242行目: | 245行目: | ||
</center> | </center> | ||
<br> | <br> | ||
==== Raspberry Piの設定 ==== | |||
==== Raspberry | <u>組み込み / デバイス作成を行う場合</u>、X11ではなくコンソールで起動するように変更して、VRAMを256[MB]に変更する。<br> | ||
sudo raspi-config | sudo raspi-config | ||
<br> | <br> | ||
Raspbian Stretchの場合は、<code>rpi-update</code>コマンドを実行する必要がある。<br> | |||
詳細については、[https://bugreports.qt.io/browse/QTBUG-62216 こちらを参照]すること。<br> | 詳細については、[https://bugreports.qt.io/browse/QTBUG-62216 こちらを参照]すること。<br> | ||
sudo rpi-update | sudo rpi-update | ||
| 260行目: | 262行目: | ||
(最小限のビルドを使用する場合、このオプションが利用可能になる前に、いくつかのアップデートを促される場合、アップデートを行う)<br> | (最小限のビルドを使用する場合、このオプションが利用可能になる前に、いくつかのアップデートを促される場合、アップデートを行う)<br> | ||
<br> | <br> | ||
Qtライブラリをインストールする。(ここでは簡単にするために、build-depを使用する)<br> | |||
/etc/apt/sources.listファイルのdeb-srcから始まる行のコメントを外す。<br> | /etc/apt/sources.listファイルのdeb-srcから始まる行のコメントを外す。<br> | ||
sudo vi /etc/apt/sources.list | sudo vi /etc/apt/sources.list | ||
| 267行目: | 269行目: | ||
# 編集前 | # 編集前 | ||
#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 | ||
# 編集後 | # 編集後 | ||
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi | deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi | ||
<br> | <br> | ||
Raspberry | Raspberry Piに、以下のライブラリをインストールする。<br> | ||
ここで、<code>build-dep</code>コマンドとは、ビルドに必要なパッケージが全てインストールするコマンドである。<br> | ここで、<code>build-dep</code>コマンドとは、ビルドに必要なパッケージが全てインストールするコマンドである。<br> | ||
ビルド設定によっては、不要なパッケージも含まれている。<br> | ビルド設定によっては、不要なパッケージも含まれている。<br> | ||
sudo apt-get update && sudo apt-get full-upgrade && sudo apt autoremove | sudo apt-get update && sudo apt-get full-upgrade && sudo apt autoremove | ||
# | # Raspberry Pi 3B | ||
sudo apt-get install | sudo apt-get install libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \ | ||
libxcb-xinerama0 libxcb-xinerama0-dev gdbserver | |||
# | # Raspberry Pi 4B | ||
sudo apt-get install build-essential cmake cmake-data cmake-doc ninja-build libjsoncpp1 librhash0 unzip pkg-config gfortran | sudo apt-get install build-essential cmake cmake-data cmake-doc ninja-build libjsoncpp1 librhash0 unzip pkg-config gfortran | ||
sudo apt-get build-dep qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev \ | sudo apt-get build-dep qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev \ | ||
| 299行目: | 289行目: | ||
sudo apt-get install libxcb-randr0-dev libxcb-xtest0-dev libxcb-shape0-dev libxcb-xkb-dev | sudo apt-get install libxcb-randr0-dev libxcb-xtest0-dev libxcb-shape0-dev libxcb-xkb-dev | ||
<br> | <br> | ||
もし、マルチメディアやBluetoothの機能を使用する場合、以下のライブラリもインストールする。<br> | |||
# マルチメディア用 | # マルチメディア用 | ||
sudo apt install libjpeg-dev libpng-dev libtiff-dev | sudo apt install libjpeg-dev libpng-dev libtiff-dev | ||
| 339行目: | 329行目: | ||
echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers | echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers | ||
<br> | <br> | ||
==== Qtライブラリのビルドおよびインストール ==== | ==== Qtライブラリのビルドおよびインストール ==== | ||
Linux PC上で、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように、ツールチェーンおよびSDKを設定する。<br> | Linux PC上で、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように、ツールチェーンおよびSDKを設定する。<br> | ||
| 346行目: | 335行目: | ||
Linux PC上に開発用ディレクトリを作成する。<br> | Linux PC上に開発用ディレクトリを作成する。<br> | ||
また、Raspberry Piのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<br> | また、Raspberry Piのいくつかのルートディレクトリと同期する必要があるため、システムルートディレクトリも作成する。<br> | ||
mkdir -p ~/Program/Qt_Embedded ~/Program/Qt_Embedded/sysroot ~/Program/Qt_Embedded/sysroot/usr ~/Program/Qt_Embedded/sysroot/ | mkdir -p ~/Program/Qt_Embedded/sysroot ~/Program/Qt_Embedded/sysroot/lib ~/Program/Qt_Embedded/sysroot/opt \ | ||
~/Program/Qt_Embedded/sysroot/usr ~/Program/Qt_Embedded/sysroot/usr/share | |||
<br> | <br> | ||
<code>rsync</code>コマンドを使用して、Raspberry | <code>rsync</code>コマンドを使用して、Raspberry Piに存在するいくつかのディレクトリから、ファイルをダウンロードする。<br> | ||
rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot | rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/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/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/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 | rsync -avz --rsync-path="sudo rsync" --delete --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/opt/vc ~/Program/Qt_Embedded/sysroot/opt | ||
<br> | <br> | ||
ダウンロードしたファイルおよびディレクトリのシンボリックリンクを相対的に調整する。<br> | |||
fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。<br> | fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。<br> | ||
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py | wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py | ||
| 362行目: | 353行目: | ||
Linux PC上で、Qtのダウンロードとビルドを行う。<br> | Linux PC上で、Qtのダウンロードとビルドを行う。<br> | ||
<br> | <br> | ||
ここでは、Qtソフトウェアは~/Program/Qt_Embedded/QtSoftwareディレクトリ、qmake等のホストツールは~/Program/Qt_Embedded/Hostディレクトリ、<br> | |||
Qtライブラリは~/Program/Qt_Embedded/Targetディレクトリとしている。<br> | |||
<br> | <br> | ||
以下のコマンドにおいて、<Qtのバージョン>は、使用するQtのバージョンに変更する。(例. Qt 5.15.2をダウンロードする場合、5.15.2と入力する)<br> | |||
また、<Raspberry Piのバージョン>は、Raspberry Piの種類に変更する。<br> | また、<Raspberry Piのバージョン>は、Raspberry Piの種類に変更する。<br> | ||
* <Raspberry Piのバージョン> | * <Raspberry Piのバージョン> | ||
| 385行目: | 368行目: | ||
**: <code>linux-rasp-pi4-v3d-g++</code> | **: <code>linux-rasp-pi4-v3d-g++</code> | ||
<br> | <br> | ||
<u>Raspbian OS | <u>Raspbian OS 64bitを使用している場合は、<code>-device-option</code>オプションを以下のように記述する。</u><br> | ||
-device-option CROSS_COMPILE=/<GCC ARMツールチェインのインストールディレクトリ>/bin/aarch64-linux-gnueabihf- | -device-option CROSS_COMPILE=/<GCC ARMツールチェインのインストールディレクトリ>/bin/aarch64-linux-gnueabihf- | ||
<br> | <br> | ||
また、Qt 5. | また、Qt 5.8以降は、<code>-no-use-gold-linker</code>オプションを追加する必要がある。<br> | ||
* QtBaseをビルドする場合 | * QtBaseをビルドする場合 | ||
*: <code>cd ~/Program/Qt_Embedded</code> | *: <code>cd ~/Program/Qt_Embedded</code> | ||
| 413行目: | 396行目: | ||
*: <code>git clean -dfx</code> | *: <code>git clean -dfx</code> | ||
*: <br> | *: <br> | ||
* | * Qt Everywhere Opensourceをビルドする場合 | ||
*: <code>wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz</code> | *: <code>wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz</code> | ||
*: <code>tar xf qt-everywhere-opensource-src-x.x.x.tar.gz</code> | *: <code>tar xf qt-everywhere-opensource-src-x.x.x.tar.gz</code> | ||
*: <code>cd qt-everywhere-opensource-src-x.x.x</code> | *: <code>cd qt-everywhere-opensource-src-x.x.x</code> | ||
*: <br> | *: <br> | ||
*: <code>cp - | *: <code>cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/linux-arm-gnueabihf-g++</code> | ||
*: <code>sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf</code> | *: <code>sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf</code> | ||
*: <br> | *: <br> | ||
| 436行目: | 419行目: | ||
*: (Qtライブラリを使用するソフトウェアをビルドする場合、このrccバイナリが必要である)<br> | *: (Qtライブラリを使用するソフトウェアをビルドする場合、このrccバイナリが必要である)<br> | ||
*: <code>cp ~/Program/Qt_Embedded/qtbase/bin/rcc ~/Program/Qt_Embedded/Qt5/bin</code> | *: <code>cp ~/Program/Qt_Embedded/qtbase/bin/rcc ~/Program/Qt_Embedded/Qt5/bin</code> | ||
<br> | |||
* Githubからダウンロードしてビルドする場合 | |||
*: QtのGithubでは、より多くの新しいアップデートが行われている。 | |||
*: init-repositoryコマンドは、Qtが提供する指定したモジュールのソースコードを取得するためのツールである。 | |||
*: super-repoはそれ自体は小さく、他の全てはgit submodulesとして保持されている。 | |||
*: 利用可能な全てのモジュールについては[https://doc.qt.io/qt-5/qtmodules.html こちら]、ツールについてはinit-repository --helpコマンドまたは[https://github.com/qt/qt5/blob/dev/init-repository こちら]を参照すること。 | |||
*: git clone https://github.com/qt/qt5.git | |||
*: cd qt5 | |||
*: git checkout x.xx.xまたはgit checkout x.xx | |||
*: ./init-repository --module-subset=essential | |||
*: <br> | |||
*: ../qt5/configure -release -opengl es2 -eglfs -device linux-rasp-pi3-brcm-g++ \ [~] | |||
*: -device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \ | |||
*: -sysroot /run/media/suse/SAMSUNG860EVO/Qt_Embedded/sysroot \ | |||
*: -opensource -confirm-license -v -nomake examples -nomake tests -make libs -no-use-gold-linker -recheck-all -skip qtwebengine \ | |||
*: -prefix /run/media/suse/SAMSUNG860EVO/Qt_Embedded/Qt_5_15_2 \ | |||
*: -extprefix /run/media/suse/SAMSUNG860EVO/Qt_Embedded/Target \ | |||
*: -hostprefix /run/media/suse/SAMSUNG860EVO/Qt_Embedded/Host | |||
<br> | <br> | ||
ビルドしたQtライブラリを、Raspberry Piにデプロイする。<br> | ビルドしたQtライブラリを、Raspberry Piにデプロイする。<br> | ||
~/Program/Qt_Embedded/Qt5ディレクトリに存在する全てのファイルを、Raspberry Piの/usr/localディレクトリに同期させる。<br> | ~/Program/Qt_Embedded/Qt5ディレクトリに存在する全てのファイルを、Raspberry Piの/usr/localディレクトリに同期させる。<br> | ||
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" ~/Program/Qt_Embedded/Qt5 <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x | rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" \ | ||
~/Program/Qt_Embedded/Qt5 <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x | |||
<br> | <br> | ||
Raspberry PiのリンカがQtライブラリを読み込むようにするため、以下のコマンドを実行する。<br> | Raspberry PiのリンカがQtライブラリを読み込むようにするため、以下のコマンドを実行する。<br> | ||
ただし、Raspberry Pi | ただし、Raspberry Pi 2B / 3Bの場合、ファイル名の先頭に"00"を付加して、00-Qt_5_x_x.confファイルを作成する。<br> | ||
# .profileファイルに設定する場合 | # .profileファイルに設定する場合 | ||
export LD_LIBRARY_PATH="/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x/lib:$LD_LIBRARY_PATH" | export LD_LIBRARY_PATH="/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x/lib:$LD_LIBRARY_PATH" | ||
# /etc/ld.so.conf.dディレクトリに配置する場合 | # /etc/ld.so.conf.dディレクトリに配置する場合 | ||
echo /home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x/lib | sudo tee /etc/ld.so.conf.d/Qt_5_x_x.conf | 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 | sudo ldconfig | ||
<br> | <br> | ||
上記の設定により、Raspberry | 上記の設定により、Raspberry Piにおいて、Qt 5.x.xを使用できる。<br> | ||
<br> | <br> | ||
==== Qtソフトウェアの動作確認 ==== | ==== Qtソフトウェアの動作確認 ==== | ||
Qtソフトウェアをビルドして、動作確認を行う。<br> | Qtソフトウェアをビルドして、動作確認を行う。<br> | ||
| 467行目: | 468行目: | ||
*: Value - x11 | *: Value - x11 | ||
<br> | <br> | ||
次に、Raspberry | 次に、Raspberry Piの~/.profileファイルまたは~/.bashrcファイルに、以下の設定を追記する。<br> | ||
export QT_QPA_PLATFOMRTHEME=qt5ct | export QT_QPA_PLATFOMRTHEME=qt5ct | ||
export DISPLAY=:0.0 | export DISPLAY=:0.0 | ||
| 478行目: | 479行目: | ||
~/Program/Qt_Embedded/Qt5/bin/qmake | ~/Program/Qt_Embedded/Qt5/bin/qmake | ||
make -j | make -j $(nproc) | ||
scp -P <ポート番号> -i <秘密鍵のフルパス> qopenglwidget <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/Qt5Pi | scp -P <ポート番号> -i <秘密鍵のフルパス> qopenglwidget <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/Qt5Pi | ||
<br> | <br> | ||
Raspberry | Raspberry Piで、EGL / GLESライブラリを修正する。<br> | ||
Raspberry Piの/usr/lib/arm-linux-gnueabihfディレクトリには、MesaのlibEGLとlibGLESv2が存在する。<br> | Raspberry Piの/usr/lib/arm-linux-gnueabihfディレクトリには、MesaのlibEGLとlibGLESv2が存在する。<br> | ||
Qtソフトウェアは、/opt/vc/libディレクトリにあるライブラリではなく、これらを選択することになる。<br> | Qtソフトウェアは、/opt/vc/libディレクトリにあるライブラリではなく、これらを選択することになる。<br> | ||
2021年4月14日 (水) 12:57時点における版
概要
ここでは、Qt 5.14のインストール方法を記載する。
通常のインストール
依存関係のライブラリのインストール
Qtの依存関係のライブラリをインストールする。
これらのライブラリは不要な可能性がある。(調査中)
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、付随するライブラリをインストールする。
# CentOS sudo yum groupinstall "Development tools" # SUSE sudo zypper install --type pattern devel_basis
Qtをインストールする。
./qt-unified-linux-x64-online.run
Qtのインストール画面に従って、インストールを実行する。
ソースコードからインストール
必須環境
- 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 git-core gcc-c++ make python3 perl \
xorg-x11-libxcb-devel xcb-util-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel \
xcb-util-wm-devel xorg-x11-devel libxkbcommon-x11-devel libxkbcommon-devel libXi-devel \
flex bison gperf libicu-devel ruby \
alsa-devel dbus-1-devel libXcomposite-devel libXcursor-devel libXrandr-devel libXtst-devel mozilla-nspr-devel \
mozilla-nss-devel gperf bison nodejs10 nodejs10-devel \
pulseaudio-libs-devel alsa-lib-devel gstreamer1-devel gstreamer1-plugins-base-devel wayland-devel
- fontconfig-devel
- libfontenc-devel
- libXft-devel
- libx11-devel
- libxcb-devel
- libXext-devel
- libXfixes-devel
- libXrender-devel
- libxcb-devel
- Mesa-libGL-devel
- xcb-util-keysyms-devel
- xcb-util-image-devel
- xcb-util-wm-devel
- libXfixes-devel
- xcb-util-renderutil-devel
- libXinerama-devel
- libxcb-shm0-dev
- libxcb-sync0-dev
- libxcb-shape0-dev
ソースコードのダウンロード
Qtのソースコードをダウンロードする。
git clone --recursive https://code.qt.io/qt-creator/qt-creator.git
ソースコードのビルド
Qtのソースコードをビルドするため、ビルド用のディレクトリを作成する。
mkdir build cd build
- qmakeを使用する場合
- オプションのClang Code Modelプラグインをビルドする場合、LLVMのインストールディレクトリへのパスを指定する必要がある。
export LLVM_INSTALL_DIR=<LLVMのインストールディレクトリ>qmake ../qt-creator/qtcreator.promake qmake_allmake -j 8- もし、
Project ERROR: Unknown module(s) in QT: scriptというエラーが出力される場合、以下のコマンドを実行する。 make -j 8 module-qtscript
- cmakeを使用する場合
- Qtのソースコードをビルドする。
cmake -G Ninja -D CMAKE_BUILD_TYPE=Release -D CMAKE_PREFIX_PATH=<Qtのインストールディレクトリ>; <LLVMのインストールディレクトリ> ../qt-creatorcmake --build ..
コンパイルには時間が掛かるので気長に待つ。(バイナリファイルは、qt-createor-build/binディレクトリに作成される)
Qtのインストール
Qtをインストールする。
make install INSTALL_ROOT=<Qtのインストールディレクトリ>
デスクトップエントリの追加
以下のコマンドを実行して、デスクトップエントリを追加する。
sudo vi /usr/share/applications/qtcreator.desktop # qtcreator.desktopファイル [Desktop Entry] Type=Application Exec="/home/ユーザ名/Qt/Tools/QtCreator/bin/qtcreator" %F Name=Qt Creator GenericName=The IDE of choice for Qt development. 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;
sudo vi /usr/share/applications/Qt-MaintenanceTool.desktop # Qt-MaintenanceTool.desktopファイル [Desktop Entry] Type=Application Exec=/home/ユーザ名/Qt/MaintenanceTool Path=/home/ユーザ名/Qt Name=Qt Maintenance Tool GenericName=Install or uninstall Qt components. Icon=/home/ユーザ名/Qt/QtIcon.png Terminal=false Categories=Development;Qt;
sudo vi /usr/share/applications/qt-project.qtdesigner.desktop # qt-project.qtdesigner.desktopファイル [Desktop Entry] Type=Application Exec="/home/ユーザ名/Qt/5.14.0/gcc_64/bin/designer" %F Name=Qt Designer GenericName=Qt designer Icon=/home/ユーザ名/Qt/designer.png StartupWMClass=qtdesigner 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;
Raspberry Pi 3B / 4Bのクロスコンパイル
Raspberry Piにおいて、一般的なデスクトップソフトウェアのクロスコンパイルおよび組み込み / デバイス作成のユースケースの
クロスコンパイルを行う手順を記載する。
組み込み / デバイス作成とは、デスクトップソフトウェアをX11の下で実行するためのものではなく、
ソフトウェアがBroadcomドライバを使用して、dispmanx / EGLの上でフルスクリーンで実行するというユースケースのことである。
このセクションでは、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++ libgfortran5 \
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ツールチェインを解凍して、任意のディレクトリに配置する。
ここでは、~/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の設定
組み込み / デバイス作成を行う場合、X11ではなくコンソールで起動するように変更して、VRAMを256[MB]に変更する。
sudo raspi-config
Raspbian Stretchの場合は、rpi-updateコマンドを実行する必要がある。
詳細については、こちらを参照すること。
sudo rpi-update reboot
GL(FAKE KMS)を有効にする。
Fake KMSを有効にするには、まず、以下のコマンドを実行する。
sudo raspi-config
次に、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択することにより、KMSが有効になる。
最後に、[Finish]を選択して終了する。
(最小限のビルドを使用する場合、このオプションが利用可能になる前に、いくつかのアップデートを促される場合、アップデートを行う)
Qtライブラリをインストールする。(ここでは簡単にするために、build-depを使用する)
/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
Raspberry Piに、以下のライブラリをインストールする。
ここで、build-depコマンドとは、ビルドに必要なパッケージが全てインストールするコマンドである。
ビルド設定によっては、不要なパッケージも含まれている。
sudo apt-get update && sudo apt-get full-upgrade && sudo apt autoremove
# Raspberry Pi 3B
sudo apt-get install libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \
libxcb-xinerama0 libxcb-xinerama0-dev gdbserver
# Raspberry Pi 4B
sudo apt-get install build-essential cmake cmake-data cmake-doc ninja-build libjsoncpp1 librhash0 unzip pkg-config gfortran
sudo apt-get build-dep qt5-qmake libqt5gui5 libqt5webengine-data libqt5webkit5 libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev \
libxcb-xinerama0 gdbserver
sudo apt-get install libxcb-randr0-dev libxcb-xtest0-dev libxcb-shape0-dev libxcb-xkb-dev
もし、マルチメディアやBluetoothの機能を使用する場合、以下のライブラリもインストールする。
# マルチメディア用
sudo apt install libjpeg-dev libpng-dev libtiff-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install libxvidcore-dev libx264-dev
# マルチメディア用(GStreamer)
sudo apt install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 \
gstreamer1.0-qt5 gstreamer1.0-pulseaudio
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
# オーディオ用
sudo apt install libopenal-data libsndio7.0 libopenal1 libopenal-dev pulseaudio
# Bluetooth用
sudo apt install bluez-tools
sudo apt install libbluetooth-dev
ビルドしたQtソフトウェアをRasberry Piにデプロイするためのディレクトリ(ターゲットディレクトリ)を作成する。
加えて、Qt5ライブラリを配置するディレクトリも作成する。
mkdir -p ~/Qt5Pi ~/InstallSoftware/Qt_5_x_x
また、重要なシンボリックリンクを作成する。
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
Qtライブラリのビルドおよびインストール
Linux PC上で、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように、ツールチェーンおよびSDKを設定する。
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
Linux PC上で、Qtのダウンロードとビルドを行う。
ここでは、Qtソフトウェアは~/Program/Qt_Embedded/QtSoftwareディレクトリ、qmake等のホストツールは~/Program/Qt_Embedded/Hostディレクトリ、
Qtライブラリは~/Program/Qt_Embedded/Targetディレクトリとしている。
以下のコマンドにおいて、<Qtのバージョン>は、使用するQtのバージョンに変更する。(例. Qt 5.15.2をダウンロードする場合、5.15.2と入力する)
また、<Raspberry Piのバージョン>は、Raspberry Piの種類に変更する。
- <Raspberry Piのバージョン>
- Raspberry Pi 1
linux-rasp-pi-g++
- Raspberry Pi 2
linux-rasp-pi2-g++
- Reaspberry Pi 3
linux-rasp-pi3-g++
- 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をビルドする場合
cd ~/Program/Qt_Embeddedgit clone git://code.qt.io/qt/qtbase.git -b <Qtのバージョン>- または
git clone https://github.com/qt/qtbase -b <Qtのバージョン>cp -r ./qtbase/mkspecs/linux-arm-gnueabi-g++ ./qtbase/mkspecs/linux-arm-gnueabihf-g++sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' ./qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.confcd qtbase && mkdir build && cd build../configure -release -opengl es2 -eglfs -device <Raspberry Piのバージョン> \-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \-sysroot /home/<ユーザ名>/Program/Qt_Embedded/sysroot -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine \-nomake examples -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck \-L/home/<ユーザ名>/Program/Qt_Embedded/sysroot/usr/lib/arm-linux-gnueabihf -I/home/<ユーザ名>/Program/Qt_Embedded/sysroot/usr/include/arm-linux-gnueabihf \-prefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5 -extprefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5gmake -j $(nproc)gmake install- 失敗した場合は、全てを削除するために以下のコマンドを実行する。
git clean -dfx
- Qt Everywhere Opensourceをビルドする場合
wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xztar xf qt-everywhere-opensource-src-x.x.x.tar.gzcd qt-everywhere-opensource-src-x.x.xcp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/linux-arm-gnueabihf-g++sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.confmkdir build && cd build../configure -release -opengl es2 -eglfs -device <Raspberry Piのバージョン> \-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \-sysroot /home/<ユーザ名>/Program/Qt_Embedded/sysroot -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine \-nomake examples -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck \-L/home/<ユーザ名>/Program/Qt_Embedded/sysroot/usr/lib/arm-linux-gnueabihf -I/home/<ユーザ名>/Program/Qt_Embedded/sysroot/usr/include/arm-linux-gnueabihf \-prefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5 -extprefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5gmake -j $(nproc)gmake install- もし、ビルドしたQtライブラリにネイティブのrccファイルが存在しない場合は、rccファイルをQtライブラリのbinディレクトリにコピーする。
- (Qtライブラリを使用するソフトウェアをビルドする場合、このrccバイナリが必要である)
cp ~/Program/Qt_Embedded/qtbase/bin/rcc ~/Program/Qt_Embedded/Qt5/bin
- Githubからダウンロードしてビルドする場合
- QtのGithubでは、より多くの新しいアップデートが行われている。
- init-repositoryコマンドは、Qtが提供する指定したモジュールのソースコードを取得するためのツールである。
- super-repoはそれ自体は小さく、他の全てはgit submodulesとして保持されている。
- 利用可能な全てのモジュールについてはこちら、ツールについてはinit-repository --helpコマンドまたはこちらを参照すること。
- git clone https://github.com/qt/qt5.git
- cd qt5
- git checkout x.xx.xまたはgit checkout x.xx
- ./init-repository --module-subset=essential
- ../qt5/configure -release -opengl es2 -eglfs -device linux-rasp-pi3-brcm-g++ \ [~]
- -device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \
- -sysroot /run/media/suse/SAMSUNG860EVO/Qt_Embedded/sysroot \
- -opensource -confirm-license -v -nomake examples -nomake tests -make libs -no-use-gold-linker -recheck-all -skip qtwebengine \
- -prefix /run/media/suse/SAMSUNG860EVO/Qt_Embedded/Qt_5_15_2 \
- -extprefix /run/media/suse/SAMSUNG860EVO/Qt_Embedded/Target \
- -hostprefix /run/media/suse/SAMSUNG860EVO/Qt_Embedded/Host
ビルドしたQtライブラリを、Raspberry Piにデプロイする。
~/Program/Qt_Embedded/Qt5ディレクトリに存在する全てのファイルを、Raspberry Piの/usr/localディレクトリに同期させる。
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" \ ~/Program/Qt_Embedded/Qt5 <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/InstallSoftware/Qt_5_x_x
Raspberry PiのリンカがQtライブラリを読み込むようにするため、以下のコマンドを実行する。
ただし、Raspberry Pi 2B / 3Bの場合、ファイル名の先頭に"00"を付加して、00-Qt_5_x_x.confファイルを作成する。
# .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 5.x.xを使用できる。
Qtソフトウェアの動作確認
Qtソフトウェアをビルドして、動作確認を行う。
まず、Qt Creatorを起動して、Qt Creatorメイン画面左の[プロジェクト] - 右ペインの[ビルド設定] - [Build Environment]項目 - [詳細]プルダウンを開く。
[詳細]プルダウンから[追加]ボタンを押下して、以下の項目を設定する。
- Variable - QT_QPA_PLATFOMRTHEME
- Value - qt5ct
- Variable - DISPLAY
- Value - :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.0 export XAUTHORITY=/home/<Raspberry Piのユーザ名>/.Xauthrity export XDG_SESSION_TYPE=x11
ビルドの完了後、実行ファイルをRaspberry Piにコピーする。
cd qtbase/examples/opengl/qopenglwidget ~/Program/Qt_Embedded/Qt5/bin/qmake make -j $(nproc) scp -P <ポート番号> -i <秘密鍵のフルパス> qopenglwidget <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/Qt5Pi
Raspberry Piで、EGL / GLESライブラリを修正する。
Raspberry Piの/usr/lib/arm-linux-gnueabihfディレクトリには、MesaのlibEGLとlibGLESv2が存在する。
Qtソフトウェアは、/opt/vc/libディレクトリにあるライブラリではなく、これらを選択することになる。
これは、OpenGLのパフォーマンスを気にしないX11デスクトップソフトウェアには都合が良いが、
フルスクリーンの組み込みソフトウェアをウィンドウ化するには全く役に立たない。
オリジナルのファイルは、必ず、バックアップする。
sudo mv /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0_org sudo mv /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0_org sudo ln -s /opt/vc/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 sudo ln -s /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 sudo ln -s /opt/vc/lib/libbrcmEGL.so /opt/vc/lib/libEGL.so sudo ln -s /opt/vc/libbrcmGLESv2.so /opt/vc/libGLESv2.so
また、見つからないシンボリックリンクも追加する。
sudo ln -s /opt/vc/lib/libEGL.so /opt/vc/lib/libEGL.so.1 sudo ln -s /opt/vc/libGLESv2.so /opt/vc/lib/libGLESv2.so.2
以下の例では、Linux PC側で、Qtソフトウェアをビルドしている。
<Qtソフトウェアのサンプル>と<Qtのバージョン>はユーザ環境に合致するものを記述すること。
git clone git://code.qt.io/qt/<Qtソフトウェアのサンプル>.git -b <Qtのバージョン> cd <Qtソフトウェアのサンプル> ~/Program/Qt_Embedded/Qt5/bin/qmake make -j 8 make install
最後に、Qtソフトウェアをデプロイする。
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" ~/Program/Qt_Embedded/Qt5Pi <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/Qt5Pi