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 ---
Keyword(s):
References:[FrontPage]