Win32 な OS での SDL を使える開発環境の作り方です. MSYS + MinGW 2.0 環境を構築した後に,各ライブラリをソースコードから コンパイルしてインストールする手順です.
必要なファイルをまとめて取得したい人はからどうぞ.
「こんな長い手順全部やってられっか!」 というような人はこちらでコンパイル&インストールしたライブラリ, ヘッダ等をまとめたファイルを <URL:/resources/list/SDL-binary-mingw32.html> に用意しました.
MSYS + MinGW 2.0 環境の構築までやった後に, これらのファイルを適切な場所( /usr/local として見えるディレクトリ )に 展開してください.
以下の手順は Windows 2000 で試したものです.
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/> をどうぞ.
同じように 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 を
D:\mingw
にインストールする手順です.
MinGW のインストール用ファイルを取得
MinGW のページ からたどって
を取得します.
MinGW 2.0 インストール
取得した MinGW-2.0.0-3.exe を実行します. ライセンスの表示と同意確認の画面,とメッセージの表示画面の後に, インストールするディレクトリを選択画面が現われるので,
D:\mingw
を選択します. あとは画面の指示に従っていくとインストールが完了します.
Package Updates
いくつかのアップデートパッケージがあるのでそれを上書きでインストールします. MinGW のダウンロードページ <URL:http://www.mingw.org/download.shtml> の Package Upgrades: というセクションにあるパッケージを取得して /mingw 以下に展開します.今回は以下のパッケージをインストールしました.
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 の version 1.0.8 を
D:\MSYS\1.0
にインストールする場合の手順です.
MSYS のインストール用ファイルを取得
MSYSのページ からリンクを たどって
を取得します.
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)などの設定も適切に行ってくれます。
これからいくつかのライブラリを /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 ファイルを参照してはくれないということなので, 注意してください.
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!
のように表示されるはずです.
MinGW の gcc で DirectX を利用したプログラムをコンパイルするためには ヘッダファイルとインポートライブラリが必要です.
MinGW 2.0 にはインポートライブラリの方は含まれているので, ここではヘッダファイルをインストールします.
MinGW 2.0 で DirectX を利用するものとしては例えば SDL があります.
directx-devel.tar.gz の取得
ming32 用の DirectX のヘッダとインポートライブラリをまとめたものが <URL:http://www.libsdl.org/extras/win32/common/> に用意されているので,これを取得します. ファイルは directx-devel.tar.gz です.
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 を
/usr/local/bin/
にインストールします.
nasm.exe の取得
コンパイル済みのものが, <URL:http://www.libsdl.org/extras/win32/mingw32/> に用意されているので取得します. ファイルは <URL:http://www.libsdl.org/extras/win32/mingw32/nasm.exe> です.
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-1.2.6 を /usr/local の下にインストールします.
今後インストールする他のライブラリもすべてこのディレクトリ の下にインストールすることにします.
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> を取得します.
SDL-1.2.6 のソースコードを展開
$ tar xvfz SDL-1.2.6.tar.gz
SDL-1.2.6 をコンパイル
$ cd SDL-1.2.6 $ env CFLAGS="-g -O2 -I/usr/local/include" sh configure --prefix=/usr/local $ make
SDL-1.2.6 をインストール
$ make install
これで /usr/local/ 以下に SDL のヘッダ,ライブラリがインストールされます.
テストプログラムのコンパイルと実行
SDL のソースコードを展開したディレクトリ中の test という ディレクトリに SDL のテストプログラムが用意されています. これを使って SDL が正常に動作するかどうかテストします.
$ cd SDL-1.X.X $ cd test $ sh configure $ make
できあがった実行ファイル( testwin など) を実行して動作すれば OK です.
SDL_mixer <URL:http://www.libsdl.org/projects/SDL_mixer/> は SDL のオーディオ機能上に構築されたミキサーライブラリです. 8チャネルの効果音と,1チャネルのBGMをミキシングする機能を持っています.
BGMとして利用できるファイルのフォーマットには以下のものがあります.
このうち
はそれぞれ
を利用しており必要なソースコードが SDL_mixer のソースコードに含まれています.
しかし,
は別途以下のライブラリがインストールされている状態で SDL_mixer をインストールした場合にのみ利用できるようになります.
smpeg ライブラリを
/usr/local
以下にインストールします.
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> を取得します.
smpeg のソースコードを展開
$ tar xvfz smpeg-0.4.4.tar.gz
smpeg をコンパイル
gcc version 3 以降(?)で C++ なプログラムを コンパイルする場合に -lstdc++ オプションが必要な場合があるみたいです. そのために環境変数を設定してから configure スクリプトを実行します.
$ cd smpeg-0.4.4 $ env LIBS="-lstdc++" sh configure --prefix=/usr/local $ make
smpeg をインストール コンパイルが正常に終了したらインストールします.
$ make install
libogg ライブラリを
/usr/local
以下にインストールします.
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 のエンコーダやプレイヤーもあるので,必要なら 別途インストールするといいでしょう.
libogg のソースコードを展開
$ tar xvfz libogg-1.0.tar.gz
libogg をコンパイル MinGW 2.0 でコンパイルするためにパッチ libogg-MinGW-2.0.patchを当てます.
$ cd libogg-1.0 $ patch -p1 < libogg-MinGW-2.0.patch
libogg をコンパイル
$ sh configure --prefix=/usr/local $ make
libogg をインストール
$ make install
libvorbis ライブラリを
/usr/local
以下にインストールします.
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> を取得します.
libvorbis のソースコードを展開
$ tar xvfz libvorbis-1.0.tar.gz
libvorbis をコンパイル
$ cd libvorbis-1.0 $ sh configure --prefix=/usr/local $ make
libvorbis をインストール
$ make install
SDL_mixer を
/usr/local
以下にインストールします.
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> を取得します.
SDL_mixer のソースコードを展開
$ tar xvfz SDL_mixer-1.2.5.tar.gz
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
SDL_mixer をインストール
$ make install
こちらで用意した SDL_mixer のテストプログラムで SDL_mixer の動作テストをしてみましょう.
SDL_mixerのテストプログラムのソースコードを取得
<URL:/resources/list/SDL-test.html> に用意した mixer-test.tar.gz <URL:/resources/files/SDL_mixer/mixer-test.tar.gz> を取得してください.
mixer-test のソースコードを展開
$ tar xvfz mixer-test.tar.gz
mixer-test をコンパイル
$ cd mixer-test $ make
テスト
コンパイルがうまくいったらできあがったファイルを実行します.
指定したファイルをBGMとして10秒だけ再生
$ ./play-bgm.exe $ ./play-bgm.exe sounds/chopin_vlase64_1-20s.wav $ ./play-bgm.exe sounds/chopin_vlase64_1-20s.ogg $ ./play-bgm.exe sounds/chopin_vlase64_1-20s.mp3
コンパイル時にサポートしたフォーマットが再生されれば OK です.
スペースキーが押されたら指定したファイルを再生
$ ./sound-effect.exe $ ./sound-effect.exe sounds/drum.wav $ ./sound-effect.exe sounds/dora.wav
BGMを無限ループで再生しならがらスペースキーが押されたら指定したファイルを再生
$ ./mixing.exe $ ./mixing.exe sounds/drum.wav $ ./mixing.exe sounds/dora.wav
それぞれ再生されれば OK です.
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 のソースコードを取得
Independent JPEG Group からリンクをたどって, jpegsrc.v6b.tar.gz を取得します.
JPEG Software のソースコードを展開
$ tar xvfz jpegsrc.v6b.tar.gz
JPEG Software をコンパイル
$ cd jpeg-6b $ sh configure --prefix=/usr/local $ make
JPEG Software をインストール
コンパイルが正常に終了したらインストールします.
$ make install $ make install-lib
zlib ライブラリを
/usr/local/
以下にインストールします.
zlib のソースコードを取得
zlib のページ<URL:http://www.gzip.org/zlib/> から <URL:http://www.libpng.org/pub/png/src/zlib-1.1.4.tar.gz> を取得します.
zlib のソースコードを展開
$ tar xvfz zlib-1.1.4.tar.gz
zlib をコンパイル
$ cd zlib-1.1.4 $ sh configure $ make
zlib をインストール
$ make install
libpng を
/usr/local/
以下にインストールします.
この手順では static link library のみが作られます.
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> を取得します.
libpng のソースコードを展開
$ tar xvfz libpng-1.2.5.tar.gz
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
でビルドします.
libpng をインストール
あとは
$ make install
のようにしてインストールすればOKです.
SDL_image を
/usr/local/
以下にインストールします.
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> を取得します.
SDL_image のソースコードを展開
あとはお決りのパターンで…
$ tar xvfz SDL_image-1.2.3.tar.gz
SDL_image をコンパイル jpegのサポートに必要ないくつかのヘッダファイルを自動で見つけてくれなかったので, 環境変数を設定してから configure スクリプトを実行します.
$ cd SDL_image-1.2.3 $ env CFLAGS="-O2 -I/usr/local/include/" sh configure --prefix=/usr/local $ make
SDL_image をインストール
$ make install
こちらで用意した SDL_image のテストプログラムで SDL_image の動作テストをします.
SDL_imageのテストプログラムのソースコードを取得
<URL:/resources/list/SDL-test.html>に用意した <URL:/resources/files/SDL_image/image-test.tar.gz> を取得してください.
image-test のソースコードを展開
$ tar xvfz image-test.tar.gz
image-test をコンパイル
$ cd image-test $ make
テスト
コンパイルがうまくいったらできあがったファイルを実行します.
$ 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 は標準でフォントを用いた文字列の描画機能がありません.
SDL_ttf は TrueType フォントを使って文字列を描画した SDL_Surface を 生成するためのライブラリです.
ようするに TrueType フォントで文字列の描画ができるようなるってことです.
SDL_ttf は freetype を利用してフォントを描画するので SDL_ttf をインストールする前に freetype をインストールしておく必要があります.
freetype ライブラリを
/usr/local/
以下にインストールします.
freetype の取得
freetype のページ <URL:http://www.freetype.org/> からリンクをたどって <URL:ftp://ring.asahi-net.or.jp/pub/graphics/freetype/freetype2/freetype-2.1.4.tar.gz> を取得します.
freetype のソースコードを展開
$ gunzip freetype-2.1.4.tar.gz $ tar xvf freetype-2.1.4.tar
freetype をコンパイル
$ cd freetype-2.1.4 $ sh configure $ make
freetype をインストール
$ make install
SDL_ttf の取得
SDL_ttf からリンクをたどって SDL_ttf-2.0.6.tar.gz を取得します.
SDL_ttf のソースコードを展開
$ gunzip SDL_ttf-2.0.6.tar.gz $ tar xvf SDL_ttf-2.0.6.tar
SDL_ttf をコンパイル
$ cd SDL_ttf-2.0.6 $ sh configure --prefix=/usr/local $ make
SDL_ttf をインストール
$ make install
こちらで用意した SDL_ttf のテストプログラムで SDL_ttf の動作テストをします.
SDL_ttfのテストプログラムのソースコードを取得
<URL:/resources/list/SDL-test.html> に用意した <URL:/resources/files/SDL_ttf/ttf-test.tar.gz> を取得してください.
ttf-test のソースコードを展開
$ tar xvfz ttf-test.tar.gz
ttf-test をコンパイル
$ cd ttf-test $ make
テスト
コンパイルがうまくいったらできあがったファイルを実行します.
$ sdl_ttf.exe $ sdl_ttf.exe [<font size>] $ sdl_ttf.exe [<font size>] [<font file>]
ちゃんと文字列が描画されれば OK です.
SDL_net <URL:http://www.libsdl.org/projects/SDL_net/> はプラットフォームに依存しないTCP/IP通信のためのライブラリです.
ネットワークゲームのような TCP/IP 通信を使用するアプリケーション を作成したい場合にインストールしましょう.
SDL_net を /usr/local 以下にインストールする手順です.
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> を取得します.
SDL_net のソースコードを展開
$ tar xvfz SDL_net-1.2.5.tar.gz
SDL_net をコンパイル
$ cd SDL_net-1.2.5 $ sh configure --prefix=/usr/local $ make
SDL_net をインストール
$ make install
SDL の描画 API には SDL_FillRect() (矩形の塗りつぶし)と SDL_BlitSurface() (画像の転送)だけであり, それ以外はメモリ領域を直接編集しなければなりません.
SDL_gfx <URL:http://www.ferzkopp.net/Software/SDL_gfx-2.0/> は SDL の描画周りの API に以下の機能を追加してくれる拡張ライブラリです.
SDL_gfx を
/usr/local/
以下にインストールします.
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> を取得します.
SDL_gfx のソースコードを展開
あとはお決りのパターンで…
$ tar xvfz SDL_gfx-2.0.7.tar.gz
SDL_gfx をコンパイル
$ cd SDL_gfx-2.0.7 $ sh configure --prefix=/usr/local $ make
SDL_gfx をインストール
$ make install
SDL_gfx のソースコードにテストプログラムが入っているので これで SDL_gfx の動作テストをします.
SDL_gfx のテストプログラムのディレクトリに移動
$ cd SDL_gfx-2.0.3/Test/
テストプログラムをコンパイル
$ sh configure $ make
テスト
コンパイルがうまくいったらできあがったファイルを実行しましょう.