Create  Edit  Diff  FrontPage  Index  Search  Changes  Login

MacOSX+SDL+D言語でのアプリケーションコンパイル法

MacOSX における D言語で書かれた SDL アプリケーションのコンパイル法

概要

MacOSX & SDL & D 言語でアプリケーションを作成する方法を示す。

事前環境

インストール先として $PREFIX 環境変数が設定されていて、 $PREFIX/bin にパスが通っているものとする。 また、本来の gcc は /usr/bin/gcc にインストールされているものとする。

gdc のインストール

現在のディレクトリに gcc-3.3.2.tar.bz2, gdc-0.8.tar.bz2 があるとする。 異なるバージョンを使用する場合は適宜読み変えること。

tar -xvjf gcc-3.3.2.tar.bz2
cd gcc-3.3.2/gcc
tar -xvjf ../../gdc-0.8.tar.bz2
patch -p1 < d/patch-gcc-3.3.x
cd ..
mkdir obj
cd obj
../configure --enable-languages=c,d,c++ --prefix=$PREFIX
make
make install

ここで、 C++ もコンパイルしておいた方が良い。 そうしなければ、 C++ をスタティックリンクすることが難しくなる。

ここで gdc コマンドを発行して gdc: no input files などと言われれば良い。

phobos のインストール

前項からディレクトリ移動は無いとする。

mkdir phobos
cd phobos
../../gcc/d/phobos/configure --prefix=$PREFIX
make
make install
make libphobosnm.a
cp libphobosnm.a $PREFIX/lib

これで gdc が使用できるはず。 適当に hello world でもコンパイルして動かしてみると良い。 (現在のバージョン gdc-r1f では libphobosnm.a コンパイル時にパスを追加しなければならない。 一応パッチを送ったためこの状況は改善されると思われる)

SDL のインストール

通常通り、 ./configure; make; make install することになるが、 今後、ダイナミックロードしたいライブラリは /usr/bin/gcc を用いてコンパイル・リンクしなければならない。

gdc より先にコンパイルしてしまえば問題無いが、 SDL 以外にも gdc より後に入れたいライブラリがある可能性は高いため、 gdc より後にコンパイルする方法をここでは示す。

カレントディレクトリに SDL-1.2.7.tar.gz があるとして、

tar -xvzf SDL-1.2.7.tar.gz
cd SDL-1.2.7
CC=/usr/bin/gcc CXX=/usr/bin/g++ ./configure
make
make install

./configure 時に適宜 --prefix を与えておくこと。

その他のライブラリも SDL に準ずる方法でコンパイルが可能である。

アプリケーションのコンパイル

全ての *.d ファイルを gdc でコンパイルする。 またそれにリンクするべき C や C++ などのファイルもコンパイルする。 この時、スタティックリンクするファイルは 全て gdc と一緒にインストールしたもので コンパイルしなければならないことに注意すること。 (MacOSX 付属の /usr/bin/gcc は使用してはならない)

phobos, SDL ともに main 関数が定義されていて、 横取りする仕様になっているため main に当る部分は 書き替えなければならない。

libphobosnm.a を用い、 libSDLmain.a の main => アプリケーション内 SDL_main => _d_rtl_start で phobos 起動 => D の main が起動 という順序で起動するのが一番自然だと考えられる。

それには、以下のような内容のファイルを作り、 それをリンクすれば良い。

extern (C) int _d_rtl_start(int argc, char* argv[]);
extern (C) int SDL_main(int argc, char* argv[]) {
  return _d_rtl_start(argc, argv);
}

ここまででリンクする準備は整ったため、リンクを行う。 リンクには /usr/bin/gcc を使用して、

/usr/bin/gcc -o app \
-F$HOME/Frameworks -framework SDL -framework Cocoa -framework OpenGL \
$PREFIX/lib/gcc-lib/powerpc-apple-darwin7.3.0/3.3.2/libgcc.a \
$PREFIX/lib/libphobosnm.a \
$PREFIX/lib/libSDLmain.a \
$OBJS

などとする。 $OBJS にはアプリケーションの 全オブジェクトファイルを指定する。 SDL_main を記述したファイルなども忘れないこと。

C++ を使用する場合は $PREFIX/lib/libstdc++.a もリンクすること。 これも、 gdc と同時にインストールしたものを使用しなければならない。

SDL のリンクは、 `sdl-config --libs` でも良いが、 -framework でリンクした方が配布物が作成しやすいと考えられる。

--- shinichiro.h ---

Last modified:2011/02/01 00:05:35
Keyword(s):
References:[FrontPage]