📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == Raspberry Piにおいて、一般的なデスクトップソフトウェアのクロスコンパイルおよび組み込み / デバイス作成のユースケースのクロスコンパイルを行う手順を記載する。<br> <br> 組み込み / デバイス作成とは、デスクトップソフトウェアをX11の下で実行するためのものではなく、<br> ソフトウェアがBroadcomドライバを使用して、dispmanx / EGLの上で…」
 
 
(同じ利用者による、間の31版が非表示)
8行目: 8行目:
<u>一般的なデスクトップウインドウで起動する場合はXCBを使用する必要があるが、XCBはOpenGLやQt Quickは動作しないことに注意すること。</u><br>
<u>一般的なデスクトップウインドウで起動する場合はXCBを使用する必要があるが、XCBはOpenGLやQt Quickは動作しないことに注意すること。</u><br>
<br>
<br>
<u>このページでは、Raspberry Pi OS Bullseye / Bookwarmをインストールしていることを想定している。</u><br>
<u>このページでは、Raspberry Pi OS Bullseye / Bookwormをインストールしていることを想定している。</u><br>
<br>
<u>※注意</u><br>
<u>Raspberry Pi OS Bullseye以降は、画面を描画するためのVCドライバは存在しない。</u><br>
<u>もし、VCドライバが必要な場合は、Raspbian OS Busterを使用すること。(非推奨)</u><br>
<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|-
! colspan="3" style="background-color:#44CC99;" | 参考書
|- style="text-align: center;"
| <center><html><a href="https://www.amazon.co.jp/Mastering-Qt-stunning-cross-platform-applications-ebook/dp/B07DH9YK9Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-1&linkCode=ll1&tag=presire2-22&linkId=2118a0260e6e51aa7f7440827dee4266&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/71ZdxoixPvL._SL1500_.jpg" ></a></html><br>[https://www.amazon.co.jp/Mastering-Qt-stunning-cross-platform-applications-ebook/dp/B07DH9YK9Q?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-1&linkCode=ll1&tag=presire2-22&linkId=2118a0260e6e51aa7f7440827dee4266&language=ja_JP&ref_=as_li_ss_tl Mastering Qt 5<br>C++, Qt Widgets, QMLを使用したクロスプラットフォームアプリケーションの作成]</center>
| <center><html><a href="https://www.amazon.co.jp/Hands-Mobile-Embedded-Development-Raspberry-ebook/dp/B07RH6QM95?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-6&linkCode=ll1&tag=presire2-22&linkId=fabbe4470bf7cb690cadc2cf00e7af96&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/91V16o+L03L._SL1500_.jpg" ></a></html><br>[https://www.amazon.co.jp/Hands-Mobile-Embedded-Development-Raspberry-ebook/dp/B07RH6QM95?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-6&linkCode=ll1&tag=presire2-22&linkId=fabbe4470bf7cb690cadc2cf00e7af96&language=ja_JP&ref_=as_li_ss_tl Hands-On Mobile and Embedded Development with Qt 5<br>C++/QtでAndroid, iOS, Raspberry Pi用のアプリケーションを作成]</center>
| <center><html><a href="https://www.amazon.co.jp/Qt5-GUI-Programming-Cookbook-cross-platform/dp/1789803829?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-14&linkCode=ll1&tag=presire2-22&linkId=981d01e080c07e69b683bbd3eee91fd9&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/717s6aji8ZL._SL1360_.jpg" ></a></html><br>[https://www.amazon.co.jp/Qt5-GUI-Programming-Cookbook-cross-platform/dp/1789803829?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=29KSQHSJC9DB3&keywords=Qt+5&qid=1667806384&qu=eyJxc2MiOiIwLjAwIiwicXNhIjoiMC4wMCIsInFzcCI6IjAuMDAifQ%3D%3D&sprefix=qt+5%2Caps%2C196&sr=8-14&linkCode=ll1&tag=presire2-22&linkId=981d01e080c07e69b683bbd3eee91fd9&language=ja_JP&ref_=as_li_ss_tl Qt5 C++ GUI Programming Cookbook<br>Qt5でクロスプラットフォームのアプリケーションの作成]</center>
|}
</center>
<br><br>
<br><br>


105行目: 120行目:
<code>build-dep</code>コマンドとは、ビルドに必要なパッケージが全てインストールするコマンドである。<br>
<code>build-dep</code>コマンドとは、ビルドに必要なパッケージが全てインストールするコマンドである。<br>
ビルド設定によっては、不要なパッケージも含まれている。<br>
ビルド設定によっては、不要なパッケージも含まれている。<br>
# Raspberry Pi OS Bullseye
<br>
<u>※注意</u><br>
<u>Raspberry Pi 4BでQt 5.15を実行するには、KMSを使用する必要がある。</u><br>
<u>libgles2-mesa-devおよびlibgbm-devがインストールされていることを確認すること。</u><br>
<br>
* Raspberry Pi OS Bullseye
  ## EGLを使用する場合
  ## EGLを使用する場合
  sudo apt install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-dev \
  sudo apt install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-dev             \
                   libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                   libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                   libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
                   libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev                             \
                   libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
                   libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev     \
                   libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \
                  libssl-dev libssl1.0-dev libnss3-dev                                                              \  
                  libxcb-xinerama0 libxcb-xinerama0-dev gdbserver
                   libfontconfig1-dev libdbus-1-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev           \
                   python2 libpython2.7 # QtQuickを使用する場合
                  libgles2-mesa-dev libxcb-xinerama0 libxcb-xinerama0-dev gdbserver
                   libgtk-3-dev         # QtWidget向けにGTKネイティブテーマを使用する場合
                   python2 libpython2.7         # QtQuickを使用する場合
                   libraspberrypi-dev   # 32ビットOSを使用する場合
                   libgtk-3-dev                 # QtWidget向けにGTKネイティブテーマを使用する場合
                   libraspberrypi-dev           # Raspberry Pi 3B / 3B+の場合、かつ、Raspberry Pi OS 32ビットを使用する場合
                  libgles2-mesa-dev libgbm-dev  # Raspberry Pi 4Bを使用する場合
   
   
  ## XCBを使用する場合
  ## XCBを使用する場合
  sudo apt install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-dev \
  sudo apt install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-dev             \
                   libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                   libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                   libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev \
                   libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev                             \
                   libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev \
                   libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol1-dev libwacom-dev     \
                   libfontconfig1-dev libdbus-1-dev libnss3-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev libgles2-mesa-dev \
                   libfontconfig1-dev libdbus-1-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev           \
                   libxcb-xinerama0 libxcb-xinerama0-dev gdbserver \
                  libssl-dev libssl1.0-dev libnss3-dev                                                               \
                   libgles2-mesa-dev libxcb-xinerama0 libxcb-xinerama0-dev                                                 \
                   libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev \
                   libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev \
                   libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev \
                   libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev         \
                   libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \
                   libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \
                   libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev \
                   libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev         \
                   libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev  
                   libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev  
                   python2 libpython2.7  # QtQuickを使用する場合
                   python2 libpython2.7         # QtQuickを使用する場合
                   libgtk-3-dev         # QtWidget向けにGTKネイティブテーマを使用する場合
                  libgtk-3-dev                  # QtWidget向けにGTKネイティブテーマを使用する場合
                   libraspberrypi-dev   # 32ビットOSを使用する場合
                  libraspberrypi-dev            # Raspberry Pi 3B / 3B+の場合、かつ、Raspberry Pi OS 32ビットを使用する場合
                  libgles2-mesa-dev libgbm-dev # Raspberry Pi 4Bを使用する場合
<br>
* Raspberry Pi OS Bookworm
## EGLを使用する場合
sudo apt install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-dev            \
                  libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                  libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev                            \
                  libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol-dev libwacom-dev      \
                  libfontconfig1-dev libdbus-1-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev          \
                  libssl-dev libssl1.0-dev libnss3-dev gdbserver                                                    \
                  libgles2-mesa-dev libxcb-xinerama0 libxcb-xinerama0-dev
                   libgtk-3-dev                 # QtWidget向けにGTKネイティブテーマを使用する場合
                   libraspberrypi-dev           # Raspberry Pi 3B / 3B+の場合、かつ、Raspberry Pi OS 32ビットを使用する場合
                  libgles2-mesa-dev libgbm-dev  # Raspberry Pi 4Bを使用する場合
   
   
## XCBを使用する場合
sudo apt install ccache libicu-dev icu-devtools libsctp1 libsctp-dev libzstd1 libzstd-dev libhidapi-dev            \
                  libinput-bin libinput-dev libts0 libts-bin libts-dev libmtdev1 libmtdev-dev libevdev2 libevdev-dev \
                  libblkid-dev libffi-dev libglib2.0-dev libglib2.0-dev-bin libmount-dev                            \
                  libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libselinux1-dev libsepol-dev libwacom-dev      \
                  libfontconfig1-dev libdbus-1-dev libxkbcommon-dev libjpeg-dev libasound2-dev libudev-dev          \
                  libssl-dev libssl1.0-dev libnss3-dev gdbserver                                                    \
                  libgles2-mesa-dev libxcb-xinerama0 libxcb-xinerama0-dev                                                \
                  libx11-dev libxcb1-dev libxext-dev libxi-dev libxcomposite-dev libxcursor-dev libxtst-dev libxrandr-dev \
                  libfreetype6-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev          \
                  libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \
                  libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev        \
                  libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev libfontconfig1-dev
                  libgtk-3-dev                  # QtWidget向けにGTKネイティブテーマを使用する場合
                  libraspberrypi-dev            # Raspberry Pi 3B / 3B+の場合、かつ、Raspberry Pi OS 32ビットを使用する場合
                  libgles2-mesa-dev libgbm-dev  # Raspberry Pi 4Bを使用する場合
<br>
# その他
  sudo apt build-dep libqt5webengine-data  # WebEngineを使用する場合
  sudo apt build-dep libqt5webengine-data  # WebEngineを使用する場合
  sudo apt build-dep libqt5webkit5        # WebKitを使用する場合
  sudo apt build-dep libqt5webkit5        # WebKitを使用する場合
151行目: 206行目:
| コーデック || libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libx265-dev ||
| コーデック || libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libx265-dev ||
|-
|-
| マルチメディア || libgstreamer1.0-0 libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base<br>gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad<br>libgstreamer-plugins-bad1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-tools<br>gstreamer1.0-alsa gstreamer1.0-x gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5<br>libwayland-dev(Wayland開発パッケージは、gstreamerヘッダで必要) ||  
| マルチメディア || libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good<br>gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad libgstreamer-plugins-bad1.0-dev gstreamer1.0-pulseaudio<br>gstreamer1.0-tools gstreamer1.0-alsa<br>libwayland-dev (Wayland開発パッケージは、gstreamerヘッダで必要) ||
|-
|-
| ALSAオーディオ || libasound2-dev ||  
| ALSAオーディオ || libasound2-dev ||  
192行目: 247行目:
以下の設定により、<code>rsync</code>コマンドは、必要に応じてスーパユーザ権限で実行される。<br>
以下の設定により、<code>rsync</code>コマンドは、必要に応じてスーパユーザ権限で実行される。<br>
  echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
  echo "$USER ALL=NOPASSWD:$(which rsync)" | sudo tee --append /etc/sudoers
<br><br>
== EGLFSを使用する場合 ==
<u>この設定は不要の可能性が高い。</u><br>
<br>
Raspberry Pi OS Bullseye以降、Broadcommグラフィックライブラリ (/opt/vcディレクトリ) は存在しない。<br>
もし、brcmEGLライブラリ等が必要な場合は、手動でビルドおよびインストールする必要がある。<br>
git clone https://github.com/raspberrypi/userland
cd userland
<br>
Broadcommグラフィックライブラリをビルドおよびインストールする。<br>
./buildme
<br>
/opt/vcディレクトリにBroadcommグラフィックライブラリがインストールされているかどうかを確認する。<br>
<br><br>
<br><br>


217行目: 286行目:


== Qtライブラリのダウンロード ==
== Qtライブラリのダウンロード ==
===== Raspberry Pi 3B /4B 共通 =====
まず、Qtライブラリのソースコードをダウンロードする。<br>
まず、Qtライブラリのソースコードをダウンロードする。<br>
<br>
<br>
228行目: 296行目:
*: <code>git clone https://github.com/qt/qtbase -b <Qtのバージョン></code>
*: <code>git clone https://github.com/qt/qtbase -b <Qtのバージョン></code>
*: <br>
*: <br>
* Qt Everywhere Opensourceをビルドする場合
* Qt Everywhere Opensourceをビルドする場合<br>https://download.qt.io/archive/qt/
*: <code>wget https://download.qt.io/official_releases/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz</code>
*: <code>wget https://download.qt.io/archive/qt/x.x/x.x.x/single/qt-everywhere-src-x.x.x.tar.xz</code>
*: <code>tar xf qt-everywhere-opensource-src-x.x.x.tar.gz</code>
*: <code>tar xf qt-everywhere-opensource-src-x.x.x.tar.gz</code>
*: <code>cd qt-everywhere-opensource-src-x.x.x</code>
*: <code>cd qt-everywhere-opensource-src-x.x.x</code>
244行目: 312行目:
*: <code>./init-repository --module-subset=essential</code>
*: <code>./init-repository --module-subset=essential</code>
*: <br>
*: <br>
<br>
<br><br>
 
== デバイス定義ファイルの作成 ==
==== EGLFSを使用する場合 ====
==== EGLFSを使用する場合 ====
qmake.confを作成する。<br>
qmake.confを作成する。<br>
252行目: 322行目:
  vi qmake.conf
  vi qmake.conf
<br>
<br>
<syntaxhighlight lang="make">
  # qmake.confファイル
  # qmake.confファイル
   
   
282行目: 353行目:
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
   
   
  # Raspberry Pi 4Bの場合
  # Raspberry Pi 4B 32ビットOSを使用する場合
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8
# Raspberry Pi 4B 64ビットOSを使用する場合
QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72
   
   
  QMAKE_CFLAGS            = $${COMPILER_FLAGS}
  QMAKE_CFLAGS            = $${COMPILER_FLAGS}
311行目: 385行目:
   
   
  load(qt_config)
  load(qt_config)
</syntaxhighlight>
<br>
次に、デバイス定義ファイルのヘッダファイルを作成する。<br>
vi qplatformdefs.h
<br>
<syntaxhighlight lang="c++">
# qplatformdefs.hファイル
#include "../../linux-g++/qplatformdefs.h"
</syntaxhighlight>
<br>
<br>
==== XCBを使用する場合 ====
==== XCBを使用する場合 ====
319行目: 403行目:
  vi qmake.conf
  vi qmake.conf
<br>
<br>
<syntaxhighlight lang="make">
  # qmake.confファイル
  # qmake.confファイル
   
   
349行目: 434行目:
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
   
   
  # Raspberry Pi 4Bの場合
  # Raspberry Pi 4B 32ビットOSを使用する場合
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8
  QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8
# Raspberry Pi 4B 64ビットOSを使用する場合
QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a72
   
   
  QMAKE_CFLAGS            = $${COMPILER_FLAGS}
  QMAKE_CFLAGS            = $${COMPILER_FLAGS}
374行目: 462行目:
   
   
  load(qt_config)
  load(qt_config)
</syntaxhighlight>
<br>
次に、デバイス定義ファイルのヘッダファイルを作成する。<br>
vi qplatformdefs.h
<br>
<syntaxhighlight lang="c++">
# qplatformdefs.hファイル
#include "../../linux-g++/qplatformdefs.h"
</syntaxhighlight>
<br><br>
<br><br>


== Qtライブラリのビルド ==
== Qtライブラリのクロスビルド ==
ビルドおよびインストールされるQtライブラリは、以下に示すように2種類存在する。<br>
ビルドおよびインストールされるQtライブラリは、以下に示すように2種類存在する。<br>
* ホストPC向けQtライブラリ
* ホストPC向けQtライブラリ
383行目: 481行目:
Qt 5をクロスビルドおよびインストールする。<br>
Qt 5をクロスビルドおよびインストールする。<br>
Qt 5.8以降は、<code>-no-use-gold-linker</code>オプションを付加する必要がある。<br>
Qt 5.8以降は、<code>-no-use-gold-linker</code>オプションを付加する必要がある。<br>
<syntaxhighlight lang="sh">
  # EGLFSの場合
  # EGLFSの場合
   
   
403行目: 502行目:
  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
  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  \
  ../qt-everywhere-src-5.15.x/configure -release  \
  -device linux-raspberrypi-new-g++                      \
  -device linux-raspberrypi-new-g++                      \
  -device-option CROSS_COMPILE=$CROSS_COMPILE            \
  -device-option CROSS_COMPILE=$CROSS_COMPILE            \
  -opensource -confirm-license -v                        \
  -opensource -confirm-license -v                        \
  -opengl es2 -eglfs                                      \  # <span style="color:#C00000"><u>EGLを使用する場合</u></span>
  -opengl es2 -eglfs                                      \  # EGLを使用する場合
  -qpa eglfs                                              \  # <span style="color:#C00000"><u>EGLを使用する場合</u></span>
  -qpa eglfs                                              \  # EGLを使用する場合
  -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 \
  -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras                    \
  -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras                    \
419行目: 518行目:
  -I$SYSTEMROOT/usr/include/aarch64-linux-gnu                    \  # Raspberry Pi OS 64ビットの場合
  -I$SYSTEMROOT/usr/include/aarch64-linux-gnu                    \  # Raspberry Pi OS 64ビットの場合
  -L$SYSTEMROOT/usr/lib/aarch64-linux-gnu                            # Raspberry Pi OS 64ビットの場合
  -L$SYSTEMROOT/usr/lib/aarch64-linux-gnu                            # Raspberry Pi OS 64ビットの場合
</syntaxhighlight>
<br>
<br>
<syntaxhighlight lang="sh">
  # XCBの場合
  # XCBの場合
   
   
440行目: 541行目:
  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
  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  \
  ../qt-everywhere-src-5.15.x/configure -release  \
  -device linux-raspberrypi-new-g++                      \
  -device linux-raspberrypi-new-g++                      \
  -device-option CROSS_COMPILE=$CROSS_COMPILE            \
  -device-option CROSS_COMPILE=$CROSS_COMPILE            \
  -opensource -confirm-license -v                        \
  -opensource -confirm-license -v                        \
  -opengl es2                                            \  # <span style="color:#C00000"><u>XCBを使用する場合</u></span>
  -opengl es2                                            \  # XCBを使用する場合
  -qpa xcb                                                \  # <span style="color:#C00000"><u>XCBを使用する場合</u></span>
  -qpa xcb                                                \  # XCBを使用する場合
-no-feature-eglfs_brcm                                  \  # XCBを使用する場合
  -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 \
  -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras                    \
  -skip qtwebengine -skip qtandroidextras -skip qtmacextras -skip qtwinextras                    \
456行目: 558行目:
  -I$SYSTEMROOT/usr/include/aarch64-linux-gnu                    \  # Raspberry Pi OS 64ビットの場合
  -I$SYSTEMROOT/usr/include/aarch64-linux-gnu                    \  # Raspberry Pi OS 64ビットの場合
  -L$SYSTEMROOT/usr/lib/aarch64-linux-gnu                            # Raspberry Pi OS 64ビットの場合
  -L$SYSTEMROOT/usr/lib/aarch64-linux-gnu                            # Raspberry Pi OS 64ビットの場合
</syntaxhighlight>
<br>
<br>
<syntaxhighlight lang="sh">
  # 共通
  # 共通
  gmake -j $(nproc)
  gmake -j $(nproc)
  gmake install
  gmake install
</syntaxhighlight>
<br>
<br>
<u>もし、Linux PCで使用するQtライブラリを配置するディレクトリにrccファイルが存在しない場合は、rccファイルをQtライブラリのbinディレクトリにコピーする。</u><br>
<u>もし、Linux PCで使用するQtライブラリを配置するディレクトリにrccファイルが存在しない場合は、rccファイルをQtライブラリのbinディレクトリにコピーする。</u><br>
542行目: 647行目:
<br><br>
<br><br>


== EGL / XCB 共通 ==
== Qtライブラリを個別にインストールする場合 ==
Qtソフトウェアのサンプルをダウンロードする。<br>
Qtライブラリを個別にインストールする場合は、ライブラリを個別にダウンロードしてインストールする。<br>
この時、<Qtソフトウェアのサンプル>と<Qtのバージョン>は合致するものを指定すること。<br>
<Qtライブラリ>と<Qtのバージョン>は合致するものを指定すること。<br>
  git clone git://code.qt.io/qt/<Qtソフトウェアのサンプル>.git -b <Qtのバージョン>
  git clone https://github.com/qt/<Qtライブラリ名>.git -b <Qtのバージョン>
# または
git clone https://code.qt.io/cgit/qt/<Qtライブラリ名>.git -b <Qtのバージョン>
   
   
  cd <Qtソフトウェアのサンプル>
  cd <Qtライブラリ名>
   
   
  ~/Program/Qt_Embedded/Qt5/bin/qmake
  ~/Program/Qt_Embedded/Qt5/bin/qmake
  make -j $(nproc)
  make -j $(nproc)
  make install DESTDIR=<Qtソフトウェアを配置するディレクトリ>
  make install
<br>
<br>
最後に、QtソフトウェアをRaspberry Piにデプロイする。<br>
QtライブラリをRaspberry Piにデプロイする。<br>
  rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" /<Qtソフトウェアを配置するディレクトリ> \
  rsync -avz --rsh="ssh -p <ポート番号> -i <秘密鍵のフルパス>" /<Qtライブラリを配置するディレクトリ> \
<Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/<Qtソフトウェアをインストールするディレクトリ>
      <Raspberry Piのユーザ名>@<Raspberry Piのホスト名またはIPアドレス>:/home/<Raspberry Piのユーザ名>/<Qtライブラリをインストールするディレクトリ>
<br><br>
<br><br>


== エラー関連 ==
== エラー関連 ==
==== libEGL warning: DRI2: failed to authenticate ====
==== ビルドエラー : QtBase ====
Qt 5のビルドにおいて、以下に示すようなエラーが表示される場合がある。<br>
qt-everywhere-src-5.15.x/qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/qeglfsbrcmintegration.cpp:74:5: Error: »EGL_DISPMANX_WINDOW_T« was not declared in this scope
      EGL_DISPMANX_WINDOW_T *eglWindow = new EGL_DISPMANX_WINDOW_T;
<br>
この時、QtGuiモジュール内のBRCMテストを修正することにより、コンパイルすることができる。<br>
vi /<Qt 5のソースコードディレクトリ>/qtbase/src/gui/configure.json
<br>
<syntaxhighlight lang="json">
# /<Qt 5のソースコードディレクトリ>/qtbase/src/gui/configure.jsonファイル
# 編集前
"main": "vc_dispmanx_display_open(0);"
# 編集後
"main": [
    "vc_dispmanx_display_open(0);",
    "EGL_DISPMANX_WINDOW_T *eglWindow = new EGL_DISPMANX_WINDOW_T;"
]
</syntaxhighlight>
<br>
==== GCC 11以降を使用する場合 ====
GCC 11以降のツールチェーンを使用する場合、Qt 5.15のビルド時において、以下に示すエラーが発生する場合がある。<br>
error: 'numeric_limits' is not a member of 'std'  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
error: expected primary-expression before '>' token  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
error: '::max' has not been declared; did you mean 'std::max'?  static_cast<quint16>(numbers.size()) : std::numeric_limits<quint16>::max();
<br>
これは、std::limitsが削除されて、limits.hファイルに移行されたからである。<br>
もし、GCC 11以降を使用してQt 5.15をビルドする場合は、qt-everywhere-src-5.15.x/qtbase/src/corelib/global/qglobal.hファイルを、以下に示すように編集する。<br>
vi qt-everywhere-src-5.15.x/qtbase/src/corelib/global/qglobal.h
<br>
<syntaxhighlight lang="c++">
// qt-everywhere-src-5.15.x/qtbase/src/corelib/global/qglobal.hファイル
// 45〜48行目あたり
// 編集前
#ifdef __cplusplus
#  include <type_traits>
#  include <cstddef>
#  include <utility>
#endif
// 編集後
#ifdef __cplusplus
#  include <type_traits>
#  include <cstddef>
#  include <utility>
#include <limits>
#endif
</syntaxhighlight>
<br>
 
==== デバッグエラー : No route to host ====
デバッグ実行開始前に、以下に示すようなエラーが表示される場合がある。<br>
tcp:<IPアドレス または ホスト名>
No route to host 〜
<br>
これは、Raspberry Piのファイアーウォールが設定されているため、リモートデバッグ向けの指定のポートを開放する必要がある。<br>
Qt Creatorを使用している場合、デフォルトのポート番号は<code>10000-10100</code>である。<br>
<br>
Raspberry Piにアクセスして、ファイアーウォールの指定のポートを開放する。<br>
sudo firewall-cmd --permanent --zone=public --add-port="10000-10100"/tcp
sudo firewall-cmd --reload
<br>
==== デバッグエラー : プラットフォームの選択 ====
デバッグ実行開始直後に、以下に示すようなエラーが表示される場合がある。<br>
qt.qpa.plugin: Could not load the Qt platform plugin "eglfs" in "/home/raspi/InstallSoftware/Qt_5_15_13/plugins/platforms" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, webgl, xcb.
<br>
これは、GUIソフトウェアの実行時において、デフォルトのプラットフォームを選択していないことに起因する。<br>
実行時のコマンドライン引数において、<code>-platform <パラメータ></code>を指定することにより、実行するプラットフォームを選択することができる。<br>
* EGLFSで実行する場合
*: <code>-platform eglfs</code>
* XCBで実行する場合
*: <code>-platform xcb</code>
<br>
==== libEGL warning: DRI2: failed to authenticate - Raspberry Pi OS Bullseye以降 ====
以下のコマンドを実行する。<br>
以下のコマンドを実行する。<br>
  sudo raspi-config
  sudo raspi-config
<br>
<br>
次に、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択する。(KMSが有効になる)<br>
次に、Raspberry Pi 3Bの場合は、[Advanced Options] - [A2 GL Driver] - [G2 GL (Full KMS)]を選択する。(KMSが有効になる)<br>
Raspberry Pi 4Bの場合は、[Advanced Options] - [A8 GL Driver] - [G2 GL (Fake KMS)]を選択する。(KMSが有効になる)<br>
<br>
最後に、[Finish]を選択して終了する。<br>
最後に、[Finish]を選択して終了する。<br>
(このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする)<br>
<br>
<br>
もし、このオプションが利用可能になる前に、いくつかのアップデートを促される時はアップデートする。<br>
<br>
==== GLX/DRI2 is not supported/failed to authenticate : Raspbian OS Buster以前 ====
==== GLX/DRI2 is not supported/failed to authenticate : Raspbian OS Buster以前 ====
Qtプロジェクトをリモートデバッグする時、この警告が出力される場合がある。<br>
Qtプロジェクトをリモートデバッグする時、この警告が出力される場合がある。<br>
736行目: 927行目:
<br><br>
<br><br>


== CLion / Qt 5との連携 ==
==== CMakeツールチェーンファイルの作成 ====
任意のディレクトリにCMakeツールチェーンファイルの作成する。<br>
vi /<任意のディレクトリ>/ToolChain_for_Raspberry_Pi.cmake
<br>
<syntaxhighlight lang="cmake">
# Raspberry Pi OS 32ビット向け
# 64ビットを使用する場合は、"arm-linux-gnueabihf"の部分を"aarch64-linux-gnu"へ変更すること
# /<任意のディレクトリ>/ToolChain_for_Raspberry_Pi.cmakeファイル
cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(TARGET_SYSROOT <Raspberry Piのシステムルートディレクトリ>)
set(CMAKE_SYSROOT ${TARGET_SYSROOT})
set(ENV{PKG_CONFIG_PATH}  $PKG_CONFIG_PATH:${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/lib/arm-linux-gnueabihf/pkgconfig)
set(ENV{PKG_CONFIG_LIBDIR} /usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig/:${TARGET_SYSROOT}/usr/lib/pkgconfig:${TARGET_SYSROOT}/usr/lib/arm-linux-gnueabihf/pkgconfig:${TARGET_SYSROOT}/usr/share/pkgconfig)
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
set(CMAKE_C_COMPILER    /<GCCツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER  /<GCCツールチェーンのインストールディレクトリ>/bin/arm-linux-gnueabihf-g++)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${TARGET_SYSROOT}/usr/include -I${TARGET_SYSROOT}/usr/include/arm-linux-gnueabihf")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_INIT    "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/arm-linux-gnueabihf")
set(CMAKE_MODULE_LINKER_FLAGS_INIT  "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/arm-linux-gnueabihf")
set(CMAKE_SHARED_LINKER_FLAGS_INIT  "-Wl,-rpath-link,${TARGET_SYSROOT}/usr/lib/arm-linux-gnueabihf")
# Raspberry Pi 3Bの場合
set(QT_COMPILER_FLAGS "march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8")
# Raspberry Pi 4Bの場合
set(QT_COMPILER_FLAGS "march=armv8-a -mtune=cortex-a72 -mfpu=crypto-neon-fp-armv8")
set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe")
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_BUILD_RPATH ${TARGET_SYSROOT})
set(XCB_PATH_VARIABLE ${TARGET_SYSROOT})
set(GL_INC_DIR ${TARGET_SYSROOT}/usr/include)
set(GL_LIB_DIR ${TARGET_SYSROOT}:${TARGET_SYSROOT}/usr/lib/arm-linux-gnueabihf/:${TARGET_SYSROOT}/usr:${TARGET_SYSROOT}/usr/lib)
set(EGL_INCLUDE_DIR ${GL_INC_DIR})
set(EGL_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/arm-linux-gnueabihf/libEGL.so)
set(OPENGL_INCLUDE_DIR ${GL_INC_DIR})
set(OPENGL_opengl_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/arm-linux-gnueabihf/libOpenGL.so)
set(GLESv2_INCLUDE_DIR ${GL_INC_DIR})
set(GLIB_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/arm-linux-gnueabihf/libGLESv2.so)
set(GLESv2_INCLUDE_DIR ${GL_INC_DIR})
set(GLESv2_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/arm-linux-gnueabihf/libGLESv2.so)
set(gbm_INCLUDE_DIR ${GL_INC_DIR})
set(gbm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/arm-linux-gnueabihf/libgbm.so)
set(Libdrm_INCLUDE_DIR ${GL_INC_DIR})
set(Libdrm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/arm-linux-gnueabihf/libdrm.so)
set(XCB_XCB_INCLUDE_DIR ${GL_INC_DIR})
set(XCB_XCB_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/arm-linux-gnueabihf/libxcb.so)
</syntaxhighlight>
<br>
==== Qt 5向けCMakeツールチェーン設定ファイルの作成 ====
Raspberry Pi向けのQt 5ライブラリのインストールディレクトリ内のlib/cmake/Qt5ディレクトリにCMakeツールチェーン設定ファイルの作成する。<br>
vi /<Qt 5ライブラリのインストールディレクトリ>lib/cmake/Qt5/qt.toolchain.cmake
<br>
<syntaxhighlight lang="cmake">
# /<Qt 5ライブラリのインストールディレクトリ>lib/cmake/Qt5/qt.toolchain.cmakeファイル
set(__qt_toolchain_used_variables
    QT_CHAINLOAD_TOOLCHAIN_FILE
    QT_TOOLCHAIN_INCLUDE_FILE
    QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR
    QT_TOOLCHAIN_RELOCATABLE_PREFIX
    QT_ADDITIONAL_PACKAGES_PREFIX_PATH
)
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ${__qt_toolchain_used_variables})
list(REMOVE_DUPLICATES CMAKE_TRY_COMPILE_PLATFORM_VARIABLES)
if($ENV{_QT_TOOLCHAIN_VARS_INITIALIZED})
    foreach(var ${__qt_toolchain_used_variables})
      set(${var} "$ENV{_QT_TOOLCHAIN_${var}}")
    endforeach()
endif()
set(__qt_initially_configured_toolchain_file "<上記で作成したRaspberry Pi向けCMakeツールチェーンファイルのパス>")
set(__qt_chainload_toolchain_file "${__qt_initially_configured_toolchain_file}")
if(NOT QT_QMAKE_TARGET_MKSPEC)
    set(QT_QMAKE_TARGET_MKSPEC <Qt 5のクロスコンパイルで使用したRaspberry Pi向けデバイス定義ファイルのパス> CACHE STRING "")
endif()
if(NOT "${QT_CHAINLOAD_TOOLCHAIN_FILE}" STREQUAL "")
    set(__qt_chainload_toolchain_file "${QT_CHAINLOAD_TOOLCHAIN_FILE}")
endif()
if(__qt_chainload_toolchain_file)
    get_filename_component(__qt_chainload_toolchain_file_real_path
                          "${__qt_chainload_toolchain_file}" REALPATH)
    if(__qt_chainload_toolchain_file_real_path STREQUAL CMAKE_CURRENT_LIST_FILE)
        message(FATAL_ERROR
                "Woah, the Qt toolchain file tried to include itself recursively! '${__qt_chainload_toolchain_file}' "
                "Make sure to remove qtbase/CMakeCache.txt and reconfigure qtbase with 'cmake' "
                "rather than 'qt-cmake', and then you can reconfigure your own project."
        )
    elseif(NOT EXISTS "${__qt_chainload_toolchain_file_real_path}")
        message(WARNING "The toolchain file to be chainloaded "
            "'${__qt_chainload_toolchain_file}' does not exist.")
    else()
        include("${__qt_chainload_toolchain_file}")
        set(__qt_chainload_toolchain_file_included TRUE)
    endif()
    unset(__qt_chainload_toolchain_file)
endif()
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../../ ABSOLUTE)
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}")
list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}")
if(NOT QT_AVOID_CUSTOM_PLATFORM_MODULES)
    list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/platforms")
endif()
set(__qt_toolchain_additional_packages_prefixes "")
if(QT_ADDITIONAL_PACKAGES_PREFIX_PATH)
    list(APPEND __qt_toolchain_additional_packages_prefixes ${QT_ADDITIONAL_PACKAGES_PREFIX_PATH})
endif()
if(DEFINED ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH} AND NOT "$ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH}" STREQUAL "")
    set(__qt_env_additional_packages_prefixes $ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH})
    if(NOT CMAKE_HOST_WIN32)
      string(REPLACE ":" ";" __qt_env_additional_packages_prefixes
          "${__qt_env_additional_packages_prefixes}")
    endif()
    list(APPEND __qt_toolchain_additional_packages_prefixes ${__qt_env_additional_packages_prefixes})
    unset(__qt_env_additional_packages_prefixes)
endif()
if(__qt_toolchain_additional_packages_prefixes)
    set(__qt_toolchain_additional_packages_root_paths "")
    set(__qt_toolchain_additional_packages_prefix_paths "")
    foreach(__qt_additional_path IN LISTS __qt_toolchain_additional_packages_prefixes)
      file(TO_CMAKE_PATH "${__qt_additional_path}" __qt_additional_path)
      get_filename_component(__qt_additional_path "${__qt_additional_path}" ABSOLUTE)
      set(__qt_additional_path_lib_cmake "${__qt_additional_path}")
      if(NOT __qt_additional_path_lib_cmake MATCHES "/lib/cmake$")
          string(APPEND __qt_additional_path_lib_cmake "/lib/cmake")
      endif()
      list(APPEND __qt_toolchain_additional_packages_root_paths "${__qt_additional_path}")
        list(APPEND __qt_toolchain_additional_packages_prefix_paths "${__qt_additional_path_lib_cmake}")
    endforeach()
    list(PREPEND CMAKE_PREFIX_PATH ${__qt_toolchain_additional_packages_prefix_paths})
    list(PREPEND CMAKE_FIND_ROOT_PATH ${__qt_toolchain_additional_packages_root_paths})
    unset(__qt_additional_path)
    unset(__qt_additional_path_lib_cmake)
    unset(__qt_toolchain_additional_packages_root_paths)
    unset(__qt_toolchain_additional_packages_prefix_paths)
endif()
unset(__qt_toolchain_additional_packages_prefixes)
set(__qt_toolchain_extra_file "${CMAKE_CURRENT_LIST_DIR}/qt.toolchain.extra.cmake")
if(EXISTS "${__qt_toolchain_extra_file}")
    include("${__qt_toolchain_extra_file}")
endif()
if(QT_TOOLCHAIN_INCLUDE_FILE)
    get_filename_component(__qt_toolchain_include_file_real_path "${QT_TOOLCHAIN_INCLUDE_FILE}" REALPATH)
    if(EXISTS "${__qt_toolchain_include_file_real_path}")
      include("${__qt_toolchain_include_file_real_path}")
    else()
      message(WARNING "The passed extra toolchain file to be included does not exist: " "${__qt_toolchain_include_file_real_path}")
    endif()
endif()
if(DEFINED CACHE{CMAKE_BUILD_TYPE})
    set(__qt_toolchain_cmake_build_type_before_project_call "${CMAKE_BUILD_TYPE}")
endif()
if(NOT "$ENV{_QT_TOOLCHAIN_VARS_INITIALIZED}")
    set(ENV{_QT_TOOLCHAIN_VARS_INITIALIZED} ON)
    foreach(var ${__qt_toolchain_used_variables})
      set(ENV{_QT_TOOLCHAIN_${var}} "${${var}}")
    endforeach()
endif()
</syntaxhighlight>
<br>
==== ツールチェーンの設定 ====
CLionを起動する。<br>
[ファイル]メニューバー - [設定]を選択する。<br>
[設定]画面の左ペインにある[ビルド、実行、デプロイ] - [ツールチェーン]を選択する。<br>
[設定]画面の右ペインにある[+]アイコンを選択して、[システム]を選択する。<br>
<br>
* ツールチェーンの設定項目
** [名前]
**: 任意の名前を入力する。
** [CMake:]
**: Raspberry Pi向けQtライブラリのビルドに使用したCMakeファイルのパスを入力する。
** [ビルドツール:]
**: Raspberry Pi向けQtライブラリのビルドに使用したNinjaファイルのパスを入力する。
** [C コンパイラー:]
**: Raspberry Pi向けQtライブラリのビルドに使用したGCCファイルのパスを入力する。
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gcc
** [C++ コンパイラー:]
**: Raspberry Pi向けQtライブラリのビルドに使用したG++ファイルのパスを入力する。
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-g++
** [デバッガー:]
**: GCCツールチェーンのGDBファイルのパスを入力する。
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gdb
<br>
[設定]画面の右ペイン下部にある[適用]ボタンを押下する。<br>
<br>
==== CMakeの設定 ====
[ファイル]メニューバー - [設定]を選択する。<br>
[設定]画面の左ペインにある[ビルド、実行、デプロイ] - [CMake]を選択する。<br>
[設定]画面の右ペインにある[+]アイコンを選択する。<br>
<br>
* CMakeの設定項目
** [名前]
**: 任意の名前を入力する。
** [ビルドタイプ:]プルダウン
**: [Debug]または[Release]を選択する。
** [ツールチェーン:]プルダウン
**: 上記で設定したツールチェーン名を選択する。
** [ジェネレーター:]プルダウン
**: [デフォルトを使用する]を選択する。
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gcc
** [環境:]<br>[環境:]のテキストアイコンを選択して、[環境設定]画面を開く。<br>画面右上の[+]ボタンを押下して、各環境変数を設定する。
*** CMAKE_C_COMPILER
***: Raspberry Pi向けQtライブラリのビルドに使用したGCCファイルのパスを入力する。
***: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gcc
*** CMAKE_CXX_COMPILER
***: Raspberry Pi向けQtライブラリのビルドに使用したG++ファイルのパスを入力する。
***: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-g++
*** CMAKE_PREFIX_PATH
***: Raspberry Pi向けQtライブラリのインストールディレクトリのパスを入力する。
***: 例: <Raspberry Pi向けQtライブラリのインストールディレクトリ>
*** CMAKE_TOOLCHAIN_FILE
***: Raspberry Pi向けQtライブラリのインストールディレクトリにあるビルド向けツールチェーンファイルのパスを入力する。
***: 例: /<Raspberry Pi向けQtライブラリのインストールディレクトリ>/lib/cmake/Qt5/qt.toolchain.cmake
*** QT_QMAKE_EXECUTABLE
***: Raspberry Pi向けQtライブラリのインストールディレクトリにあるqmakeファイルのパスを入力する。
***: 例: /<Raspberry Pi向けQtライブラリのインストールディレクトリ>/bin/qmake-host
<br>
[設定]画面の右ペイン下部にある[適用]ボタンを押下する。<br>
<br>
==== SSHの設定 ====
[ファイル]メニューバー - [設定]を選択する。<br>
[設定]画面の左ペインにある[ツール] - [SSH 構成]を選択する。<br>
[設定]画面の右ペインにある[+]アイコンを選択する。<br>
<br>
* SSH構成の設定項目
** [ホスト:]
**: Raspberry PiのIPアドレスまたはホスト名を入力する。
** [ユーザー名:]
**: Raspberry Piのユーザ名を入力する。
** [認証タイプ:]プルダウン
**: [パスワード]または[キーペア]を選択する。
** [秘密鍵ファイル:] (キーペアを選択した場合)
**: 秘密鍵ファイルのパスを入力する。
** [パスフレーズ:] (キーペアを選択した場合、かつ、パスフレーズを設定した場合)
**: 秘密鍵のパスフレーズを入力する。
** [構成ファイル ~/.ssh/configの構文解析]チェックボックス
**: 任意
<br>
[接続テスト]ボタンを押下して、Raspberry PiにSSH接続する。<br>
<br>
[設定]画面の右ペイン右下にある[適用]ボタンを押下する。<br>
<br>
==== 各プロジェクトの設定 ====
CLionを起動して、[ファイル]メニューバー - [新規] - [プロジェクト...]を選択する。<br>
[新規プロジェクト]画面から、[Qt Console 実行可能ファイル]または[Qt Widgets 実行可能ファイル]を選択する。<br>
<br>
新規プロジェクトの作成後、[実行]メニューバー - [実行構成の編集...]を選択する。<br>
[実行/デバッグ構成]画面が開くので、画面左上にある[+]ボタンを押下して、[リモート GDB サーバー]を選択する。<br>
画面左ペインに[リモート GDB サーバー]が追加される。<br>
画面左ペインに[リモート GDB サーバー]を選択して、各種設定を行う。<br>
<br>
* [ターゲット:]プルダウン
*: プロジェクト名を選択する。
* [実行可能ファイル:]プルダウン
*: プロジェクト名を選択する。
* [GDB:]プルダウン
*: 上記のツールチェーンの作成セクションで設定したGDBを選択する。
* [資格情報:]プルダウン
*: 上記のSSHの設定セクションで設定したSSHを選択する。
* [実行可能ファイル...]ラジオボタン
*: 任意
* [アップロードパス:]
*: 実行可能バイナリが配置されるRaspberry Pi上のディレクトリを入力する。
*: 例: /home/<Raspberry Piのユーザ名>/CLion/Sample1/debug
* ['target remote' ...]
*: 自動的に入力される。
*: 例: <IPアドレスまたはホスト名>:1234
* [GDB サーバー引数:]
*: Qt WidgetsまたはQMLを使用するプロジェクトの場合、デバッグまたは実行時において、実行可能バイナリに<code>-platform wayland</code>オプションを付加する必要がある。
*: 例: <code>:<GDBサーバのポート番号 例: 1234> /<実行可能バイナリが配置されるRaspberry Pi上のディレクトリ>/debug/<実行バイナリのファイル名> -platform wayland</code>
<br>
次に、[拡張 GDB サーバーオプション]項目を設定する。<br>
この設定は、Raspberry PiにアップロードしたQtライブラリにおいて、デバッグまたは実行に関する設定を行う。<br>
* [作業ディレクトリ:]
*: 何も入力しない。
* [環境変数:]<br>[環境変数:]項目の右にあるテキストアイコンを選択する。<br>[環境変数]画面が開くので、画面左上にある[+]ボタンを押下して各種設定を入力する。
** DISPLAY
**: :0
** QT_QPA_PLATFORMTHEME
**: Qt 5の場合 : qt5ct
** PATH
**: Raspberry Pi上のQt5ライブラリをアップロードしたbinディレクトリのパスを入力する。
**: 例: /<Qt5ライブラリをアップロードしたディレクトリ>/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
** LD_LIBRARY_PATH
**: Raspberry Pi上のQt5ライブラリをアップロードしたlibディレクトリのパスを入力する。
**: 例: /<Qt5ライブラリをアップロードしたディレクトリ>/lib:/<Qt5ライブラリをアップロードしたディレクトリ>/plugins/qmltooling
** QT_PLUGIN_PATH
**: /<Qt5ライブラリをアップロードしたディレクトリ>/plugins
** QT_QPA_PLATFORM_PLUGIN_PATH
**: /<Qt5ライブラリをアップロードしたディレクトリ>/plugins/platforms
** QML_IMPORT_PATH
**: /<Qt5ライブラリをアップロードしたディレクトリ>/qml
** QML2_IMPORT_PATH
**: /<Qt5ライブラリをアップロードしたディレクトリ>/qml
** QT_DEBUG_PLUGINS
**: 0または1を入力する。
** LANG
**: 日本語を設定する場合は、<code>ja_JP.UTF-8</code>と入力する。
<br>
また、[拡張 GDB サーバーオプション]項目の設定は、プロジェクトディレクトリ内の<u>.idea/runConfigurations/<プロジェクト名>.xml</u>ファイルに保存されている。<br>
このファイルを直接編集することにより、上記の設定を行うこともできる。<br>
<br>
CLion上で上記の設定を行うには煩雑なため、ファイルを直接編集することを推奨する。<br>
cd <プロジェクトディレクトリ>
vi .idea/runConfigurations/<プロジェクト名>.xml
<br>
<syntaxhighlight lang="xml">
<!-- .idea/runConfigurations/<プロジェクト名>.xml -->
<component name="ProjectRunConfigurationManager">
  <configuration ...略>
    <envs>
      <env name="DISPLAY" value=":0" />
      <env name="LANG" value="ja_JP.UTF-8" />
      <env name="QML2_IMPORT_PATH" value="/<Qt5ライブラリをアップロードしたディレクトリ>/qml" />
      <env name="QML_IMPORT_PATH" value="/<Qt5ライブラリをアップロードしたディレクトリ>/qml" />
      <env name="QT_DEBUG_PLUGINS" value="0" />
      <env name="QT_PLUGIN_PATH" value="/<Qt5ライブラリをアップロードしたディレクトリ>/plugins" />
      <env name="QT_QPA_PLATFORM_PLUGIN_PATH" value="/<Qt5ライブラリをアップロードしたディレクトリ>/plugins/platforms" />
      <env name="QT_QPA_PLATFORMTHEME" value="Qt5ct" />
      <env name="LD_LIBRARY_PATH" value="/<Qt5ライブラリをアップロードしたディレクトリ>/lib:/<Qt5ライブラリをアップロードしたディレクトリ>/plugins/qmltooling" />
      <env name="PATH" value="/<Qt5ライブラリをアップロードしたディレクトリ>/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" />
    </envs>
    <!-- ...略 -->
  </configuration>
</component>
</syntaxhighlight>
<br>
==== GDBの設定 ====
プロジェクトにデバッグのためのより多くの設定が必要な場合、デバッガの初期化ファイル (GDBの場合は.gdbinit、LLDBの場合は.lldbinit) をプロジェクトディレクトリ直下に作成する。<br>
このファイルは、他のプロジェクトと一緒にVCSで共有することもできる。<br>
<br>
一般的に、GDB / LLDBは起動時に初期化ファイルを一定の順序で読み込む。<br>
まず、デバッガはユーザのホームディレクトリにある初期化ファイルを探して、次に、現在のプロジェクトディレクトリ直下にある初期化ファイルを探す。<br>
<br>
ただし、デフォルトの設定では、セキュリティ上の理由から、プロジェクト固有の初期化ファイルからのコマンドは実行されない。<br>
そのため、ホームディレクトリの初期化ファイルである<u>~/.gdbinit</u>ファイルまたは<u>~/.lldbinit</u>ファイルを、以下に示すように編集する。<br>
vi ~/.gdbinit  または  vi ~/.lldbinit
<br>
<syntaxhighlight lang="sh">
# ~/.gdbinitファイル  または  ~/.lldbinitファイル
set auto-load safe-path /
# または
set auto-load local-gdbinit on
add-auto-load-safe-path /
</syntaxhighlight>
<br>
次に、プロジェクトディレクトリの直下に.gdbinitファイルを作成する。<br>
cd <プロジェクトディレクトリ>
vi .gdbinit  または  vi .lldbinit
<br>
<syntaxhighlight lang="sh">
# /<プロジェクトディレクトリ>/.gdbinitファイル  または  /<プロジェクトディレクトリ>/.lldbinitファイル
set sysroot <Raspberry Piのシステムルートディレクトリ>
</syntaxhighlight>
<br>
CLionを起動して、任意のプロジェクトを開く。<br>
CLionのメイン画面左にあるプロジェクトに.gdbinitファイル、または、.lldbinitファイルが追加されているかどうかを確認する。<br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry Pi]][[カテゴリ:Qt]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry Pi]][[カテゴリ:Qt]]