|
|
| 847行目: |
847行目: |
|
| |
|
| ==== Qtライブラリのビルド ==== | | ==== Qtライブラリのビルド ==== |
| ここでは、Qtソフトウェアは~/Program/Qt_Embedded/QtSoftwareディレクトリ、qmake等のホストツールは~/Program/Qt_Embedded/Hostディレクトリ、<br>
| | ビルドおよびインストールされるQtライブラリは、以下に示すように2種類存在する。<br> |
| Qtライブラリは~/Program/Qt_Embedded/Target_EGLディレクトリまたは~/Program/Qt_Embedded/Target_XCBディレクトリとしている。<br>
| | * ホストPC向けQtライブラリ |
| | * ターゲットデバイス向けQtライブラリ |
| <br> | | <br> |
| <Raspberry Piのバージョン>は、Raspberry Piの種類に変更する。<br> | | Qt 5をクロスビルドおよびインストールする。<br> |
| <u>ただし、上記のセクションでmkspecを変更した場合は、そのディレクトリ名に合わせること。</u><br> | | Qt 5.8以降は、<code>-no-use-gold-linker</code>オプションを付加する必要がある。<br> |
| * Reaspberry Pi 3
| | # EGLFSの場合 |
| *: 上記のセクションで作成した<code>linux-rasp-pi-new-g++</code>
| | |
| | # ビルドディレクトリを作成 |
| | mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build |
| | |
| | export CROSS_PI_PATH=/<GCC ARMツールチェインのインストールディレクトリ> |
| | |
| | # Raspberry Pi OS 32ビットの場合 |
| | export CROSS_COMPILE=$CROSS_PI_PATH/bin/arm-linux-gnueabihf- |
| | |
| | # Raspberry Pi OS 64ビットの場合 |
| | export CROSS_COMPILE=$CROSS_PI_PATH/bin/aarch64-linux-gnu- |
| | |
| | # システムルードディレクトリの指定 |
| | export SYSTEMROOT=<Raspberry Pi OSのシステムルートディレクトリ> |
| | export PKG_CONFIG_SYSROOT_DIR=$SYSTEMROOT |
| | |
| | export PKG_CONFIG_PATH=$PKG_CONFIG_SYSROOT_DIR/usr/lib/pkgconfig:$PKG_CONFIG_SYSROOT_DIR/usr/lib/arm-linux-gnueabihf/pkgconfig |
| | export PKG_CONFIG_LIBDIR=$PKG_CONFIG_SYSROOT_DIR/usr/lib/pkgconfig:$PKG_CONFIG_SYSROOT_DIR/usr/lib/arm-linux-gnueabihf/pkgconfig:$PKG_CONFIG_SYSROOT_DIR/usr/share/pkgconfig |
| | |
| | ../qt-everywhere-src-5.15.13/configure -release \ |
| | -device linux-raspberrypi-new-g++ \ |
| | -device-option CROSS_COMPILE=$CROSS_COMPILE \ |
| | -opensource -confirm-license -v \ |
| | -opengl es2 -eglfs \ # <span style="color:#C00000"><u>EGLを使用する場合</u></span> |
| | -qpa eglfs \ # <span style="color:#C00000"><u>EGLを使用する場合</u></span> |
| | -nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all \ |
| | -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \ |
| | -sysroot $SYSTEMROOT \ |
| | -prefix /<Qtソフトウェアを配置するディレクトリ> \ |
| | -extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ> \ |
| | -hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ> \ |
| | -I$SYSTEMROOT/usr/include/arm-linux-gnueabihf \ # Raspberry Pi OS 32ビットの場合 |
| | -L$SYSTEMROOT/usr/lib/arm-linux-gnueabihf # Raspberry Pi OS 32ビットの場合 |
| | -I$SYSTEMROOT/usr/include/aarch64-linux-gnu \ # Raspberry Pi OS 64ビットの場合 |
| | -L$SYSTEMROOT/usr/lib/aarch64-linux-gnu # Raspberry Pi OS 64ビットの場合 |
| <br> | | <br> |
| Qt 5.8以降は、<code>-no-use-gold-linker</code>オプションを追加する必要がある。<br>
| | # XCBの場合 |
| <br>
| | |
| * QtBase / Qt Everywhere Opensource / GithubからダウンロードしたQt
| | # ビルドディレクトリを作成 |
| *: ビルドディレクトリの作成
| | mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build |
| *: <code>mkdir /<Qtのソースコードがあるディレクトリ>/../build && cd /<Qtのソースコードがあるディレクトリ>/../build</code>
| | |
| *: <br>
| | export CROSS_PI_PATH=/<GCC ARMツールチェインのインストールディレクトリ> |
| *: <u>GCC ARM 8.3.0以降を使用する場合は、以下の設定をターミナルで実行する。</u>
| | |
| *: <code>CROSS_PI_PATH=/<GCC ARMツールチェインのインストールディレクトリ></code>
| | # Raspberry Pi OS 32ビットの場合 |
| *: <code>CROSS_COMPILE=$CROSS_PI_PATH/bin/arm-linux-gnueabihf-</code>
| | export CROSS_COMPILE=$CROSS_PI_PATH/bin/arm-linux-gnueabihf- |
| *: <br>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/lib:$LD_LIBRARY_PATH</code>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/lib:$LD_LIBRARY_PATH</code>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib:$LD_LIBRARY_PATH</code>
| |
| *: <code>LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib:$LD_LIBRARY_PATH</code>
| |
| *: <br>
| |
| *: <code>LDFLAGS="-L$CROSS_PI_PATH/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib/"</code>
| |
| *: <br>
| |
| *: Configureスクリプトの実行
| |
| *: <u># Raspberry Pi 3B</u>
| |
| *: <code>PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \</code>
| |
| *: <code>PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \</code>
| |
| *: <code>../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \</code>
| |
| *: <code>-opengl es2 -eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-opengl es2 \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-device <Raspberry Piのバージョン> \</code>
| |
| *: <code>-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \</code>
| |
| *: <code>-opensource -confirm-license -v \</code>
| |
| *: <code>-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \</code>
| |
| *: <code>-ltcg -iconv \</code> # 必要な場合は指定する
| |
| *: <code>-qpa eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-qpa xcb \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \</code>
| |
| *: <code>-sysroot /<SysRootがあるディレクトリ>/sysroot \</code>
| |
| *: <code>-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \</code>
| |
| *: <code>-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \</code>
| |
| *: <code>-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host</code>
| |
| *: <code>-no-gcc-sysroot</code> <span style="color:#C00000"><u>GCC ARM 8.3.0以降を使用する場合</u></span>
| |
| *: <br>
| |
| *: <u># Raspberry Pi 4B</u>
| |
| *: <code>PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \</code>
| |
| *: <code>PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/usr/share/pkgconfig \</code>
| |
| *: <code>../<Qtのソースコードがあるディレクトリ>/qt-everywhere-src-<Qtのバージョン>/configure -release \</code>
| |
| *: <code>-opengl es2 -eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-opengl es2 \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-device <Raspberry Piのバージョン> \</code>
| |
| *: <code>-device-option CROSS_COMPILE=/<GCC ARMツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf- \</code>
| |
| *: <code>-opensource -confirm-license -v \</code>
| |
| *: <code>-nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all -pkg-config \</code>
| |
| *: <code>-ltcg -iconv -fontconfig -ccache \</code> # 必要な場合は指定する
| |
| *: <code>-qpa eglfs \</code> <span style="color:#C00000"><u>EGLを使用する場合</u></span>
| |
| *: <code>-qpa xcb \</code> <span style="color:#C00000"><u>XCBを使用する場合</u></span>
| |
| *: <code>-skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \</code>
| |
| *: <code>-sysroot /<SysRootがあるディレクトリ>/sysroot \</code>
| |
| *: <code>-prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \</code>
| |
| *: <code>-extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \</code>
| |
| *: <code>-hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host</code>
| |
| *: <code>-no-gcc-sysroot</code> <span style="color:#C00000"><u>GCC ARM 8.3.0以降を使用する場合</u></span>
| |
| *: <code>-I/<SysRootがあるディレクトリ>/sysroot/usr/include/arm-linux-gnueabihf \</code> # GCC ARM 8.3.0以降を使用する場合に必要(不要の可能性があるため要調査)
| |
| *: <code>-L/<SysRootがあるディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf \</code> # GCC ARM 8.3.0以降を使用する場合に必要(不要の可能性があるため要調査)
| |
| *: <br>
| |
| *: ビルドおよびインストール
| |
| *: <code>gmake -j $(nproc)</code>
| |
| *: <code>gmake install</code>
| |
| *: <br>
| |
| *: <u>もし、Linux PCで使用するQtライブラリを配置するディレクトリにrccファイルが存在しない場合は、rccファイルをQtライブラリのbinディレクトリにコピーする。</u><br>
| |
| *: (Qtライブラリを使用するソフトウェアをビルドする時、rccファイルが必要である)<br>
| |
| *: <code>cp /<Qtのソースコードがあるディレクトリ>/qtbase/bin/rcc /<Linux PCで使用するQtライブラリを配置するディレクトリ>/bin</code>
| |
| <br>
| |
| 必要ならば、以下のようなシェルスクリプトを作成すると便利である。<br>
| |
| <syntaxhighlight lang="bash">
| |
| #!/usr/bin/env sh
| |
| | | |
| CROSS_PI_PATH=/<GCC ARM 8.3.0以降のインストールディレクトリ> | | # Raspberry Pi OS 64ビットの場合 |
| CROSS_COMPILE=$CROSS_PI_PATH/bin/arm-linux-gnueabihf- | | export CROSS_COMPILE=$CROSS_PI_PATH/bin/aarch64-linux-gnu- |
| | | |
| LD_LIBRARY_PATH=$CROSS_PI_PATH/lib:$LD_LIBRARY_PATH | | # システムルードディレクトリの指定 |
| LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/lib:$LD_LIBRARY_PATH | | export SYSTEMROOT=<Raspberry Pi OSのシステムルートディレクトリ> |
| LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib:$LD_LIBRARY_PATH | | export PKG_CONFIG_SYSROOT_DIR=$SYSTEMROOT |
| LD_LIBRARY_PATH=$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib:$LD_LIBRARY_PATH
| |
| | | |
| LDFLAGS="-L$CROSS_PI_PATH/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/usr/lib/ -L$CROSS_PI_PATH/arm-linux-gnueabihf/libc/lib/" | | export PKG_CONFIG_PATH=$PKG_CONFIG_SYSROOT_DIR/usr/lib/pkgconfig:$PKG_CONFIG_SYSROOT_DIR/usr/lib/arm-linux-gnueabihf/pkgconfig |
| | export PKG_CONFIG_LIBDIR=$PKG_CONFIG_SYSROOT_DIR/usr/lib/pkgconfig:$PKG_CONFIG_SYSROOT_DIR/usr/lib/arm-linux-gnueabihf/pkgconfig:$PKG_CONFIG_SYSROOT_DIR/usr/share/pkgconfig |
| | | |
| PKG_CONFIG_PATH="/<SysRootがあるディレクトリ>/usr/lib/pkgconfig:/<SysRootがあるディレクトリ>/usr/lib/arm-linux-gnueabihf/pkgconfig" \ | | ../qt-everywhere-src-5.15.13/configure -release \ |
| PKG_CONFIG_LIBDIR=/<SysRootがあるディレクトリ>/sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig:/<SysRootがあるディレクトリ>/sysroot/usr/share/pkgconfig \
| | -device linux-raspberrypi-new-g++ \ |
| ../Qt5_Src/configure -release \
| | -device-option CROSS_COMPILE=$CROSS_COMPILE \ |
| -opengl es2 -eglfs \ # EGLを使用する場合 | | -opensource -confirm-license -v \ |
| -opengl es2 \ # XCBを使用する場合
| | -opengl es2 \ # <span style="color:#C00000"><u>XCBを使用する場合</u></span> |
| -device <Raspberry Piのバージョン> -device-option CROSS_COMPILE=${CROSS_COMPILE} \ | | -qpa xcb \ # <span style="color:#C00000"><u>XCBを使用する場合</u></span> |
| -sysroot /<SysRootがあるディレクトリ>/sysroot \
| |
| -opensource -confirm-license -v \ | |
| -nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all \ | | -nomake examples -no-compile-examples -nomake tests -make libs -no-use-gold-linker -recheck-all \ |
| -ccache -ltcg -iconv -sctp -freetype \ # 必要な場合は指定する | | -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \ |
| -skip qtscript -skip qtwayland -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras \
| | -sysroot $SYSTEMROOT \ |
| -qpa eglfs \ # EGLを使用する場合 | | -prefix /<Qtソフトウェアを配置するディレクトリ> \ |
| -qpa xcb \ # XCBを使用する場合
| | -extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ> \ |
| -prefix /<Qtソフトウェアを配置するディレクトリ>/QtSoftware \ | | -hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ> \ |
| -extprefix /<Raspberry PiにインストールするQtライブラリを配置するディレクトリ>/Target \ | | -I$SYSTEMROOT/usr/include/arm-linux-gnueabihf \ # Raspberry Pi OS 32ビットの場合 |
| -hostprefix /<Linux PCで使用するQtライブラリを配置するディレクトリ>/Host \ | | -L$SYSTEMROOT/usr/lib/arm-linux-gnueabihf # Raspberry Pi OS 32ビットの場合 |
| -no-gcc-sysroot # GCC ARM 8.3.0以降を使用する場合 | | -I$SYSTEMROOT/usr/include/aarch64-linux-gnu \ # Raspberry Pi OS 64ビットの場合 |
| </syntaxhighlight> | | -L$SYSTEMROOT/usr/lib/aarch64-linux-gnu # Raspberry Pi OS 64ビットの場合 |
| | <br> |
| | # 共通 |
| | gmake -j $(nproc) |
| | gmake install |
| | <br> |
| | <u>もし、Linux PCで使用するQtライブラリを配置するディレクトリにrccファイルが存在しない場合は、rccファイルをQtライブラリのbinディレクトリにコピーする。</u><br> |
| | これは、Qtライブラリを使用するプログラムをビルドする場合は、rccファイルが必要となるためである。<br> |
| | cp /<Qtのソースコードがあるディレクトリ>/qtbase/bin/rcc /<ホストPCで使用するQtライブラリを配置するディレクトリ>/bin |
| <br> | | <br> |
|
| |
|