Win32 + MSYS + MinGW 2.0 で SDL の開発環境を構築

Win32 な OS での SDL を使える開発環境の作り方です. MSYS + MinGW 2.0 環境を構築した後に,各ライブラリをソースコードから コンパイルしてインストールする手順です.

必要なファイルをまとめて取得したい人はからどうぞ.

「こんな長い手順全部やってられっか!」 というような人はこちらでコンパイル&インストールしたライブラリ, ヘッダ等をまとめたファイルを <URL:/resources/list/SDL-binary-mingw32.html> に用意しました.

MSYS + MinGW 2.0 環境の構築までやった後に, これらのファイルを適切な場所( /usr/local として見えるディレクトリ )に 展開してください.

以下の手順は Windows 2000 で試したものです.

MinGW について

MinGW : Minimalist GNU For Windows <URL:http://www.mingw.org/> は名前の通り GNU の開発環境,というか主に gcc <URL:http://www.gnu.org/software/gcc/gcc.html> を Windows 上に実装したものの1つです.

MinGW についてのより詳細な情報はMinGW のページ<URL:http://www.mingw.org/> をどうぞ.

Cygwin との違い

同じように GNU の開発環境を Windows 上で提供してくれるものとして Cygwin <URL:http://www.cygwin.com/>というものがありますが, アプローチが異なります.Cygwin は cygwin1.dll というライブラリに UNIX の標準を定めた規格である POSIX 互換な API のエミュレーション層を実装し、 それを利用することにより UNIX 向けに書かれたソフトウェアを移植しています. 対して,MinGW は cygwin1.dll のようなライブラリに依存せずに Win32 ネイティブな API だけを利用します.

つまり MinGW の gcc で作成したプログラムは cygwin1.dll なしで動作します. つまり Cygwin 環境をインストールしていない環境でも動作するということです.

「そんなの cygwin1.dll もプログラムといっしょに配布すればいいのでは?」 と思うかもしれませんが,cygwin1.dll には問題があります.

速度の遅さは POSIX エミュレーション層を用いるためですがこれは それほど致命的ではありません. 問題は2つめのライセンスの方です. cygwin1.dll が GPL であるということは cygwin1.dll をリンクするすべてのプログラム にも GPL が適応されるということです. つまりすべてのソースコードを GPL に従ってと公開する必要があります.

MinGW の基本部分のライセンスはパブリックドメインです. また Win32 API のインポートライブラリとヘッダについても 自由に使うことのできるライセンスとなっています. そのため MinGW を用いた場合 cygwin のようなライセンスの問題は起こりません.

MinGW 2.0 コンパイラのインストール

以下は MinGW のバージョン 2.0 を

D:\mingw

にインストールする手順です.

  1. MinGW のインストール用ファイルを取得

    MinGW のページ からたどって

    を取得します.

  2. MinGW 2.0 インストール

    取得した MinGW-2.0.0-3.exe を実行します. ライセンスの表示と同意確認の画面,とメッセージの表示画面の後に, インストールするディレクトリを選択画面が現われるので,

    D:\mingw

    を選択します. あとは画面の指示に従っていくとインストールが完了します.

  3. Package Updates

    いくつかのアップデートパッケージがあるのでそれを上書きでインストールします. MinGW のダウンロードページ <URL:http://www.mingw.org/download.shtml> の Package Upgrades: というセクションにあるパッケージを取得して /mingw 以下に展開します.今回は以下のパッケージをインストールしました.

MSYS 環境について

MSYS<URL:http://www.mingw.org/msys.shtml> 環境は MinGW<URL:http://www.mingw.org/> の gcc を使って開発をする際に configure スクリプトを実行する ために最低限必要な UNIX like OS のコマンドを提供してくれる環境です.

「gcc って何?」とか 「UNIX って何?」とか 「configure スクリプトって何?」とか っていう人は <URL:http://www.google.co.jp> あたりで調べてください.

MSYS 環境のインストール

以下は MSYS の version 1.0.8 を

D:\MSYS\1.0

にインストールする場合の手順です.

  1. MSYS のインストール用ファイルを取得

    MSYSのページ からリンクを たどって

    を取得します.

  2. MSYS のインストール用ファイルを実行

    MSYS-1.0.8.exe をダブルクリックとかして実行します. すると,ライセンスの表示,インストール場所の確認をしてインストールします. ここでは

    D:\MSYS\1.0

    にインストールすることにします.

    インストールが正常に終ったらいくつか質問されるので適当に答えます. ここでは以下のように答えました.

    This is a post install process that will try to normalize between
    your MinGW install if any as well as your previous MSYS installs
    if any.  I don't have any traps as aborts will not hurt anything.
    Do you wish to continue with the post install? [yn ] y
    
    Do you have MinGW installed? [yn ] y
    
    Please answer the following in the form of c:/foo/bar.
    Where is your MinGW installation? D:/MinGW

    ここでMinGW をインストールした場所を答えると /etc/fstab (D:\MSYS\1.0\etc\fstab)などの設定も適切に行ってくれます。

MinGW 環境設定

/usr/local/lib をコマンド検索パスに追加

これからいくつかのライブラリを /usr/local/ 以下にインストールします. すると /usr/local/lib に dll ファイルがインストールされます. しかし /usr/local/lib がコマンド検索パスに含まれていないため, インストールされる dll を利用するプログラムが MSYS のシェルから実行できません.

ライブラリをインストールするときにDLLファイルをパスの通ったディレクトリに コピーしてもよいのですが、ここでは /usr/local/lib/ にパスを通すことにします。

/usr/local/lib/ をコマンド検索パスに追加するために /etc/profile の

if [ $MSYSTEM == MINGW32 ]; then
  export PATH=".:/usr/local/bin:/mingw/bin:/bin:$PATH"
else
  export PATH=".:/usr/local/bin:/bin:/mingw/bin:$PATH"
fi

という部分の後に,

export PATH="$PATH:/usr/local/lib"

という行を追加します.

MSYS を再起動すれば設定したコマンド検索パスが有効になります.

このコマンド検索パスの設定は MSYS のシェル上だけで有効なものです. つまりフォルダから exe ファイルをダブルクリックした場合には /usr/local/lib に 置かれた DLL ファイルを参照してはくれないということなので, 注意してください.

MinGW の gcc の動作確認

C言語で書かれた適当な プログラムを gcc でコンパイルしてテストしてみます.

例えば以下のようなテストプログラムを hello.c というファイルで 適当なディレクトリに作成します.

#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("hello MinGW world!!\n");
    return 0;
}

作成したらシェルから

$ gcc -o hello hello.c

のようにしてコンパイルします. ここで hello.exe というファイルが生成されればコンパイル成功です. MSYS のシェルやコマンドプロンプトから hello.exe を実行すれば

hello mingw world!

のように表示されるはずです.

DirectX ヘッダのインストール

MinGW の gcc で DirectX を利用したプログラムをコンパイルするためには ヘッダファイルとインポートライブラリが必要です.

MinGW 2.0 にはインポートライブラリの方は含まれているので, ここではヘッダファイルをインストールします.

MinGW 2.0 で DirectX を利用するものとしては例えば SDL があります.

  1. directx-devel.tar.gz の取得

    ming32 用の DirectX のヘッダとインポートライブラリをまとめたものが <URL:http://www.libsdl.org/extras/win32/common/> に用意されているので,これを取得します. ファイルは directx-devel.tar.gz です.

  2. directx-devel.tar.gz の展開

    directx-devel.tar.gz には以下のファイルが含まれています.

    この中からヘッダファイル

    を取り出します.

    取得したファイルが /mingw/directx-devel.tar.gz にあるとして,/mingw に展開します.

    $ cd /mingw 
    $ tar xvfz directx-devel.tar.gz include/ddraw.h include/dinput.h \
      include/d3dtypes.h include/dsound.h include/directx.h

nasm.exe のインストール

nasm.exe を

/usr/local/bin/ 

にインストールします.

  1. nasm.exe の取得

    コンパイル済みのものが, <URL:http://www.libsdl.org/extras/win32/mingw32/> に用意されているので取得します. ファイルは <URL:http://www.libsdl.org/extras/win32/mingw32/nasm.exe> です.

  2. nasm.exe のコピー

    取得したファイルを /usr/local/bin/nasm.exe にコピーします. /usr/local や /usr/local/bin ディレクトリが存在しない場合は作ってから コピーします.

    $ mkdir /usr/local/
    $ mkdir /usr/local/bin
    $ cp nasm.exe /usr/local/bin

SDL のインストール

ここでは SDL-1.2.6 を /usr/local の下にインストールします.

今後インストールする他のライブラリもすべてこのディレクトリ の下にインストールすることにします.

  1. SDL-1.2.6 のソースコードを取得

    SDL 1.2 のダウンロードページ <URL:http://www.libsdl.org/download-1.2.php> から SDL-1.2.6.tar.gz <URL:http://www.libsdl.org/release/SDL-1.2.6.tar.gz> を取得します.

  2. SDL-1.2.6 のソースコードを展開

    $ tar xvfz SDL-1.2.6.tar.gz
  3. SDL-1.2.6 をコンパイル

    $ cd SDL-1.2.6
    $ env CFLAGS="-g -O2 -I/usr/local/include" sh configure --prefix=/usr/local
    $ make 
  4. SDL-1.2.6 をインストール

    $ make install

    これで /usr/local/ 以下に SDL のヘッダ,ライブラリがインストールされます.

SDL の動作確認

SDL_mixer について

事前要求
ライセンス

SDL_mixer <URL:http://www.libsdl.org/projects/SDL_mixer/> は SDL のオーディオ機能上に構築されたミキサーライブラリです. 8チャネルの効果音と,1チャネルのBGMをミキシングする機能を持っています.

BGMとして利用できるファイルのフォーマットには以下のものがあります.

このうち

はそれぞれ

を利用しており必要なソースコードが SDL_mixer のソースコードに含まれています.

しかし,

は別途以下のライブラリがインストールされている状態で SDL_mixer をインストールした場合にのみ利用できるようになります.

smpeg のインストール

smpeg ライブラリを

/usr/local

以下にインストールします.

  1. smpeg のソースコードを取得

    smpeg のページ <URL:http://www.lokigames.com/development/smpeg.php3> からリンクをたどって,例えば <URL:ftp://sunsite.dk/pub/os/linux/loki/open-source/smpeg/> などから <URL:ftp://sunsite.dk/pub/os/linux/loki/open-source/smpeg/smpeg-0.4.4.tar.gz> を取得します.

  2. smpeg のソースコードを展開

    $ tar xvfz smpeg-0.4.4.tar.gz
  3. smpeg をコンパイル

    gcc version 3 以降(?)で C++ なプログラムを コンパイルする場合に -lstdc++ オプションが必要な場合があるみたいです. そのために環境変数を設定してから configure スクリプトを実行します.

    $ cd smpeg-0.4.4
    $ env LIBS="-lstdc++" sh configure --prefix=/usr/local
    $ make 
  4. smpeg をインストール コンパイルが正常に終了したらインストールします.

    $ make install

libogg のインストール

libogg ライブラリを

/usr/local

以下にインストールします.

  1. libogg のソースコードを取得

    Ogg Vorbis のダウンロードページ(UNIX) <URL:http://www.vorbis.com/download_unix.psp> から <URL:http://fatpipe.vorbis.com/files/1.0/unix/libogg-1.0.tar.gz> を取得します.

    なお Ogg Vorbis のダウンロードページ(Windows) <URL:http://www.vorbis.com/download_win.psp> に WIN32 環境で動く ogg のエンコーダやプレイヤーもあるので,必要なら 別途インストールするといいでしょう.

  2. libogg のソースコードを展開

    $ tar xvfz libogg-1.0.tar.gz
  3. libogg をコンパイル MinGW 2.0 でコンパイルするためにパッチ libogg-MinGW-2.0.patchを当てます.

    $ cd libogg-1.0
    $ patch -p1 < libogg-MinGW-2.0.patch
  4. libogg をコンパイル

    $ sh configure --prefix=/usr/local
    $ make 
  5. libogg をインストール

    $ make install

libvorbis のインストール

libvorbis ライブラリを

/usr/local

以下にインストールします.

  1. libvorbis のソースコードを取得

    libogg と同様に Ogg Vorbis のダウンロードページ(UNIX) <URL:http://www.vorbis.com/download_unix.psp> から <URL:http://fatpipe.vorbis.com/files/1.0/unix/libvorbis-1.0.tar.gz> を取得します.

  2. libvorbis のソースコードを展開

    $ tar xvfz libvorbis-1.0.tar.gz
  3. libvorbis をコンパイル

    $ cd libvorbis-1.0
    $ sh configure --prefix=/usr/local
    $ make 
  4. libvorbis をインストール

    $ make install

SDL_mixer のインストール

SDL_mixer を

/usr/local

以下にインストールします.

  1. SDL_mixer のソースコードを取得

    SDL_mixer のページ <URL:http://www.libsdl.org/projects/SDL_mixer/> から SDL_mixer-1.2.5.tar.gz <URL:http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.5.tar.gz> を取得します.

  2. SDL_mixer のソースコードを展開

    $ tar xvfz SDL_mixer-1.2.5.tar.gz
  3. SDL_mixer をコンパイル

    Ogg-Vorbis のサポートに必要ないくつかのヘッダファイルを自動で 見つけてくれないので,環境変数 CFLAGS を設定します. さらに libsmpeg のテストで core dump して失敗してしまったので, smpeg-test を無効にします.

    $ cd SDL_mixer-1.2.5
    $ env CFLAGS="-g -O2 -I/usr/local/include/" sh configure \
      --prefix=/usr/local --disable-smpegtest
    $ make 
  4. SDL_mixer をインストール

    $ make install

SDL_mixer の動作確認

こちらで用意した SDL_mixer のテストプログラムで SDL_mixer の動作テストをしてみましょう.

  1. SDL_mixerのテストプログラムのソースコードを取得

    <URL:/resources/list/SDL-test.html> に用意した mixer-test.tar.gz <URL:/resources/files/SDL_mixer/mixer-test.tar.gz> を取得してください.

  2. mixer-test のソースコードを展開

    $ tar xvfz mixer-test.tar.gz
  3. mixer-test をコンパイル

    $ cd mixer-test
    $ make
  4. テスト

    コンパイルがうまくいったらできあがったファイルを実行します.

    それぞれ再生されれば OK です.

SDL_image について

事前要求
ライセンス

SDL は標準で SDL_LoadBMP() 関数を利用した BMP ファイルのロードしかできません.

SDL_image <URL:http://www.libsdl.org/projects/SDL_image/> は各種画像ファイルから SDL_Surface を生成するためのライブラリです.

SDL_image を利用することで以下の画像フォーマットをロードできるようになります..

このうち

はそれぞれ以下のライブラリがインストールされている状態で SDL_image をビルドした場合にのみ利用できるようになります.

また libpng をコンパイルするのに

も必要です.

JPEG Software のインストール

まず JPEG Software をインストールします.

  1. JPEG Software のソースコードを取得

    Independent JPEG Group からリンクをたどって, jpegsrc.v6b.tar.gz を取得します.

  2. JPEG Software のソースコードを展開

    $ tar xvfz jpegsrc.v6b.tar.gz
  3. JPEG Software をコンパイル

    $ cd jpeg-6b
    $ sh configure --prefix=/usr/local
    $ make 
  4. JPEG Software をインストール

    コンパイルが正常に終了したらインストールします.

    $ make install
    $ make install-lib

zlib のインストール

zlib ライブラリを

/usr/local/

以下にインストールします.

  1. zlib のソースコードを取得

    zlib のページ<URL:http://www.gzip.org/zlib/> から <URL:http://www.libpng.org/pub/png/src/zlib-1.1.4.tar.gz> を取得します.

  2. zlib のソースコードを展開

    $ tar xvfz zlib-1.1.4.tar.gz
  3. zlib をコンパイル

    $ cd zlib-1.1.4
    $ sh configure 
    $ make 
  4. zlib をインストール

    $ make install

libpng のインストール

libpng を

/usr/local/

以下にインストールします.

この手順では static link library のみが作られます.

  1. libpng のソースコードを取得

    libpng のページ <URL:http://www.libpng.org/pub/png/libpng.html> から <URL:http://www.libpng.org/pub/png/src/libpng-1.2.5.tar.gz> を取得します.

  2. libpng のソースコードを展開

    $ tar xvfz libpng-1.2.5.tar.gz
  3. libpng をコンパイル

    libpng-1.2.5 では configure スクリプトが使えないようなので scripts/makefile.std をベースに Makefile を作成します.

    $ cd libpng-1.2.5
    $ cp scripts/makefile.std ./Makefile

    コピーしてできた Makefile の

    #ZLIBLIB= /usr/local/lib
    #ZLIBINC= /usr/local/include
    ZLIBLIB= ../zlib
    ZLIBINC= ../zlib

    の部分を

    ZLIBLIB= /usr/local/lib
    ZLIBINC= /usr/local/include
    #ZLIBLIB= ../zlib
    #ZLIBINC= ../zlib

    に変更します.さらに,

    CC=cc

    という行を

    CC=gcc

    のように,おまけに

    CFLAGS=-I$(ZLIBINC) -O # -g -DPNG_DEBUG=5

    という行を

    CFLAGS=-I$(ZLIBINC) -O2 # -g -DPNG_DEBUG=5

    のように変更します.

    Makefile ができたら.

    $ make 

    でビルドします.

  4. libpng をインストール

    あとは

    $ make install

    のようにしてインストールすればOKです.

SDL_image のインストール

SDL_image を

/usr/local/

以下にインストールします.

  1. SDL_image のソースコードを取得

    SDL_image のページ <URL:http://www.libsdl.org/projects/SDL_image/> から SDL_image-1.2.3.tar.gz <URL:http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.3.tar.gz> を取得します.

  2. SDL_image のソースコードを展開

    あとはお決りのパターンで…

    $ tar xvfz SDL_image-1.2.3.tar.gz
  3. SDL_image をコンパイル jpegのサポートに必要ないくつかのヘッダファイルを自動で見つけてくれなかったので, 環境変数を設定してから configure スクリプトを実行します.

    $ cd SDL_image-1.2.3
    $ env CFLAGS="-O2 -I/usr/local/include/" sh configure --prefix=/usr/local
    $ make 
  4. SDL_image をインストール

    $ make install

SDL_image の動作確認

こちらで用意した SDL_image のテストプログラムで SDL_image の動作テストをします.

  1. SDL_imageのテストプログラムのソースコードを取得

    <URL:/resources/list/SDL-test.html>に用意した <URL:/resources/files/SDL_image/image-test.tar.gz> を取得してください.

  2. image-test のソースコードを展開

    $ tar xvfz image-test.tar.gz
  3. image-test をコンパイル

    $ cd image-test
    $ make
  4. テスト

    コンパイルがうまくいったらできあがったファイルを実行します.

    $ sdl_image.exe
    $ sdl_image.exe images/background.jpg
    $ sdl_image.exe images/background.png
    $ sdl_image.exe images/background.bmp images/text.png
    $ sdl_image.exe images/background.bmp images/text.jpg
    $ sdl_image.exe images/background.bmp images/text-transparency.png

    画像が表示されれば OK です.

    最期の2つ

    $ sdl_image.exe images/background.bmp images/text.jpg
    $ sdl_image.exe images/background.bmp images/text-transparency.png

    の実行結果に注目して,何故こうなるのかを考えてみるといいでしょう.

SDL_ttf について

事前要求
ライセンス

SDL は標準でフォントを用いた文字列の描画機能がありません.

SDL_ttf は TrueType フォントを使って文字列を描画した SDL_Surface を 生成するためのライブラリです.

ようするに TrueType フォントで文字列の描画ができるようなるってことです.

SDL_ttf は freetype を利用してフォントを描画するので SDL_ttf をインストールする前に freetype をインストールしておく必要があります.

freetype のインストール

freetype ライブラリを

/usr/local/

以下にインストールします.

  1. freetype の取得

    freetype のページ <URL:http://www.freetype.org/> からリンクをたどって <URL:ftp://ring.asahi-net.or.jp/pub/graphics/freetype/freetype2/freetype-2.1.4.tar.gz> を取得します.

  2. freetype のソースコードを展開

    $ gunzip freetype-2.1.4.tar.gz
    $ tar xvf freetype-2.1.4.tar
  3. freetype をコンパイル

    $ cd freetype-2.1.4
    $ sh configure 
    $ make 
  4. freetype をインストール

    $ make install

SDL_ttf のインストール

  1. SDL_ttf の取得

    SDL_ttf からリンクをたどって SDL_ttf-2.0.6.tar.gz を取得します.

  2. SDL_ttf のソースコードを展開

    $ gunzip SDL_ttf-2.0.6.tar.gz
    $ tar xvf SDL_ttf-2.0.6.tar
  3. SDL_ttf をコンパイル

    $ cd SDL_ttf-2.0.6
    $ sh configure --prefix=/usr/local
    $ make 
  4. SDL_ttf をインストール

    $ make install

SDL_ttf の動作確認

こちらで用意した SDL_ttf のテストプログラムで SDL_ttf の動作テストをします.

  1. SDL_ttfのテストプログラムのソースコードを取得

    <URL:/resources/list/SDL-test.html> に用意した <URL:/resources/files/SDL_ttf/ttf-test.tar.gz> を取得してください.

  2. ttf-test のソースコードを展開

    $ tar xvfz ttf-test.tar.gz
  3. ttf-test をコンパイル

    $ cd ttf-test
    $ make
  4. テスト

    コンパイルがうまくいったらできあがったファイルを実行します.

    $ sdl_ttf.exe
    $ sdl_ttf.exe [<font size>] 
    $ sdl_ttf.exe [<font size>] [<font file>]

    ちゃんと文字列が描画されれば OK です.

SDL_net について

事前要求
ライセンス

SDL_net <URL:http://www.libsdl.org/projects/SDL_net/> はプラットフォームに依存しないTCP/IP通信のためのライブラリです.

ネットワークゲームのような TCP/IP 通信を使用するアプリケーション を作成したい場合にインストールしましょう.

SDL_net のインストール

SDL_net を /usr/local 以下にインストールする手順です.

  1. SDL_net のソースコードを取得

    SDL_net のページ <URL:http://www.libsdl.org/projects/SDL_net/> から SDL_net-1.2.5.tar.gz <URL:http://www.libsdl.org/projects/SDL_net/release/SDL_net-1.2.5.tar.gz> を取得します.

  2. SDL_net のソースコードを展開

    $ tar xvfz SDL_net-1.2.5.tar.gz
  3. SDL_net をコンパイル

    $ cd SDL_net-1.2.5
    $ sh configure --prefix=/usr/local
    $ make 
  4. SDL_net をインストール

    $ make install

SDL_gfx について

事前要求
ライセンス

SDL の描画 API には SDL_FillRect() (矩形の塗りつぶし)と SDL_BlitSurface() (画像の転送)だけであり, それ以外はメモリ領域を直接編集しなければなりません.

SDL_gfx <URL:http://www.ferzkopp.net/Software/SDL_gfx-2.0/> は SDL の描画周りの API に以下の機能を追加してくれる拡張ライブラリです.

SDL_gfx のインストール

SDL_gfx を

/usr/local/

以下にインストールします.

  1. SDL_gfx のソースコードを取得

    SDL_gfx のページ <URL:http://www.ferzkopp.net/Software/SDL_gfx-2.0/> から SDL_gfx-2.0.7.tar.gz <URL:http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.7.tar.gz> を取得します.

  2. SDL_gfx のソースコードを展開

    あとはお決りのパターンで…

    $ tar xvfz SDL_gfx-2.0.7.tar.gz
  3. SDL_gfx をコンパイル

    $ cd SDL_gfx-2.0.7
    $ sh configure --prefix=/usr/local
    $ make 
  4. SDL_gfx をインストール

    $ make install

SDL_gfx の動作確認

SDL_gfx のソースコードにテストプログラムが入っているので これで SDL_gfx の動作テストをします.

  1. SDL_gfx のテストプログラムのディレクトリに移動

    $ cd SDL_gfx-2.0.3/Test/
  2. テストプログラムをコンパイル

    $ sh configure 
    $ make 
  3. テスト

    コンパイルがうまくいったらできあがったファイルを実行しましょう.