Raspberry Pi 3へQT5のインストール

Raspberry Pi 3へQT5をインストールしました。次の環境でインストールし、QTバージョンは、プログラム実行時に「qVersion()(戻り値が文字列のQTのバージョン)」を使用して取得しました。

  • Raspbian Jessie Release date:2017-01-11
  • QT version : 5.8.1

Raspberry Pi 3でQT5をコンパイルするには、16GB程度のMicroSDカードを必要とします。あるいは、別のMicroSDカードをマウントして、そちらにQT5のコンパイル環境を構築します(この方法についてはこの記事の最後に記載します)。QT5のコンパイルには、ソースコードの取得を含めると5時間前後の時間がかかります。パソコンからSSHでRaspberry Pi 3と接続している場合は、パソコンの電源が落とせなくなるので、Raspberry Piをスタンドアロンで実行することをお勧めします。

QT5のコンパイル環境の構築

次のコマンドによりRaspbianをアップデートし、QT5をコンパイルするライブラリ等をインストールします。
※注意 2018/03/02 次の環境で次の理由により、すでにインストールできないライブラリがありました。ただし、これらのライブラリのインストールを完了しても、QT5のインストールが正常に完了しませんでした。「PyQt5をRaspberry Pi「stretch」にインストール」に従ってQT5をインストールしてください。

  • raspbian-stretch date:2017-11-29
  • QT version : 5.10.1
  1. 「$ sudo apt-get install libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad」
    E: Package ‘gstreamer0.10-plugins-bad’ has no installation candidate
    However the following packages replace it:
    gstreamer0.10-plugins-ugly gstreamer0.10-plugins-good gstreamer0.10-plugins-base
  2. 「$ sudo apt-get install libiodbc2-dev libmysqlclient-dev firebird-dev libpng12-dev libjpeg62-dev libgst-dev libxext-dev libxcb1 libxcb1-dev」
    E: Package ‘libmysqlclient-dev’ has no installation candidate
    libjpeg62-dev : Depends: libjpeg62 (= 1:6b2-2)
    E: Unable to correct problems, you have held broken packages.
  3. 「$ sudo apt-get install libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync0 libxcb-sync0-dev libxcb-render-util0」
    Note, selecting ‘libxcb-sync-dev’ instead of ‘libxcb-sync0-dev’
    E: Unable to locate package libxcb-sync0

更新したライブラリのインストール方法を次に示します。

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

QT5のソースコードの取得

最初にQT5のソースコードを取得します。ホームディレクトリにしてあります。

$ cd ~
$ sudo apt-get install git
$ git clone git://code.qt.io/qt/qt5.git

次に作成されたディレクトリ「qt5」に移動して、依存ファイルを取得します。

$ cd qt5
$ ./init-repository

QT5のコンパイル環境の構築

ここで、「./qtbase/configure」に対して編集する必要があるのですか、編集の対象となる変数・ラベルがないので今回は編集を行いませんでした。

次のコマンドでconfigします。途中経過はファイル「output」に出力されます。

$ ./configure -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 /usr/local/qt5 &> output

「output」への出力を次に示します。

Build options:
  Mode ................................... release; optimized tools
  Building shared libraries .............. yes
  Using C++ standard ..................... C++14
  Using gold linker ...................... yes
  Using new DTAGS ........................ yes
  Using precompiled headers .............. yes
  Using LTCG ............................. no
  Target compiler supports:
    NEON ................................. no
  Build parts ............................ libs
Qt modules and options:
  Qt Concurrent .......................... yes
  Qt D-Bus ............................... yes
  Qt D-Bus directly linked to libdbus .... no
  Qt Gui ................................. yes
  Qt Network ............................. yes
  Qt Sql ................................. yes
  Qt Testlib ............................. yes
  Qt Widgets ............................. yes
  Qt Xml ................................. yes
Support enabled for:
  Accessibility .......................... yes
  Using pkg-config ....................... no
  QML debugging .......................... yes
  udev ................................... yes
  Using system zlib ...................... yes
Qt Core:
  DoubleConversion ....................... yes
    Using system DoubleConversion ........ no
  GLib ................................... no
  iconv .................................. no
  ICU .................................... yes
  Logging backends:
    journald ............................. no
    syslog ............................... no
    slog2 ................................ no
  Using system PCRE ...................... no
Qt Network:
  getaddrinfo() .......................... yes
  getifaddrs() ........................... yes
  IPv6 ifname ............................ yes
  libproxy ............................... no
  OpenSSL ................................ yes
    Qt directly linked to OpenSSL ........ no
  SCTP ................................... no
  Use system proxies ..................... yes
Qt Sql:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. no
  OCI (Oracle) ........................... no
  ODBC ................................... no
  PostgreSQL ............................. yes
  SQLite2 ................................ yes
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... yes
Qt Gui:
  FreeType ............................... yes
    Using system FreeType ................ no
  HarfBuzz ............................... yes
    Using system HarfBuzz ................ no
  Fontconfig ............................. no
  Image formats:
    GIF .................................. yes
    ICO .................................. yes
    JPEG ................................. yes
      Using system libjpeg ............... no
    PNG .................................. yes
      Using system libpng ................ yes
  OpenGL:
    EGL .................................. yes
    Desktop OpenGL ....................... no
    OpenGL ES 2.0 ........................ yes
    OpenGL ES 3.0 ........................ no
    OpenGL ES 3.1 ........................ no
  Session Management ..................... yes
Features used by QPA backends:
  evdev .................................. yes
  libinput ............................... no
  mtdev .................................. no
  tslib .................................. no
  xkbcommon-evdev ........................ no
QPA backends:
  DirectFB ............................... no
  EGLFS .................................. yes
  EGLFS details:
    EGLFS i.Mx6 .......................... no
    EGLFS i.Mx6 Wayland .................. no
    EGLFS EGLDevice ...................... no
    EGLFS GBM ............................ no
    EGLFS Mali ........................... no
    EGLFS Raspberry Pi ................... yes
    EGL on X11 ........................... no
  LinuxFB ................................ yes
  Mir client ............................. no
  X11:
    Using system provided XCB libraries .. no
    EGL on X11 ........................... no
    Xinput2 .............................. yes
    XCB XKB .............................. no
    XLib ................................. yes
    Xrender .............................. yes
    XCB GLX .............................. yes
    XCB Xlib ............................. yes
    Using system-provided xkbcommon ...... no
Qt Widgets:
  GTK+ ................................... no
  Styles ................................. Fusion Windows
Qt PrintSupport:
  CUPS ................................... yes
Qt SerialBus:
  Socket CAN ............................. yes
  Socket CAN FD .......................... yes
QtXmlPatterns:
  XML schema support ..................... yes
Qt QML:
  QML interpreter ........................ yes
  QML network support .................... yes
Qt Quick:
  Direct3D 12 ............................ no
  AnimatedImage item ..................... yes
  Canvas item ............................ yes
  Support for Quick Designer ............. yes
  Flipable item .......................... yes
  GridView item .......................... yes
  ListView item .......................... yes
  Path support ........................... yes
  PathView item .......................... yes
  Positioner items ....................... yes
  ShaderEffect item ...................... yes
  Sprite item ............................ yes
Qt Gamepad:
  SDL2 ................................... no
Qt 3D:
  System Assimp .......................... no
Qt Wayland Client ........................ no
Qt Wayland Compositor .................... no
Qt Bluetooth:
  BlueZ .................................. no
  BlueZ Low Energy ....................... no
  Linux Crypto API ....................... no
Qt Sensors:
  sensorfw ............................... no
Qt Multimedia:
  ALSA ................................... yes
  GStreamer 1.0 .......................... no
  GStreamer 0.10 ......................... no
  Video for Linux ........................ yes
  OpenAL ................................. no
  PulseAudio ............................. no
  Resource Policy (libresourceqt5) ....... no
  DirectShow ............................. no
  Windows Media Foundation ............... no
Qt Location:
  Gypsy GPS Daemon ....................... no
  WinRT Geolocation API .................. no
Qt WebEngine:
  Proprietary Codecs ..................... no
  Spellchecker ........................... yes
  ALSA ................................... yes
  PulseAudio ............................. no

QT5のコンパイル

次のコマンドで取得したソースコードをコンパイルします。途中経過はファイル「output_make」に出力されます。

$ make -j 4 &> output_make

「output_make」への出力を次に示します。

           ...
ln -s libQt5NetworkAuth.so.5.8.1 libQt5NetworkAuth.so
ln -s libQt5NetworkAuth.so.5.8.1 libQt5NetworkAuth.so.5
ln -s libQt5NetworkAuth.so.5.8.1 libQt5NetworkAuth.so.5.8
rm -f ../../lib/libQt5NetworkAuth.so.5.8.1
mv -f libQt5NetworkAuth.so.5.8.1  ../../lib/ 
rm -f ../../lib/libQt5NetworkAuth.so
rm -f ../../lib/libQt5NetworkAuth.so.5
rm -f ../../lib/libQt5NetworkAuth.so.5.8
mv -f libQt5NetworkAuth.so ../../lib/ 
mv -f libQt5NetworkAuth.so.5 ../../lib/ 
mv -f libQt5NetworkAuth.so.5.8 ../../lib/ 
make[3]: Leaving directory '/home/pi/qt5/qtnetworkauth/src/oauth'
make[2]: Leaving directory '/home/pi/qt5/qtnetworkauth/src'
make[1]: Leaving directory '/home/pi/qt5/qtnetworkauth'

次のコマンドでコンパイルして作成されたライブラリ群が「/uer/loca/qt5」にインストールされます。途中経過はファイル「output_make_install」に出力されます。

$ sudo make install &> output_make_install

「output_make_install」への出力を次に示します。

                ...
install -m 644 -p /home/pi/qt5/qttranslations/translations/qtxmlpatterns_pl.qm /usr/local/qt5/translations/
install -m 644 -p /home/pi/qt5/qttranslations/translations/qtxmlpatterns_ru.qm /usr/local/qt5/translations/
install -m 644 -p /home/pi/qt5/qttranslations/translations/qtxmlpatterns_sk.qm /usr/local/qt5/translations/
install -m 644 -p /home/pi/qt5/qttranslations/translations/qtxmlpatterns_uk.qm /usr/local/qt5/translations/
make[2]: Leaving directory '/home/pi/qt5/qttranslations/translations'
make[1]: Leaving directory '/home/pi/qt5/qttranslations'
cd qtdoc/ && ( test -e Makefile || /home/pi/qt5/qtbase/bin/qmake -o Makefile /home/pi/qt5/qtdoc/qtdoc.pro ) && make -f Makefile install
make[1]: Entering directory '/home/pi/qt5/qtdoc'
cd doc/ && ( test -e Makefile || /home/pi/qt5/qtbase/bin/qmake -o Makefile /home/pi/qt5/qtdoc/doc/doc.pro ) && make -f Makefile install
make[2]: Entering directory '/home/pi/qt5/qtdoc/doc'
make[2]: Nothing to be done for 'install'.
make[2]: Leaving directory '/home/pi/qt5/qtdoc/doc'
make[1]: Leaving directory '/home/pi/qt5/qtdoc'
cd qtqa/ && ( test -e Makefile || /home/pi/qt5/qtbase/bin/qmake -o Makefile /home/pi/qt5/qtqa/qtqa.pro ) && make -f Makefile install
make[1]: Entering directory '/home/pi/qt5/qtqa'
make[1]: Nothing to be done for 'install'.
make[1]: Leaving directory '/home/pi/qt5/qtqa'

QT5のための環境変数の設定

次の環境変数を「.bashrc」の最後にエディタを使って設定します。

export LD_LIBRARY_PATH=/uer/local/qt5/lib/
export PATH=/usr/local/qt5/bin:$PATH

再起動します。

QTで使用するフォントの設定

フォント「Rounded M+」をQTで使用できるように設定します。

  1. まず上記のサイトからフォント「Rounded M+」をダウンロードします(私は「Rounded M+ (標準) : rounded-mplus-20150529.7z (15.2 MB)」をダウンロードしました)。
  2. ダウンロードしたフォントを解凍して、すべてのファイルをディレクトリ「/usr/local/qt5/lib/fonts」にコピーします。
  3. QTプログラムでフォントファミリを次のように指定します。
    QFont t_font;
    t_font.setFamily("Rounded M+ 1m");

これにより、丸ゴシックにした日本語アウトラインフォントが、QTで使用できるようになります。

別のMicroSDカードをマウントしてQT5のコンパイル環境の構築

8GBのMicroSDカード(OSをインストールしたMicroSDカードとは別)をカードリーダを用いてをUSBに差し込みます。Raspberry Pi 3は自動で認識し、私の環境では、/media/piにマウントされました、(USBフラッシュの名前をpiにしています)

$ cd /media/pi
$ sudo mkdir build
$ sudo chown pi /media/pi/build
$ cd
$ mkdir ~/opt
$ sudo mount –bind /media/pi/build ~/opt

このコンパイル環境で、タイトル「QT5のソースコードの取得」から操作を行います。ただし、ホームディレクトリでの作業でなく、ディレクトリ「opt」での作業となります。これでoptの中で作成したファイルは、外付けのUSBメモリに保存されるようになります。