Qt/Embeddedを使って、Linuxデスクトップマシンで組み込みのGUIプログラミングを体験する本連載。今回はQt/Embeddedのインストールの後、動作確認を行い、デスクトップ上でフレームバッファを使用してプログラムが動かせるまでを解説します。
次はQt/Embeddedのインストールです。
先ほどのQt/X11での環境設定を破棄し、表10のように設定します。今回はQt/Embeddedで開発を行うので、ここで設定した環境変数が開発時の設定となります。PATHにQt/X11のbinを追加しているのは、Qt Designerなどのツールを使用するためです。
環境変数 | 設定内容 |
---|---|
QTDIR | /usr/local/qt/qt-embedded-free-3.3.3を設定 |
MANPATH | $QTDIR/doc/manを追加 |
LD_LIBRARY_PATH | $QTDIR/libを追加 |
PATH | $QTDIR/binと/usr/local/qt/qt-x11-free-3.3.3/binを追加 |
表10 Qt/Embeddedでの環境設定 |
Qt/EmbeddedのconfigureスクリプトのオプションはX11のものと少し違います。オプション「-help」で、使用できるオプションを確認できます。今回は実行例2のようにコンフィグレーションします。
$ unset which $ ./configure -v \ ← 詳細メッセージ > -thread \ ← スレッド > -depths 8,16,32 \ ↑ フレームバッファの深さ > -qt-gfx-transformed \ ↑ 回転フレームバッファ > -qt-gfx-matrox \ ↑ Matroxグラフィックアクセラレータ (今回の構成で使用しているため) > -qt-gfx-qvfb \ ↑ 仮想フレームバッファqvfb > -qt-gfx-vnc \ ← VNCサーバー機能 > -debug ← デバッグモード
この工程は、表8の環境で約8〜9分かかります。Qt/Embeddedでは、デフォルトで例外とRTTIが無効化されるようにコンパイラオプション「-fno-exceptions」と「-fno-rtti」が設定されます。Qt/X11ではRTTIが有効になったままなので、開発時に注意が必要です。
Qt/EmbeddedのほうはQt/X11のようにすべてをコンパイルする必要はありません。Qt DesignerやQt LinguistもQt/Embeddedで動作はしますが、コンソールで使用しても仕方がないですし、日本語入力もできません。フットプリント削減のために不要な機能を使わないようQt/Embeddedをインストールした場合には、これらの開発用のツールはQt/Embeddedではコンパイルもできなくなります(フットプリント削減については次回説明)。また、クロス環境ではほとんどの場合不要でしょう。
必要なものをコンパイルするためにmakeターゲットは表11、表12のようになります。まずは、ライブラリをコンパイルしましょう。
$ make sub-src
ライブラリのみならば、表8の環境で1時間20分強で済みました。次に、プラグインをコンパイルします。
$ make sub-plugins
こちらは4分ほどかかりました。Qt/X11でコンパイルしたuicをQt/Embeddedのbinにコピーかシンボリックリンクします。
$ cp /usr/local/qt/qt-x11-free-3.3.3/bin/uic \ > $QTDIR/bin
コピーが必要なのは、Qt/Embeddedのサンプルコードなどでuicの絶対パスとしてQt/Embeddedのbinを参照するように扱われているためです。
makeターゲット | 説明 |
---|---|
sub-src | ライブラリのコンパイル |
sub-tools | 開発用ツールで、ターゲット機ではなく、開発機で動かすツール |
sub-plugins | プラグインのコンパイル |
sub-examples | サンプルコード。必要に応じて、個々にコンパイル可能 |
sub-tutorial | チュートリアル。必要に応じてコンパイルすれば良い |
表11 Qt/Embeddedのmakeターゲット |
作成されるファイル | 説明 |
---|---|
assistant | Qt/X11でコンパイル済み |
designer | 同上 |
linguist | 同上 |
qtconfig | Qt/X11でコンパイル済み |
qvfb | Qt/X11で追加コンパイル済み |
表12 sub-toolsで作成されるもの |
例外: C++の例外処理機能(Exception Handling)。コストがかかるため組み込み系ではコンパイル時に機能を抑制することが多い。
RTTI: RTTI(Run Time Type Information、実行時型情報)。実行時にオブジェクトの型を識別するための情報。コストがかかるため、組み込み系ではコンパイル時に機能を抑制する場合がある。しかし、プログラミングしていくうえで、安全なダウンキャストなどのために有用な機能なので、QtではQObjectに効率を損なわないqt_cast()を持っている。
コンパイラオプション「-fno-exceptions」と「-fno-rtti」: GCC C++コンパイラにおいて、C++の例外とRTTIを無効化するオプション。
Copyright(c)2010 SOFTBANK Creative Inc. All rights reserved.