RaspberryPi2上でQtをコンパイルする

C言語でprintfと書いたらどのOSでもちゃんと文字が出ますが、ウインドウを出すとなるとそうは行きません。それぞれ用意されているAPIが違うからです。QtはLinuxやMacなどそれぞれの場合のウインドウ描画などのプログラムが入っていて、Qtを使ってプログラムを書けばどのOSでも同じプログラムで同じようなウインドウを表示するGUIのアプリを作ることが出来ます。

Qtのサイト( http://www.qt.io )
Screen Shot 2015-09-18 at 08.22.21

当然、QtはRaspberryPiでも使うことが出来ます。
Qtは普通コンパイル済みのライブラリとして配られていてはWindowsやMacなどはインストーラーで入れられるのですが、RaspberryPiなどのCPUがARM系のものはライブラリが配布されていないので(だいぶ前のバージョンならある)自分でQtのプログラムを持ってきてARM向けにコンパイルする必要があります。そしてコンパイルしたライブラリと連携する自分のソフトをかけばGUIのアプリが作れます。
ただ、プログラムの量が多く、コンパイルにRaspberryPiB+でも2日程度かかってしまいます。そこで、CPUが4個も入っているRaspberryPi2でやってみましょう!僕の場合は5時間ちょいぐらいでコンパイルできました。

Qtのサイトに載っていますのでそれを参考に進めます。この記事を書いたタイミングはQt5.5でした。
https://wiki.qt.io/Native_Build_of_Qt5_on_a_Raspberry_Pi
https://wiki.qt.io/Native_Build_of_Qt_5.4.1_on_a_Raspberry_Pi

1. 必要な物を用意する

ここで、大本のサイトは1つのapt-getでライブラリを入れるようになっていますが、多すぎてうまくコピペ出来なかったので1行ごとに分割して行いました。
(コピペに失敗するとこうなる
E: Unable to locate package libsqlite3-dev libxslt1-dev
E: Unable to locate package libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
E: Couldn’t find any package by regex ‘libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev’
E: Unable to locate package gstreamer0.10-plugins-bad libraspberrypi-dev
E: Couldn’t find any package by regex ‘gstreamer0.10-plugins-bad libraspberrypi-dev’
E: Unable to locate package libpq-dev libiodbc2-dev
E: Unable to locate package libxcb1-dev libx11-xcb1
E: Unable to locate package libxcb-shm0 libxcb-shm0-dev
E: Unable to locate package libxcb-render-util0 libxcb-render-util0-dev
E: Unable to locate package libxcb-glx0-dev libxi-dev
)

2. プログラムを持ってくる

適当なディレクトリ(今回はホーム)に移動してソースコードを持ってきます。

そして、必要な依存ファイルを持ってきます。./init-repositoryは20分ぐらいかかります。

3. 設定を変更する

コンパイル前にいくつか変更しておかなければならないものがあります。
まず、./qtbase/configureを編集します。

800行目ぐらいにあるQT_CFLAGS_DBUS~QT_LIBS_GLIBあたりをこのようにします

そしてその下にこれらを新しく追加します。

あと、それよりしたのQT_CFLAGS_FONTCONFIGに関する部分を編集します。

となっているところがあるかとおもいますが、
QT_CFLAGS_FONTCONFIG=

QT_CFLAGS_FONTCONFIG=-I/usr/include/freetype2/
にします。

こんな感じにね。
そして、できたら保存してconfigします。これもちょっと時間がかかります。

出力ファイルを指定しているので、consoleには何も出てこないと思いますが安心して下しあ。何か問題があればエラーは表示されます。
また、結果を確認したい場合は outputファイルを開いてみてみてください。

4. コンパイル

コンパイルは5時間と31分かかりました。電源が切れないことを確認してください。また、sshから実行するとsshを5時間閉じれなくなるのでraspberryPi上からやるとよいでしょう。

今回も出力ファイルを output_makeにしましたので完了するまで何も出てこないです。
-j 4は並列に4つ作業するという意味で、CPUが4つなので4としました。
エラーがなく完了していれば安心です。試しにtail output_makeでみてみると最後の3行は

こんな感じになっていました。
それでは、コンパイルが終わったので必要なヘッダやライブラリを共有スペースにコピーしましょう。

5. 環境変数に追加する

環境変数にqtの場所を教えましょう。
環境変数をbashrcに入れます(bash_profileに入れるというのもあります)

ファイルの最後に以下を追加します。

そしたら、source ~/.bashrcでリロードするか sudo shutdown -r nowやsudo rebootで再起動しちゃいましょう。
これでQtのコンパイルは完了です!

6. 一回試してみる。

サンプルのプログラムがQtに入ってますから、ちょっと試してみましょう。
まずgitでもってきたqtのなかのサンプルディレクトリを開きます

そしたらqmake(さっきコンパイルして作成されたQt用アプリの事前makeみたいなもの)とmakeをして実行します。

画面にサイコロが出てきてマウスなどで動かすことができたら成功です!

2015-09-14 12.09.20

ちなみにHDMIでなく、こういう外部ディスプレイでQtを(openGLをつかったものを)表示する場合はFBCBを使う必要があります。それは次回扱います。

2 thoughts on “RaspberryPi2上でQtをコンパイルする

  1. ふんふん

    非常に参考になりました、ありがとうございます。

    私の環境では”&”が”&amp”, “>”が”&gt”というふうに見えていますが、これは私の環境だけでしょうか。

    Reply
    1. yuki sato Post author

      wordpressの編集画面が勝手に変換したみたいです。。。
      修正しますね!ありがとうございます。

      Reply

ふんふん にコメントする コメントをキャンセル