MinGW のクロスコンパイル用パッケージ、mingw32-qt のインポートライブラリ libQt4* に、libQT* で始まる名前のシンボリックリンクを加えたところ、Hello World! のプログラムをクロスコンパイルすることができました。編集を加えた RPM パッケージを以下にアップロードしました。
- mingw32-qt-4.5.2-1.1
前回のサンプルをクロスコンパイルしたバイナリを wine 上で実行してみたところ、qmake-qt4 と make でコンパイルができたものの。日本語フォントの表示ができなかったので、プログラム hello_qt.cpp を若干変更しました。
#include <QApplication>
#include <QPushButton>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
QPushButton hello("こんにちは、世界!");
hello.setWindowTitle("Hello World!");
hello.show();
return app.exec();
}
コンパイルは、前回の Fedora ネイティブ用のコンパイルと同様、qt-devel に収録されている /usr/bin/qmake-qt4 を利用しますが、クロスコンパイルで利用するためには、mingw32-qt-qmake もインストールしておく必要があります。その上で QMAKESPEC 環境変数をクロスコンパイル用の情報を参照するように設定します。
make すると、バイナリはサブディレクトリ release に出力されます。
[bitwalk@localhost qt_hello]$ export QMAKESPEC=fedora-win32-cross
[bitwalk@localhost qt_hello]$ qmake-qt4 -project
[bitwalk@localhost qt_hello]$ qmake-qt4
[bitwalk@localhost qt_hello]$ make
make -f Makefile.Release
make[1]: ディレクトリ `/home/bitwalk/work/qt_hello' に入ります
i686-pc-mingw32-g++ -c -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 --param=ssp-bu
ffer-size=4 -mms-bitfields -O2 -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DE
BUG -DQT_GUI_LIB -DQT_CORE_LIB -I"/usr/i686-pc-mingw32/sys-root/mingw/include/Qt
Core" -I"/usr/i686-pc-mingw32/sys-root/mingw/include/QtGui" -I"/usr/i686-pc-ming
w32/sys-root/mingw/include" -I"." -I"release" -I"/usr/lib64/qt4/mkspecs/fedora-w
in32-cross" -o release/hello_qt.o hello_qt.cpp
i686-pc-mingw32-g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-ru
ntime-pseudo-reloc -Wl,-s -o release/qt_hello.exe release/hello_qt.o -L"/usr/i6
86-pc-mingw32/sys-root/mingw/lib" -lQtGui -lQtCore
make[1]: ディレクトリ `/home/bitwalk/work/qt_hello' から出ます
[bitwalk@localhost qt_hello]$ ./release/qt_hello &
[2] 2680
[bitwalk@localhost qt_hello]$ err:wintab32:X11DRV_LoadTabletInfo Unable to initi
alize the XInput library.
fixme:win:FlashWindowEx 0x61dd98
wine で実行すると、日本語フォントはきれいではありませんが、とにかく表示されています。
実行に必要な DLL と一緒に Windows へコピーして実行してみます。
コマンドプロンプトのコンソールも表示されてしまいますが、実行できます。また、フォントは wine で実行した時に比べるとずっとまともです。
より詳細な情報は、後日 MinGW クロスコンパイル - Workshop Complex at bitWalk にまとめる予定です。
参考サイト
[1] VikiWiki - Qt
[2] qmake のコンセプト
0 件のコメント:
コメントを投稿