Raspberry Pi 用 Qt 開発環境の構築(2017年9月版)

GUIフレームワーク Qt と、その開発環境 Qt Creator を Raspberry Pi 上で、実機ビルドします。

Qt のバージョンや Raspbian のバージョンなど、微妙な違いによって、少しでも条件が違うと失敗する可能性が高くなりますので、注意してください。

始める前に、下記ページをよく読んで、予習しておいてください。

本稿執筆時点での Qt の最新版は 5.9.1 です。5.9.2 のRCもありますが、ここでは前者を使用します。また、Qt Creator は 4.3.1 を使用します。

Raspberry Pi の準備

Raspberry Pi 2 または Raspberry Pi 3 を用意します。特に後者は安定した電源を用意するよう、注意してください。キーボードやマウスを接続する場合、セルフパワーUSBハブを使用することをお勧めします。失敗の要因をできるだけ下げるため、USBには必要最小限の機器だけ接続してください。

マイクロSDカードは32GB以上のものが必要です。Qtライブラリだけなら16GBで足りますが、Qt Creatorまでビルドするには、16GBを超えてしまいます。既に稼働中のRaspbian環境は使用せず、Qtのビルド専用SDカードを作成してください。

OS(Raspbian)のインストール

本稿執筆時点の Raspbian の最新は 2017-08-16-raspbian-stretch ですが、パッケージのバージョンの都合で、これは使用しません。ひとつ前のもの(stretchではなくjessieの最終版)を使用します。

http://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/2017-07-05-raspbian-jessie.zip

※ Raspbian/stretch環境でのビルド方法は、本稿執筆時点では不明です。時を改めて新しい記事を書く予定です。

スワップファイルを増量

Raspberry Pi のメモリは限られています。 Qt ライブラリをビルドするには数百MBのスワップ領域が必要です。標準では100MBですが、1GBに拡張します。

参考

スワップサービスを停止

$ sudo /etc/init.d/dphys-swapfile stop

スワップファイルの設定を変更

$ sudo nano /etc/dphys-swapfile

/etc/dphys-swapfile を編集(KB単位で設定)

CONF_SWAPSIZE=1024
スワップサービスを再開
$ sudo /etc/init.d/dphys-swapfile start

確認

$ free -h  

依存パッケージのインストール

pi@raspberry:~$ sudo apt-get update
pi@raspberry:~$ sudo apt-get upgrade 
pi@raspberry:~$ sudo apt-get install libfontconfig1-dev libdbus-1-dev libfreetype6-dev libudev-dev libicu-dev libsqlite3-dev libxslt1-dev libssl-dev libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad libraspberrypi-dev libpulse-dev libx11-dev libglib2.0-dev libcups2-dev freetds-dev libsqlite0-dev libpq-dev libiodbc2-dev libmysqlclient-dev firebird-dev libpng12-dev libjpeg9-dev libgst-dev libxext-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxi-dev libdrm-dev libssl-dev libxcb-xinerama0 libxcb-xinerama0-dev

Qt のビルド

作業ディレクトリはお好みで構いませんが、以降の説明では /home/pi/q で作業します。違うディレクトリを使用する場合は、適宜読み替えてください。

pi@raspberry:~$ mkdir q
pi@raspberry:~$ cd q
pi@raspberry:~/q$

ソースコードの取得

ソースをGitリポジトリからクローンし、v5.9.1をチェックアウトします。

pi@raspberry:~/q$ git clone git://code.qt.io/qt/qt5.git
pi@raspberry:~/q$ cd qt5
pi@raspberry:~/q/qt5$ git checkout v5.9.1

上記のcloneはすぐに終わりますが、実際のソースの取得は、下記のinit-repositoryで行います。これには通信環境にもよりますが約60分かかります。

pi@raspberry:~/q/qt5$ ./init-repository

ビルドの準備

Raspberry Pi 用に qtbase/configure を修正します。

pi@raspberry:~/q/qt5$ nano qtbase/configure
/home/pi/q/qt5/qtbase/configure

configureファイルの初めの方(#!/bin/shの直後あたり)に、下記の定義を追記します

QT_CFLAGS_DBUS="-I/usr/include/dbus-1.0/ -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include/"
QT_LIBS_DBUS=-ldbus-1
QT_CFLAGS_GLIB="-I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/"
QT_LIBS_GLIB=-lglib-2.0
QT_CFLAGS_PULSEAUDIO="-I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/"
QT_LIBS_PULSEAUDIO="-lpulse -lpulse-mainloop-glib"
QT_CFLAGS_GSTREAMER="-I/usr/include/gstreamer-0.10/ -I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/ -I/usr/include/libxml2/"
QT_LIBS_GSTREAMER=
QT_CFLAGS_FONTCONFIG=-I/usr/include/freetype2/   

configure します。これにはRaspberry Pi 3 で18分くらいかかります。

 

pi@raspberry:~/q/qt5$ ./configure -nomake tests -nomake examples -v -opengl desktop -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs -prefix /opt/Qt5.9.1
pi@raspberry:~/q/qt5$ ./configure -nomake tests -nomake examples -v -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=/usr/bin/ -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs -prefix /opt/Qt5.9.1-opengl-es2
 

ビルドする

make コマンドでビルドします。並列処理数を指定する -j オプションは 2 より大きい値を指定することは控えてください。もし、大きい数字を指定すると、大量のメモリスワップが発生し、かえって遅くなってしまいます。これにはRaspberry Pi 3 で6時間半くらいかかります。

pi@raspberry:~/q/qt5$ make -j2

モジュール qtscript をビルドします。

pi@raspberry:~/q/qt5$ make -j2 module-qtscript

インストールする

ファイル数が多いので7分くらいかかります。

pi@raspberry:~/q/qt5$ sudo make install  

作業ディレクトリに戻ります。

pi@raspberry:~/q/qt5$ cd ..
pi@raspberry:~/q$  

Qt Creator のビルド

Qtのインストール先を、環境変数PATHに追加します。

export PATH=/opt/Qt5.9.1/bin:$PATH

qmakeを実行して、バージョンを確認します。

pi@raspberry:~/q$ qmake -v
QMake version 3.1
Using Qt version 5.9.1 in /opt/Qt5.9.1/lib

botan のビルド

暗号ライブラリのbotanを取得し、release-1_10をチェックアウトします。

pi@raspberry:~/q$ git clone https://github.com/randombit/botan.git
pi@raspberry:~/q$ cd botan
pi@raspberry:~/q/botan$ git checkout release-1_10

botan_all.cpp と botan_all.h を作成します。

pi@raspberry:~/q/botan$ ./configure.py --gen-amalgamation

これらのファイルを作業ディレクトリにコピーします。 その際 _all は消します。

pi@raspberry:~/q/botan$ cp botan_all.cpp ../botan.cpp
pi@raspberry:~/q/botan$ cp botan_all.h ../botan.h
pi@raspberry:~/q/botan$ cd ..

botan.cppを修正します。

pi@beatrice:~/q$ nano botan.cpp 

includeの行を変更します。

#include "botan_all.h"

#include "botan.h"

ソースコードの取得

Qt Creator のソースコードを取得し、v.4.3.1をチェックアウトします。通信環境にもよりますが、5分くらいかかります。Qtの公式サイトには clone の際、 --recursive というオプションを付ける例が掲載されていますが、Qbsプラグインは使用しないので、このオプションは付けません。もし付けると、後のビルドの工程でエラーが出て失敗することがあります。

pi@raspberry:~/q$ git clone https://code.qt.io/qt-creator/qt-creator.git
pi@raspberry:~/q$ cd qt-creator
pi@raspberry:~/q/qt-creator$ git checkout v4.3.1

ビルドの準備

前述の工程で作成した botan.cpp / botan.h をコピーします。

pi@raspberry:~/q/qt-creator$ cd src/libs/3rdparty/botan
pi@raspberry:~/q/qt-creator/src/libs/3rdparty/botan$ cp ~/q/botan.cpp .
pi@raspberry:~/q/qt-creator/src/libs/3rdparty/botan$ cp ~/q/botan.h .

作業ディレクトリに戻ります。

pi@raspberry:~/q/qt-creator/src/libs/3rdparty/botan$ cd ~/q

ビルドディレクトリの作成、プロジェクトファイルの読み込み、メイクファイルの作成を行います。

pi@raspberry:~/q$ mkdir qt-creator-build
pi@raspberry:~/q$ cd qt-creator-build
pi@raspberry:~/q/qt-creator-build$ qmake ../qt-creator/qtcreator.pro
pi@raspberry:~/q/qt-creator-build$ make qmake_all

ビルドします

makeコマンドを実行します。前述の通り -j オプションは 2 より大きくしないことをおすすめします。これにはRasspberry Pi 3 で4時間半くらいかかります。

pi@raspberry:~/q/qt-creator-build$ make -j2

インストールします

pi@raspberry:~/q/qt-creator-build$ sudo make install INSTALL_ROOT=/opt/QtCreator4.3.1