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
- 「$ 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 - 「$ 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. - 「$ 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で使用できるように設定します。
- まず上記のサイトからフォント「Rounded M+」をダウンロードします(私は「Rounded M+ (標準) : rounded-mplus-20150529.7z (15.2 MB)」をダウンロードしました)。
- ダウンロードしたフォントを解凍して、すべてのファイルをディレクトリ「/usr/local/qt5/lib/fonts」にコピーします。
- 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メモリに保存されるようになります。