この記事は古いものです 最新版 をどうぞ.
Win32 な OS での SDL を使える開発環境の作り方です. cygwin 環境を構築した後に,各ライブラリをソースコードから コンパイルしてインストールする手順です.
ここでは cygwin のパッケージですでにインストールされているライブラリでも mingw32 モードで再度コンパイル,インストールしています.
必要なファイルをまとめて取得したい人はからどうぞ.
以下の手順は Windows 2000 で試したものです.
とりあえず cygwin <URL:http://www.cygwin.com/> をインストールします.
<URL:http://www.ring.gr.jp/> などにもミラーリングされてので,近くのミラーサイトから <URL:http://www.ring.gr.jp/archives/pc/gnu-win32/setup.exe> を取得します.
あとは setup.exe を実行して,インストーラの指示に従って,
等を選択して終了です.
ここではインストール先を
D:\cygwin
に,パッケージの置き場所を
D:\cygwin-pkg
に指定し,インストールできる全てのパッケージをインストールしました.
ライブラリをソースコードからインストールした場合などに DLL ファイルが
/usr/local/lib
にインストールされるものもあるので,このディレクトリをコマンド検索パスに 追加します.
また mingw32 モードでソースコードからコンパイルしたライブラリを,
/usr/local/mingw32
以下のディレクトリにインストールすることにします. そのため
/usr/local/mingw32/bin /usr/local/mingw32/lib
もコマンド検索パスに追加します.
/etc/profile の
PATH="/usr/local/bin:/usr/bin:/bin:$PATH"
という部分を
PATH="/usr/local/bin:/usr/bin:/bin:$PATH" PATH="/usr/local/lib:$PATH" PATH="/usr/local/mingw32/bin:$PATH" PATH="/usr/local/mingw32/lib:$PATH"
のように変更します.
C言語で書かれた適当な プログラムを gcc の mingw32 モードでコンパイルして テストしてみます.
例えば以下のようなテストプログラムを 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 というファイルが生成されればコンパイル成功です.
cygwin のシェルやコマンドプロンプトから hello.exe を実行すれば
hello mingw world!
のように表示されるはずです.
リンクしている DLL を以下のようにして調べてみます.
objdump -p hello.exe | grep dll DLL Name: cygwin1.dll DLL Name: msvcrt.dll DLL Name: KERNEL32.dll
ここでは cygwin1.dll をリンクしていることが分ります.
cygwin の gcc で mingw32 モードでコンパイルするには -mno-cygwin オプション を付けます. 先程の hello.c を
$ gcc -o hello hello.c -mno-cygwin
のようにコンパイルして,チェックすると,
objdump -p hello.exe | grep dll DLL Name: msvcrt.dll DLL Name: KERNEL32.dll
のようになります.
DLL Name: cygwin1.dll
という行が出力されなければ cygwin1.dll に依存しない実行ファイルの完成となり, gcc のテスト完了です.
cygwin の gcc で DirectX を利用したプログラムをコンパイルするために必要な ヘッダとインポートライブラリをインストールします.
cygwin の gcc の mingw32 モードで DirectX を利用するものとしては例えば SDL があります.
directx-devel.tar.gz の取得
ming32 用の DirectX のヘッダとライブラリをまとめたものが <URL:http://www.libsdl.org/extras/win32/cygwin/> に用意されているので,これを取得します. ファイルは directx-devel.tar.gz です.
directx-devel.tar.gz の展開
取得したファイルが /usr/directx-devel.tar.gz にあるとして,/usr に展開します.
$ cd /usr $ tar xvfz directx-devel.tar.gz
ここでは SDL-1.2.5 を /usr/local/mingw32 の下にインストールします.
今後インストールする他のライブラリもすべてこのディレクトリ の下にインストールすることにします.
SDL-1.2.5 のソースコードを取得
SDL 1.2 のダウンロードページ <URL:http://www.libsdl.org/download-1.2.php> から SDL-1.2.5.tar.gz <URL:http://www.libsdl.org/release/SDL-1.2.5.tar.gz> を取得します.
SDL-1.2.5 のソースコードを展開
$ tar xvfz SDL-1.2.5.tar.gz
SDL-1.2.5 をコンパイル
$ cd SDL-1.2.5 $ env CFLAGS="-O2 " sh configure --prefix=/usr/local/mingw32 $ make
SDL-1.2.5 をインストール
$ make install
これで /usr/local/mingw32 以下に 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/mingw32
以下にインストールします.
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 CFLAGS="-O2" LIBS="-lstdc++" sh configure --prefix=/usr/local/mingw32 $ make
smpeg をインストール
コンパイルが正常に終了したらインストールします.
$ make install
libogg ライブラリを mingw32 モードで( -mno-cygwin オプション付で) コンパイルして
/usr/local/mingw32
以下にインストールします.
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 をコンパイル
mingw32 モードでコンパイルするためにいくつか環境変数を設定してから コンパイルします.
$ cd libogg-1.0 $ env CC="gcc -mno-cygwin" CFLAGS="-O2 -I/usr/include/mingw/g++-3/" \ sh configure --prefix=/usr/local/mingw32 $ make
libogg をインストール
$ make install
libvorbis ライブラリを mingw32 モードで( -mno-cygwin オプション付で )コンパイルして
/usr/local/mingw32
以下にインストールします.
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 をコンパイル
mingw32 モードでコンパイルするためにいくつか環境変数を設定してから コンパイルします.
$ cd libvorbis-1.0 $ env CC="gcc -mno-cygwin" CFLAGS="-I/usr/include/mingw/g++-3/" \ sh configure --prefix=/usr/local/mingw32 $ make
libvorbis をインストール
$ make install
SDL_mixer を
/usr/local/mingw32
以下にインストールします.
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 のサポートに必要ないくつかのヘッダファイルを自動で 見つけてくれないので,環境変数を設定してから configure スクリプトを 実行します.
$ cd SDL_mixer-1.2.5 $ env CFLAGS="-O2 -I/usr/local/mingw32/include/ -I/usr/include/mingw/g++-3/" \ sh configure --prefix=/usr/local/mingw32 $ 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 を mingw32 モードで( -mno-cygwin オプション付で ) コンパイルして
/usr/local/mingw32
にインストールします.
JPEG Software のソースコードを取得
Independent JPEG Group からリンクをたどって, jpegsrc.v6b.tar.gz を取得します.
JPEG Software のソースコードを展開
$ tar xvfz jpegsrc.v6b.tar.gz
JPEG Software をコンパイル
mingw32 モードでコンパイルするために環境変数を設定してから コンパイルします.
$ cd jpeg-6b $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure --prefix=/usr/local/mingw32 $ make
JPEG Software をインストール
コンパイルが正常に終了したらインストールします.
$ make install $ make install-lib
zlib ライブラリを mingw32 モードで( -mno-cygwin オプション付で )コンパイルして
/usr/local/mingw32
以下にインストールします.
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 をコンパイル mingw32 モードでコンパイルするために環境変数を設定します.
$ cd zlib-1.1.4 $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure \ --prefix=/usr/local/mingw32 $ make
zlib をインストール
$ make install
libpng を mingw32 モードで( -mno-cygwin オプション付で )コンパイルして
/usr/local/mingw32
以下にインストールします.
この手順では 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 ZLIBLIB= /usr/local/mingw32/lib ZLIBINC= /usr/local/mingw32/include
に変更します.さらに,
prefix=/usr/local
という行を
prefix=/usr/local/mingw32
に,
CC=cc
という行を
CC=gcc -mno-cygwin
のように,おまけに
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/mingw32
以下にインストールします.
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/mingw32/include/ " \ sh configure --prefix=/usr/local/mingw32 $ 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 ライブラリを mingw32 モードで ( -mno-cygwin オプション付きで) コンパイルして,
/usr/local/mingw32
以下にインストールします.
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 をコンパイル
mingw32 モードでコンパイルするために環境変数を設定してから コンパイルします.
$ cd freetype-2.1.4 $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure \ --prefix=/usr/local/mingw32 $ make
freetype をインストール
$ make install
SDL_ttf ライブラリを mingw32 モードで ( -mno-cygwin オプション付きで) コンパイルして,
/usr/local/mingw32
以下にインストールします.
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 をコンパイル
cygwin のパッケージによって /usr/X11R6/ 以下に X 用の freetype が インストールされていると,configure スクリプトがそちらを使おうとする 場合があります. その対策として /usr/local/ 以下にインストールした mingw32 モードで コンパイルした freetype を使うように configure スクリプトに明示的に 指示します.
$ cd SDL_ttf-2.0.6 $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure \ --with-freetype-prefix=/usr/local/mingw32 --prefix=/usr/local/mingw32 $ 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/mingw32 以下にインストールする手順です.
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 $ env CFLAGS="-O2" sh configure --prefix=/usr/local/mingw32 $ 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/mingw32
以下にインストールします.
SDL_gfx のソースコードを取得
SDL_gfx のページ <URL:http://www.ferzkopp.net/Software/SDL_gfx-2.0/> から SDL_gfx-2.0.3.tar.gz <URL:http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.3.tar.gz> を取得します.
SDL_gfx のソースコードを展開
$ tar xvfz SDL_gfx-2.0.3.tar.gz
SDL_gfx をコンパイル cygwin.dll をリンクしないように環境変数を設定してから configure ; make します.
$ cd SDL_gfx-2.0.3 $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure \ --prefix=/usr/local/mingw32 $ make
SDL_gfx をインストール
$ make install
SDL_gfx のソースコードにテストプログラムが入っているので これで SDL_gfx の動作テストをします.
SDL_gfx のテストプログラムのディレクトリに移動
$ cd SDL_gfx-2.0.3/Test/
テストプログラムをコンパイル
$ sh configure $ make
テスト
コンパイルがうまくいったらできあがったファイルを実行しましょう.