この記事は古いものです 最新版 をどうぞ.

Win32 + cygwin で SDL の開発環境を構築

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

ここでは cygwin のパッケージですでにインストールされているライブラリでも mingw32 モードで再度コンパイル,インストールしています.

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

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

cygwin 環境のインストール

とりあえず 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

に指定し,インストールできる全てのパッケージをインストールしました.

cygwin 環境設定

環境変数 PATH の設定

ライブラリをソースコードからインストールした場合などに 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"

のように変更します.

MinGW の gcc の動作確認

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 のテスト完了です.

DirectX ヘッダとライブラリのインストール

cygwin の gcc で DirectX を利用したプログラムをコンパイルするために必要な ヘッダとインポートライブラリをインストールします.

cygwin の gcc の mingw32 モードで DirectX を利用するものとしては例えば SDL があります.

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

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

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

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

    $ cd /usr
    $ tar xvfz directx-devel.tar.gz 

SDL のインストール

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

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

  1. 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> を取得します.

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

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

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

    $ make install

    これで /usr/local/mingw32 以下に 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/mingw32

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

  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 CFLAGS="-O2" LIBS="-lstdc++" sh configure --prefix=/usr/local/mingw32
    $ make 
  4. smpeg をインストール

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

    $ make install

libogg のインストール

libogg ライブラリを mingw32 モードで( -mno-cygwin オプション付で) コンパイルして

/usr/local/mingw32

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

  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 をコンパイル

    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 
  4. libogg をインストール

    $ make install

libvorbis のインストール

libvorbis ライブラリを mingw32 モードで( -mno-cygwin オプション付で )コンパイルして

/usr/local/mingw32

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

  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 をコンパイル

    mingw32 モードでコンパイルするためにいくつか環境変数を設定してから コンパイルします.

    $ cd libvorbis-1.0
    $ env CC="gcc -mno-cygwin" CFLAGS="-I/usr/include/mingw/g++-3/" \
     sh configure --prefix=/usr/local/mingw32
    $ make 
  4. libvorbis をインストール

    $ make install

SDL_mixer のインストール

SDL_mixer を

/usr/local/mingw32

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

  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 のサポートに必要ないくつかのヘッダファイルを自動で 見つけてくれないので,環境変数を設定してから 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 
  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 を mingw32 モードで( -mno-cygwin オプション付で ) コンパイルして

/usr/local/mingw32 

にインストールします.

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

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

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

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

    mingw32 モードでコンパイルするために環境変数を設定してから コンパイルします.

    $ cd jpeg-6b
    $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure --prefix=/usr/local/mingw32
    $ make 
  4. JPEG Software をインストール

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

    $ make install
    $ make install-lib

zlib のインストール

zlib ライブラリを mingw32 モードで( -mno-cygwin オプション付で )コンパイルして

/usr/local/mingw32

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

  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 をコンパイル mingw32 モードでコンパイルするために環境変数を設定します.

    $ cd zlib-1.1.4
    $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure \
     --prefix=/usr/local/mingw32
    $ make 
  4. zlib をインストール

    $ make install

libpng のインストール

libpng を mingw32 モードで( -mno-cygwin オプション付で )コンパイルして

/usr/local/mingw32

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

この手順では 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
    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 

    でビルドします.

  4. libpng をインストール

    あとは

    $ make install

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

SDL_image のインストール

SDL_image を

/usr/local/mingw32

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

  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/mingw32/include/ " \
     sh configure --prefix=/usr/local/mingw32
    $ 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 ライブラリを mingw32 モードで ( -mno-cygwin オプション付きで) コンパイルして,

/usr/local/mingw32

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

  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 をコンパイル

    mingw32 モードでコンパイルするために環境変数を設定してから コンパイルします.

    $ cd freetype-2.1.4
    $ env CC="gcc -mno-cygwin" CFLAGS="-O2" sh configure \
     --prefix=/usr/local/mingw32
    $ make 
  4. freetype をインストール

    $ make install

SDL_ttf のインストール

SDL_ttf ライブラリを mingw32 モードで ( -mno-cygwin オプション付きで) コンパイルして,

/usr/local/mingw32

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

  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 をコンパイル

    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 
  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/mingw32 以下にインストールする手順です.

  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
    $ env CFLAGS="-O2" sh configure --prefix=/usr/local/mingw32
    $ 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/mingw32

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

  1. 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> を取得します.

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

    $ tar xvfz SDL_gfx-2.0.3.tar.gz
  3. 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 
  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. テスト

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