「インストール - Qt5」の版間の差分

ナビゲーションに移動 検索に移動
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>


案内メニュー