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メモリに保存されるようになります。