圧縮形式とサイズ | ||
HSP向け情報 | Zip 111kBytes | 7-Zip 52.1kBytes |
汎用DLLの情報 | Zip 1.98kBytes | 7-Zip 1.70kBytes |
a) MinGWのインストール
MinGW: Minimalist GNU For Windows
をご参考にしてください。
今(2008/12/31)ならMinGW-5.1.4.exeを入手して展開。
パスを通してコマンドプロンプトで作業するか、MSYSを導入すればOKですね。
☆MSYS | MinGW
b) Cygwin環境のインストール
Cygwinのミラーサイト一覧
現在はこちら
Cygwin Information and Installation
Snapshot情報が充実している藤枝さんのページ
をご参考にしてください。
(latestフォルダのsetup.exeをゲットして実行するだけで構築できました)
//コンパイル
私、Eingusteは十分な理解をしていません。
gcc -c -g -O2 -Wall test1.c (-mno-cygwin)
gcc -c -g -O2 -Wall test2.c (-mno-cygwin)
cygwin環境の場合には、-mno-cygwinオプションを指定してください。
指定しないとcygwin1.dllが必要になります。
//DLL作成
dllwrap -s --export-all --output-def test.def --driver-name gcc -o test.dll test1.o test2.o test3.o (-mwindows) (-mno-cygwin)
cygwin環境の場合には、-mno-cygwinオプションを指定してください。
指定しないとcygwin1.dllが必要になります。
dllwrapのバージョンにより上手く動作しない場合があるようです。
現在は、makefileを作成してmakeコマンド一回で作成しています。
makefileの一例としてmakefile.txtを添付しました。
試行錯誤によって手順を確立しています。
よって、繰り返しになりますが、At Your Own Risk です。
参考程度に止め、DLL作成は、あなた自身の判断と決断によって行なってください。
今更ですが補足です。
以前書いていた-mrtdオプションは試行錯誤の結果、付加したオプションなのですが、呼出規約を__cdeclではなく__stdcallに変更するオプションだったようです。
そのためEXPORTする関数に__stdcallを明示的に指定すれば不要なオプションでした。
ただその場合、呼び出す関数名に@数字がついてきます。
当時の記憶が定かではありませんが、多分、その部分の理解が足りなかったためか、楽をするために-mrtdオプションを使っていたのだと思います。
関数名についてはDEFファイルを作成するか、リンカに--kill-atか--add-stdcall-aliasを指示することで関数名そのままで呼び出すことができるのかな。
なので、今のバージョンだと
gcc -s -O2 -shared -o test.dll test1.c test2.c -Wl,--kill-at,--output-def,test.def,--out-implib,libtest.a (-mno-cygwin)
またはDEFファイルを作成して
gcc -s -O2 -shared -o test.dll test1.c test2.c test.def -Wl,--out-implib,libtest.a (-mno-cygwin)
といった感じになるんだと思います。
※MinGW: Minimalist GNU For Windowsという素晴らしい開発環境を公開、メンテナンスされています諸氏に感謝いたします。
Top page