Nanashi-softプログラマ専用Windows gcc SDL


◇Windowsでgcc+SDL -ダイナミックリンクライブラリ作る(DLL)-

自分でDLLを作る方法を説明します
これを説明しておく事で、日本語で説明されたSDLライブラリが増えたら使いやすくなる。と言う作戦です(お前が作れよ!と言う話もありますが(^^;)

実は DLL(Windows用)と .so(UNIX用)では、根本的に作り方が異なります
ここでは、DLLの作りかたを説明します

◎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の呼び出しかた

この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」が入っているはずです


TOPプログラマ専用Windows gcc SDL