佐藤といいます. Windows でコンパイルという話ではなく,
申し訳ありませんが

>  RAAにある、あ伊藤氏作の多次元配列を実装する拡張ライブラリを
> 利用したいのですが、Win環境でコンパイルする環境がありません。

  先日, ruby 1.4.2 (1999-09-18) [i686-linux] な環境でコンパイル
しようとしたのですが, うまくいきませんでした. どういうふうに
修正するのがいいのかよくわからなかったので, とりあえず添付の
パッチのように修正して,

    $ gcc -c -I/usr/local/lib/ruby/1.4/i686-linux/ mdarray.c
    $ gcc -shared -L/usr/local/lib -o mdarray.so mdarray.o

とコンパイルしたものを使ってます.

  1.4 正式対応版みたいなのがありましたら, お教え下さい.

--
さとうまさひろ / 佐藤正博
  m / sa.to or msato / iis.u-tokyo.ac.jp

--- mdarray.c.orig	Fri Oct 15 16:09:36 1999
+++ mdarray.c	Fri Oct 15 16:42:28 1999
@@ -34,7 +34,7 @@
 {
     int i;
     for (i = 0; i < d->total; i++)
-	gc_mark(d->ptr[i]);
+	rb_gc_mark(d->ptr[i]);
 }
 
 static void
@@ -61,7 +61,7 @@
     ary->dimension = dim;
     ary->total = total_size;
     ary->ptr = ALLOC_N(VALUE,total_size);
-    memclear(ary->ptr,total_size);
+    rb_mem_clear(ary->ptr,total_size);
     return ary;
 }
 
@@ -173,7 +173,7 @@
     int dim,i;
 
     if (argc == 0)
-	Fail("argument mismatch");
+	rb_raise(rb_eArgError, "argument mismatch");
     if (TYPE(argv[0]) == T_ARRAY) {
 	return mda_to_mdarray(argv[0]);
     }
@@ -193,12 +193,12 @@
     int pos = 0;
     int i;
     if (argc != self->dimension) {
-	Fail("dimension mismatch");
+	rb_raise(rb_eArgError, "dimension mismatch");
     }
     for (i = 0; i < argc; i++) {
 	int idx = argv[i];
 	if (idx < 0 || self->size[i] <= idx)
-	    Fail("Subsctipt out of range");
+	    rb_raise(rb_eArgError, "Subsctipt out of range");
 	pos = pos*self->size[i]+idx;
     }
     return pos;
@@ -211,12 +211,12 @@
     int pos = 0;
     int i;
     if (argc != self->dimension) {
-	Fail("dimension mismatch");
+	rb_raise(rb_eArgError, "dimension mismatch");
     }
     for (i = 0; i < argc; i++) {
 	int idx = NUM2INT(argv[i]);
 	if (idx < 0 || self->size[i] <= idx)
-	    Fail("Subsctipt out of range");
+	    rb_raise(rb_eArgError, "Subsctipt out of range");
 	pos = pos*self->size[i]+idx;
     }
     return pos;
@@ -258,7 +258,7 @@
     sizes = ALLOCA_N(VALUE,myself->dimension);
     for (i = 0; i < myself->dimension; i++)
 	sizes[i] = INT2FIX(myself->size[i]);
-    return ary_new4(myself->dimension,sizes);
+    return rb_ary_new4(myself->dimension,sizes);
 }
 
 /* method: dimension() -- returns the dimension of the array */
@@ -295,10 +295,10 @@
     GetMDA(obj,myself);
     dim = myself->dimension;
     size = ALLOCA_N(int,dim);
-    vsize = RARRAY(ary_new2(dim));
+    vsize = RARRAY(rb_ary_new2(dim));
     for (i = 0; i < dim; i++) {
 	size[i] = 0;
-	ary_store(vsize,i,INT2FIX(0));
+	rb_ary_store(vsize,i,INT2FIX(0));
     }
     while (size[0] < myself->size[0]) {
 	rb_yield(vsize);
@@ -308,12 +308,12 @@
 	    size[i]++;
 	    if (size[i] >= myself->size[i] && i > 0) {
 		loop = 1;
-		ary_store(vsize,i,INT2FIX(0));
+		rb_ary_store(vsize,i,INT2FIX(0));
 		size[i] = 0;
 		i--;
 	    }
 	    else {
-		ary_store(vsize,i,INT2FIX(size[i]));
+		rb_ary_store(vsize,i,INT2FIX(size[i]));
 	    }
 	} while (loop);
     }
@@ -344,12 +344,12 @@
 	dim2 = NUM2INT(argv[1]);
 	if (dim1 < 0 || dim <= dim1 ||
 	    dim2 < 0 || dim <= dim2)
-	    Fail("MDArray#transpose: illegal dimension spec");
+	    rb_raise(rb_eArgError, "MDArray#transpose: illegal dimension spec");
 	if (dim1 == dim2)
-	    Fail("MDArray#transpose: two dimensions are identical");
+	    rb_raise(rb_eArgError, "MDArray#transpose: two dimensions are identical");
     }
     else
-	Fail("MDArray#transpose: argument number mismatch");
+	rb_raise(rb_eArgError, "MDArray#transpose: argument number mismatch");
     
     newsize = ALLOCA_N(int,dim);
     idx = ALLOCA_N(int,dim);
@@ -395,7 +395,7 @@
     int pos;
     struct RArray *ary;
 
-    ary = (struct RArray*)ary_new2(mda->size[thisdim]);
+    ary = (struct RArray*)rb_ary_new2(mda->size[thisdim]);
     ary->len = mda->size[thisdim];
     if (thisdim == mda->dimension-1) {
 	for (i = 0; i < mda->size[thisdim]; i++) {
@@ -431,7 +431,7 @@
 Init_mdarray()
 {
     /* define MDArray class */
-    cMDArray = rb_define_class("MDArray",cObject);
+    cMDArray = rb_define_class("MDArray",rb_cObject);
 
     /* class methods */
     rb_define_singleton_method(cMDArray,"new",mda_new,-1);