[Fedora 11]

Qt を利用したクロスコンパイル

Qt LogoQt(キュート)は C++ 言語で書かれたマルチプラットフォーム対応の GUI ツールキットです。商用版とオープンソース版があり、Qt 4.5 のオープンソース版のライセンスは LGPLGPL です。(Qt Licensing)。フリーな UNIX 系デスクトップ環境 KDE は、Qt ライブラリを利用しています。


SourceForge.net Logo   MinGW クロスコンパイル用 Qt の入手先
  [LIB] Qt

最初は Hello World

Fedora 標準の mingw32-qt では、qmake (qmake-qt4) を利用する際に不具合が出るので、不具合を直した mingw32-qt を用意しました。右のサイトからダウンロード/アップグレードしてご利用ください。

さて、Qt ライブラリを用いたクロスコンパイルでも、最初は Hello World プログラムを扱います。

List: hello.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();
}

Qt では、qmake を使って Makefile を簡単に生成することができます。Fedora では qt-devel に収録されている /usr/bin/qmake-qt4 を使います。クロスコンパイルで qmake を利用するためには、クロスコンパイル用の設定が収録されている mingw32-qt-qmake をインストールしておく必要があります。その上で QMAKESPEC 環境変数を、クロスコンパイル用の情報を参照するように設定します。MinGW (32bit) のクロスコンパイル用には、fedora-win32-crossQMAKESPEC に設定します。

make すると、バイナリはサブディレクトリ release に出力されます。

qmake を利用したクロスビルド

$ pwd
/home/bitwalk/work/qt/hello
$ ls
hello.cpp
$ export QMAKESPEC=fedora-win32-cross
$ qmake-qt4 -project
$ qmake-qt4
$ ls
Makefile        Makefile.Release  hello.cpp  release
Makefile.Debug  debug             hello.pro
$ 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.o hello.cpp
i686-pc-mingw32-g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-ru
ntime-pseudo-reloc -Wl,-s -o release/hello.exe release/hello.o  -L"/usr/i686-pc-
mingw32/sys-root/mingw/lib" -lQtGui -lQtCore
make[1]: ディレクトリ `/home/bitwalk/work/qt/hello' から出ます
$ ls release
hello.exe  hello.o
$ release/hello.exe &
[1] 3039
$ err:wintab32:X11DRV_LoadTabletInfo Unable to initialize the XInput library.
fixme:win:FlashWindowEx 0x61dd98

hello.exe の実行例 (Wine)

ページ先頭に戻る

Windows での実行例

hello.exe と関連する DLL を、wbc で抽出、生成した hello.zip を、Windows にコピーして展開してから hello.exe を実行した例を、以下に示しました。wbc の使用方法については、wxWidgets のランタイムライブラリの収集を参考にしてください。

Windows で hello.exe を実行すると、コンソールのウィンドウも表示されてしまいますが、ちゃんと実行できます。

hello.exe の実行例 (Windows Vista)

ページ先頭に戻る

参考サイト

ページ先頭に戻る
(C) 2009 - 2017 Fuhito Suguri
クリエイティブ・コモンズ・ライセンス
This site by Fuhito Suguri is licensed under a Creative Commons 表示 - 継承 3.0 Unported License.
Ads by Sitemix