hakeの日記

Windows環境でプログラミングの勉強をしています。

coLinux上でQteエミュレーション

最近のザウルス用のQtアプリの勉強はコンパイル速度や画面の広さといった理由でWindowsPC上に構築したCygwin上のクロスコンパイル環境で行うことが多くなっていました。ところが動作確認の段階でいちいちバイナリをザウルスの移動する作業が面倒なのでエミューレションできるqvfbを導入すべくいろいろと努力していたのですがどうも上手くいかない。qvfbの単体起動で「bad systemcall」と表示されるに至ってスッパリと断念、coLinux上にQtのクロスコンパイル環境とエミュレーション環境を作ることにしました。

で、できたのが上の画像、実行しているのは先日のdrawtestのプログラムです。画面がWindowsっぽく無くなっていてなんか嬉しい(笑) ちなみにXサーバーはCygwin/Xを使用しています。
ただし実際に動かしてみると若干の問題点もありますね、挙げると以下のとおり。

  • レイアウトがザウルス上のQt環境と微妙に(かなり?)異なる
  • ソースの中でメッセージ等に日本語を使用していると落ちる(何か対処方法があるのでしょうか)
  • テキストエリアへの入力やボタンを押してからの反応が鈍いことがある(CygwincoLinuxを同時に動かしているせい?)

まぁC++の勉強につかう分にはなんら不満ではないのでこのまま使用してみようと思います。これでCygwinはXサーバー機能以外は必要なくなったかもしれない。
以下、導入手順

gcc2.95の導入

coLinuxに入っているgccは3.3.5でこのままではQtアプリのコンパイルができないので、gcc2.95が動くようにする。

$ tar jxvf gcc-2.95.3.tar.bz2
$ cd gcc-2.95.3
$ CFLAGS="-O2" \
  ./configure --prefix=/opt/gcc \
  --enable-languages=c,c++
$ make
$ su
# make install
追記

よく考えたらgcc-cross-sa1100-2.95.2-0.i386.rpmがあった(笑)

開発環境導入

$ alien --to-tgz xxx.rpm
  • tmake-sharp.tar.gzのインストールについてはチュートリアルの通りに実施したところ、新しいのが入っているよというエラーになったのそのままにしている
  • libqteは置き換えバージョンが出ているので換えた方が良いのかもしれない(←換えないほうが良い、換えるとエミュレーション環境でリンクできなくなる)
  • シャープライブラリはお好みで(まだ入れていない)
    • sharpsdk-pub-20021227.tar.gzをいれると新しいtmakeが入るらしい、こちら参照 ('06/11/12)
  • /opt/Qtopia/tmake/lib/qws/linux-x86-g++/tmake.confのTMAKE_LIBS_QT行に「-lqpe」を追加。同linux-sharp-g++/tmake.confも同様に修正
  • dev-x86-qpe.shはprogenやgcc2.95へのパスを通したので以下の様にした
#!/bin/bash

CROSSCOMPILE=/opt/Embedix/tools
QPEDIR=/opt/Qtopia
QTDIR=/opt/Qtopia
GCCPATH=/opt/gcc
PATH=$QTDIR/bin:$QTDIR/sharp/bin:$CROSSCOMPILE/bin:$GCCPATH/bin:$PATH:/opt/Qtopia/tmake/bin
TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-x86-g++/
LD_LIBRARY_PATH=$QTDIR/lib:$CROSSCOMPILE/lib:$LD_LIBRARY_PATH
export QPEDIR QTDIR PATH TMAKEPATH LD_LIBRARY_PATH
echo "Altered environment for sharp Zaurus Development x86"

エミューレション環境でのコンパイルと実行

$ . dev-x86-qpe.sh(ピリオドが必要)
$ progen -o hello.pro
$ tmake -o Makefile hello.pro
$ make
$ qvfb -width 640 -height 480 & (-hでヘルプ表示)
$ ./hello -qws hello