はじめてのひき - MacOSX+SDL+D言語でのアプリケーションコンパイル法 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
! 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 ---
!! 概要
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 ---