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