«前の日記(2002-04-03(Wed)) 最新 次の日記(2002-04-05(Fri))» 編集

これ日記なん?


2002-04-04(Thu) [長年日記]

_ 今日は...

結局休むことにした。いやね、一応駅まではいったんだけれどなんか脚がふらついちゃって。気分も悪いしさぁ、今日特に会議とかいれてないしさ、でね、でね....(言い訳モード)

_ 昨日の阪神

4連勝しちゃったよ、おいおい。

_ 今日の阪神

5連勝!?

_ Ruby拡張ライブラリ on Windows with cygwin for mingw.

だんだん調子がよくなってきたので、mingwによるコンパイルに挑戦。cygwinのインストールは終わってるものとします。

まず mingw32 の ruby を入れます。ここを参照。
$ mkdir src
$ cd src
$ tar -zxvf ~/tmp/ruby-1.6.7.tar.gz
$ cd ruby-1.6.7
$ ./configure --with-gcc='gcc -mno-cygwin' --enable-shared i386-pc-mingw32
$ make
$ make install
これで c:\usr\local に入ります。んが、デフォルトで /usr/local は c:\cygwin\usr\local になってますんでついでに
$ mount -b c:\\usr\\local /usr/local
をやっときます。cygwin上は PATHは /usr/local/binが最初にきてるのになぜか ActiveRuby版が起動するので、cygwinのコマンドプロンプトを再起動したら mingw版が優先された様子。
ではソース。bccのときにつかった、hoge.cです。
#include <windows.h>
 
void WINAPI _declspec(dllexport) Init_hoge()
{
	MessageBox(NULL, "Hello World!", "hoge", MB_OK);
};
cygwin環境の場合はunixライクなんで、extconf.rbでMakefileが作られます。
require 'mkmf'
create_makefile('hoge')
これをこんなコマンドラインで。
$ ruby extconf.rb
creating Makefile
じゃ、make
$ make
gcc -mno-cygwin -DIMPORT -DNT -D__MSVCRT__ -g -O2  -I. -Ic:/usr/local/lib/ruby/1.6/i386-mingw32 -I. -Ic:/usr/local/include    -c -o hoge.o hoge.c
gcc -mno-cygwin -DIMPORT -DNT -D__MSVCRT__ -g -O2  -I. -Ic:/usr/local/lib/ruby/1.6/i386-mingw32 -I. -Ic:/usr/local/include    -c -o hoge2.o hoge2.c
dllwrap --target=mingw32 --as=as --dlltool-name=dlltool --driver-name=gcc -mno-cygwin --export-all -s -def=hoge.def -Lc:/usr/local/lib  -o hoge.so hoge.o hoge2.o -L. -lmingw32-ruby16
Warning: resolving _Init_hoge by linking to _Init_hoge@0
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
Warning: resolving _Init_hoge by linking to _Init_hoge@0
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
で実行するとダイアログがでます。わーい。
$ ruby -r hoge -e 0