Raspberry Pi用にQtをクロスコンパイルする――ただしQtはX11上で動かしたい

Raspberry Pi用にQtをクロスコンパイルする方法を探していたのだが、どの情報も非X11のコンソール環境にてEGLFS経由で直接OpenGL ESで画面描画する構成のQtのバイナリを作るものばかりだった。

しかし私は、諸事情よりX11のデスクトップ上でアプリを実行できる構成のQtのバイナリが欲しいのである。

まあ、Linux上で「Qt for Linux/X11」を自前ビルドするのと同じ方法をRaspbian上で実行すれば、確かにブツは手に入る。だけどPC上でビルドする方が速いので、できればクロスコンパイルしたい。

Raspberry Pi向けのQtクロスコンパイル(EGLFSを使う版)

この文書を書いている時点で、最も有用な文書はQt WikiRaspberryPi2EGLFSだ。このページの方法でEGLFSを使う構成でQtをクロスコンパイルできる。

以下、上記ドキュメントの補足:

  • 上記ドキュメントでは、Raspberry Piの開発元でメンテしているクロスコンパイラを使用している。Raspberry Piの公式ドキュメントKernel buildingによると、中の人はUbuntuでこのクロスコンパイラを使うことが多いらしいので、実績のあるUbuntu上でクロスコンパイルした方が無難かもしれない。
  • 事前にRaspbian側でssh接続を有効化しておく。
  • rsync(1)でファイル転送する際は、上記ドキュメントのrsync(1)の実行例のオプションに「-e ssh」を追加して、ssh経由で転送する。
  • Qt 5.11系をクロスコンパイルする際は、「./configure」のオプションに「-no-gbm」を付与する。でないと「make」した時にビルドに失敗する。
  • /etc/ld.so.conf.d/」に配置するファイルの名前は、「qt5pi.conf」ではなく「00-qt5pi.conf」にする必要がある。

X11用にクロスコンパイルするには?

色々調べた結果、先に挙げたドキュメントの「./configure」のオプションを以下のように調整することで、RaspbianのX11上でアプリを実行する構成でクロスコンパイルできることが分かった。

  1. オプション「-opengl es2」を「-opengl desktop」に変更する。
  2. オプション「-no-eglfs -qpa xcb」を追加する。
  3. Qt 5.11系をクロスコンパイルする場合はオプション「-no-gbm」を追加する。

他の作業については、特に変更点はない模様。