C でクラスを定義して Ruby から呼び出したいのですが、
Linux では動くのですが、cygwin では segmentation fault
で落ちて動作しません。


どこが悪いのでしょうか?

                                                江本

環境:
OS: Windows XP 
cygwin : 1.1.4(?) バージョンってどうやって調べれば良いのでしょうか?
ruby 1.6.7 ( ./configure --enable-shared でコンパイル)


実行結果:
$ ./myclass.exe
ruby: [BUG] Segmentation fault
ruby 1.6.7 (2002-03-01) [i686-cygwin]
Aborted (core dumped)

ソース
#include <ruby.h>

#ifndef ANYARGS
#define ANYARGS
#endif

#define RUBY_FUNCTION(func) ((VALUE (*)(ANYARGS))(func))

struct MyData {
  int val;
};

static VALUE cMyClass;

void
freeMyData(MyData* p)
{
  printf("freeMyData\n");
  free(p);
}

void
markMyData(MyData* p)
{
}

VALUE
allocMyData(int v)
{
  printf("allocMyData\n");
  MyData* p;
  VALUE obj;
  obj = Data_Make_Struct(cMyClass,
			 MyData,
			 markMyData,
			 freeMyData,
			 p);
  p->val = v;
  return obj;
}


VALUE
newMyClass(int argc,
	   VALUE* argv,
	   VALUE klass)
{
  printf("newMyData\n");
  VALUE obj;
  obj=allocMyData(-1);
  return obj;
}

VALUE
getValue(VALUE self)
{
  printf("getValue\n");
  MyData* p = (MyData *)(RDATA(self)->data);
  return INT2NUM(p->val);
}

int
main()
{
  ruby_init();

  cMyClass = rb_define_class("MyClass",rb_cObject);
  rb_define_method(cMyClass,"getValue",RUBY_FUNCTION(getValue),0);
  rb_define_singleton_method(cMyClass,"new",RUBY_FUNCTION(newMyClass),-1);

  rb_eval_string("c = MyClass.new(-1)");
  rb_eval_string("a=c.getValue");
  rb_eval_string("p a");
  return 0;
}