はじめに

この文書では、Linux上でMicrosoft Windows向け実行ファイルをビルドするための環境構築について解説します。

関連文書:Info/Linux上でのMS-Windows向けGTKアプリのビルド

binutilsとgccをクロスコンパイル用にビルドする

Info/Linux上でのMS-Windows向けGTKアプリのビルドにある方法でも良いですが、SDL(Simple DirectMedia Layer)のサイトにあるbuild-cross.shを修正して利用するとファイルの取得から、ビルド、インストールまでを一気に実行できます。ただし、インストール先によってはroot権限が必要になります。

前提条件

  • インターネットに接続している事。
  • yaccやlex互換のソフトウェアがインストールされている事。(bisonやflexなど。)

手順

まず、build-cross.shをダウンロードし、適当な場所に保存します。ここでは、~/build-crossに保存したと仮定します。

次にMinGW - HomeDownloadページを参考にスクリプトの最初の方にあるGCC_VERSION、BINUTILS、MINGW、W32APIの値を修正します。2005/01/26時点では、以下の様に修正する必要がありました。

 GCC_VERSION=3.4.2-20040916-1
 BINUTILS=binutils-2.15.91-20040904-1
 MINGW=mingw-runtime-3.7
 W32API=w32api-3.2

また、デフォルトではインストール先が、/usr/local/cross-toolsになっています。インストール先を変更したい場合は、PREFIXの値を修正する必要があります。例えば、/opt/cross-toolsにインストールする場合は次の様に修正してください。

 PREFIX=/opt/cross-tools

ただし、インストール先を変更した場合は後述のcross-configure.shとcross-make.shも修正してやる必要があります。

さて、スクリプトの修正が済んだらいよいよ必要なファイルの取得、ビルド、インストールを行います。

例:

 $ cd ~/build-cross
 $ su
 $ sh build-cross.sh

途中、エラーで終了した場合はログファイルの場所を教えてもらえますのでそのファイルを参考にエラーの原因を排除して再度スクリプトを実行してください。

バイナリを使ってインストールする場合

SDL(Simple DirectMedia Layer)のサイトでは、ビルド済みのmingw32-linux-x86-glibc-2.3.tar.gzなども配布しています。クロスビルド環境をインストールしたいディレクトリの親ディレクトリで展開してください。

クロスビルド用のスクリプトをダウンロードする

前項の作業が成功したら、cross-configure.shcross-make.shをダウンロードして適当な場所に保存してください。前項でインストール先を変更していた場合は、それぞれPREFIXの値を修正する必要があります。

これらは、Windows向けのビルドの際にconfigureやmakeの代わりに実行する物です。実行権限を付けてPATHを通しおくか、shの引数にフルパスで指定するか判断はお任せします。

ビルドのテスト

#ref(hello-win.tar.bz2)

上記ファイルを展開してできたディレクトリに移動し、以下の様にしてください。

 $ sh インストールした場所/cross-make.sh

hello.exeというファイルが作成されるのでWindowsにコピーして実行できれば、OKです。

Gtk+2関連パッケージのインストール

以上でWin32APIを使ったプログラムをビルドする環境は整いましたが、クロスビルド環境の構築する醍醐味はやはりLinux向けアプリケーションの移植ではないでしょうか。この節では、Windows向けGtk+2アプリケーションをビルドするために必要なパッケージのインストールについて解説します。

Tor Lillqvist氏がビルドしたGtk+2関連パッケージのダウンロードとインストール

Tor Lillqvist--GTK+ (not GIMP) for Windows--Downloadsから、以下のファイルをダウンロードします。

これらのファイルを以下の様に /usr/local/cross-tools で展開します。(インストールディレクトリを変更した場合は適宜に読みかえてください。

 $ su
 # unzip atk-1.8.0.zip -d /usr/local/cross-tools/i386-mingw32msvc
 # unzip atk-dev-1.8.0.zip -d /usr/local/cross-tools/i386-mingw32msvc
 ...

GnuWin32関連ファイル

GnuWin32が配布している以下のファイルをダウンロードします。

  • LibPng for Windowsより
    • libpng-1.2.8-bin.zip(Binaries)
    • libpng-1.2.8-lib.zip(Developer files)
  • Jpeg for Windows
    • jpeg-6b-3-bin.zip(Binaries)
    • jpeg-6b-3-lib.zip(Developer files)
  • Tiff for Windows
    • tiff-3.6.1-2-bin.zip(Binaries)
    • tiff-3.6.1-2-lib.zip(Developer files)
  • FreeType for Windows
    • freetype-2.1.8-bin.zip(Binaries)
    • freetype-2.1.8-lib.zip(Developer files)

これらもTor氏のファイルと同様に展開してください。

なお、libpng,jpeg,tiffがzlibに依存するため、zlib Home SiteからZlib 1.2.1をダウンロードして同様に展開してください。

libxml2関連のWindowsバイナリ(要修正)

ftp://ftp.zlatkovic.com/pub/libxml/ から以下のファイルをダウンロードしてください。

そしてこれらを次の様に展開、インストールします。

 $ unzip libxml2-2.6.17.win32.zip
 $ unzip libxslt-1.1.12+.win32.zip
 $ su
 # cp -R libxml2-2.6.17.win32/* /usr/local/cross-toools/i386-mingw32msvc
 # cp -R libxslt-1.1.12.win32/* /usr/local/cross-toools/i386-mingw32msvc

pkgconfig用ファイル(*.pc)の修正

以下のスクリプトを /usr/local/cross-toools/i386-mingw32msvc/lib/pkgconfig で実行してください。(当然、インストール先を変えていた場合は、TARGETの値を変更する必要があります。)

 #!/bin/sh
 
 TARGET=/usr/local/cross-toools/i386-mingw32msvc
 
 for f in *.pc ; do
    if grep 'prefix=/target' $f >/dev/null 2>&1 ; then
      cat $f | sed s+^prefix=/target+prefix=$TARGET+ > $f.tmp
      mv $f.tmp $f
    fi
 done

以上で環境構築は完了です。

WindowsへのGtk+2ランタイムのインストール

GIMP - Windows installersから、Gtk+2ランタイムを取得し、Windowsへインストールしてください。記事就筆時点での安定版は、version 2.4.14です。

サンプルアプリケーションの構築

#ref(scribble.tar.bz2)

GTK+ 2.0 Tutorialから、拝借したプログラムから、サンプルを作成しました。上記ファイルをダウンロードし展開してできたディレクトリで cross-make.shを実行してください。無事にscribble.exeという実行ファイルが作成されたら、Windowsにコピーし実行できるか確かめてください。

補足

cross-configure.shとcross-make.shにそれぞれ、

 export PKG_CONFIG_PATH="/usr/local/cross-tools/i386-mingw32msvc/lib/pkgconfig"

を追加しておいた方が便利かと思います。