Nanashi-soft○プログラマ専用○Windows gcc SDL○
自分でDLLを作る方法を説明します
これを説明しておく事で、日本語で説明されたSDLライブラリが増えたら使いやすくなる。と言う作戦です(お前が作れよ!と言う話もありますが(^^;)
実は DLL(Windows用)と .so(UNIX用)では、根本的に作り方が異なります
ここでは、DLLの作りかたを説明します
簡単なプログラムをライブラリ化してみます
階乗ライブラリを作ってみます
int kaijyou(int n){ int ret; int i; if(n < 0){ ret= -1; //エラー } else if(n == 0){ ret= 1; //例外)0の時は1と決まっている? } else{ ret= 1; for(i= 0; i < n; i++){ ret *= (i + 1); } } return ret; }
これをkaijyou.cというファイル名で保存したとします(ソースファイル名に規則性は無いです)
Cygwin上で普通にコンパイルします
$ gcc -c kaijyou.c
これで.oファイルができます
次に、defファイルを作ります
これは.oファイルから生成可能です
$ dlltool --export-all --output-def kaijyou.def kaijyou.o
この.oファイルと.defファイルから.dllファイルを生成します
$ dllwrap --driver-flag='-shared' --target i386-mingw32 -mno-cygwin -mwindows --def kaijyou.def -o kaijyou.dll kaijyou.c
このDLLファイルを呼び出すには、まずヘッダーファイルを作成します
int kaijyou(int);
これを kaijyou.hというファイル名で保存したとします(ヘッダーファイル名に規則性は無いです)
次にプログラムを書きます
#include "SDL.h" #include "kaijyou.h" int main(int argc,char *argv[]){ int ret= kaijyou(3); printf("%d\n", ret); }
kaijyouが DLL内に書かれているプログラムです
これを testkaijyou.cというファイル名で保存したとします
$ gcc -o testkaijyou testkaijyou.c `sdl-config --cflags --libs` -L. -lkaijyou
通常のSDLビルド時と同じオプションに、-L. -lkaijyouを付けてビルドします
実はこうして生成したプログラムは、CygWinコマンドライン上からは起動できません
生成したtestkaijyou.exeと、kaijyou.dllを同一フォルダに入れて、
testkaijyou.exeを起動すると、一瞬にして終わります
stdout.txtというファイルが生成されて、1*2*3の実行結果である「6」が入っているはずです