インストール - Qt5
概要
ここでは、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.pro
make qmake_all
make -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-creator
cmake --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において、クロスコンパイルを行う手順を記載する。
これは、デスクトップスタイルのソフトウェアをX11の下で実行するためのものではなく、
ソフトウェアがBroadcomドライバを使用して、dispmanx / EGLの上でフルスクリーンで実行するという、
実際の組み込み / デバイス作成のユースケースを想定している。
Linux PCの初期設定
Linux PCにおいて、以下の依存関係のライブラリをインストールする。
sudo zypper install libicu-devel Mesa-devel Mesa-libGL-devel libXinerama-devel libxslt-devel \ libopenssl-devel libXcursor-devel libXcomposite-devel libXdamage-devel libXrandr-devel fontconfig-devel \ libcap-devel libXtst-devel libpulse-devel libudev-devel pciutils-devel mozilla-nss-devel libXss-devel \ Mesa-libEGL-devel gperf bison
Raspberry Pi向けにビルドするため、GCC ARMツールチェインをダウンロードする。
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ディレクトリに配置している。
cd
Raspberry Piの初期設定
raspi-configを実行して、Xではなくコンソールで起動するように変更して、VRAMを256[MB]に変更する。(オプション)
sudo raspi-config
また、Raspbian Stretchの場合は、rpi-updateを実行する必要がある。(詳細については、こちらを参照すること)
sudo rpi-update reboot
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/ stretch main contrib non-free rpi # 編集後 deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
sudo apt-get update && sudo apt-get full-upgrade && sudo apt autoremove sudo apt-get build-dep qt4-x11 sudo apt-get build-dep libqt5gui5 sudo apt-get install libinput-dev libpthread-stubs0-dev libts-0.0-0 libts-dev libudev-dev libxau-dev \ libxcb-doc libxcb-xinerama0-dev libxcb-xinerama0-dev libxcb-xinerama0 libxcb1-dev libxdmcp-dev tsconf x11proto-core-dev \ xorg-sgml-doctools
ターゲットディレクトリを作成する。
sudo mkdir ~/Qt5Pi sudo chown pi:pi Qt5Pi
上記の設定により、Raspberry Piのルートファイルシステムにツールチェインと必要なファイルをインストールすることで、
ソフトウェアのクロスコンパイルができるようになる。
ツールチェーン / SDKのセットアップ
Linux PC上で、Raspberry Pi向けのQtソフトウェアをクロスコンパイルできるように、ツールチェーンおよびSDKを設定する。
Raspberry Pi上でネイティブにコンパイルすることもできるが、Linux PCの方がスループットが良い。
Linux PC上に作業ディレクトリを作成して、ツールチェーンをダウンロードする。
mkdir -p ~/Program/Qt_Embedded && cd ~/Program/Qt_Embedded git clone --depth 1 https://github.com/raspberrypi/tools
Linux PC上に、~/Program/Qt_Embedded/sysrootディレクトリを作成する。
rsync
コマンドを使用することにより、Raspberry Piのディレクトリと同期することができる。
mkdir ~/Program/Qt_Embedded/sysroot ~/Program/Qt_Embedded/sysroot/usr ~/Program/Qt_Embedded/sysroot/opt rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/lib ~/Program/Qt_Embedded/sysroot rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/include ~/Program/Qt_Embedded/sysroot/usr rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/usr/lib ~/Program/Qt_Embedded/sysroot/usr rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/opt/vc ~/Program/Qt_Embedded/sysroot/opt
Linux PC上で、シンボリックリンクを相対的に調整する。
fixQualifiedLibraryPathsが正常に動作しないため、提供されたスクリプトをダウンロードして実行する。
wget https://raw.githubusercontent.com/Kukkimonsuta/rpi-buildqt/master/scripts/utils/sysroot-relativelinks.py chmod +x sysroot-relativelinks.py ./sysroot-relativelinks.py ~/Program/Qt_Embedded/sysroot
Linux PC上で、QtBaseのダウンロードとQtの設定を行う。
ここでは、ターゲットディレクトリにおいて、Raspberry Pi側では、~/Qt5Piディレクトリ、
qmake等のホストツール(Linux PC上)では、~/Program/Qt_Embedded/Qt5ディレクトリ、
make install
コマンドでは、~/Program/Qt_Embedded/Qt5Piをターゲットとする。
(Raspberry Piと同期するのは、このディレクトリである)
<Qtのバージョン>を適切なQtのバージョンに変更する必要がある。(例. 5.12.7や5.15.2等)
また、<Raspberry Piのバージョン>を適切なRaspberry Piのバージョンに変更する必要がある。
<Raspberry Piのバージョン>には、linux-rasp-pi-g++
、Raspberry Pi 2はlinux-rasp-pi2-g++
、Reaspberry Pi 3はlinux-rasp-pi3-g++
を指定する。
Raspbianが64ビットの場合は、device-option
オプションを以下のように記述する。
-device-option CROSS_COMPILE=~/Program/Qt_Embedded/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-
また、Qt 5.9以降は、-no-use-gold-linker
オプションを追加する必要がある。
cd ~/Program/Qt_Embedded git clone git://code.qt.io/qt/qtbase.git -b <Qtのバージョン> または git clone https://github.com/qt/qtbase -b <Qtのバージョン> cd qtbase && mkdir build && cd build ../configure -release -opengl es2 -device <Raspberry Piのバージョン> \ -device-option CROSS_COMPILE=/home/<ユーザ名>/Program/Qt_Embedded/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- \ -sysroot /home/<ユーザ名>/Program/Qt_Embedded/sysroot -opensource -confirm-license -make libs \ -prefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5Pi -extprefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5Pi -hostprefix /home/<ユーザ名>/Qt5 -v -no-use-gold-linker make -j 8 make install
失敗した場合は、全てを削除するために以下のコマンドを実行する。
git clean -dfx
上記のQtBaseを使用せずに、全てのQtモジュールをビルドおよびインストールする場合、以下のコマンドを実行する。
wget http://download.qt.io/official_releases/qt/5.x/5.x.x/single/qt-everywhere-opensource-src-x.x.x.tar.gz tar xf qt-everywhere-opensource-src-x.x.x.tar.gz cd qt-everywhere-opensource-src-x.x.x mkdir build && cd build # Raspberry Pi 3B向け ../configure -release -opengl es2 -device <Raspberry Piのバージョン> \ -device-option CROSS_COMPILE=/home/<ユーザ名>/Program/Qt_Embedded/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- \ -sysroot /home/<ユーザ名>/Program/Qt_Embedded/sysroot -opensource -confirm-license \ -prefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5Pi -extprefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5Pi -hostprefix /home/<ユーザ名>/Program/Qt_Embedded/Qt5 -v -no-use-gold-linker make -j 8 make install
ただし、SDKにネイティブのrccファイルが含まれていないため、rccファイルをSDKのbinディレクトリにコピーする。
(Qtモジュールを使用するソフトウェアをビルドする場合、このrccバイナリが必要である)
cp ~/Program/Qt_Embedded/qtbase/bin/rcc ~/Program/Qt_Embedded/Qt5Pi/bin
Linux PC上で、QtをRaspberry Piにデプロイする。
ここでは、~/Program/Qt_Embedded/Qt5Piから上で設定したプレフィックスに全てを同期させる。
rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" ~/Program/Qt_Embedded/Qt5Pi <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/Qt5Pi
Linux PC上で、Qtのサンプルプログラムをビルドして動作確認を行う。
ビルドの完了後、実行ファイルをRaspberry Piにコピーする。
cd qtbase/examples/opengl/qopenglwidget ~/Program/Qt_Embedded/Qt5/bin/qmake make -j 8 scp -P <ポート番号> -i <秘密鍵のフルパス> qopenglwidget <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/Qt5Pi
Raspberry Pi上で、リンカがQtライブラリを見つけられるように、Raspberyy Piを更新する。
もし、サンプルの実行に問題がある場合は、qt5pi.confの代わりに00-qt5pi.confを使用して、適切な順序を導入する。
echo ~/Qt5Pi/lib | sudo tee /etc/ld.so.conf.d/qt5pi.conf sudo ldconfig
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