たむらです。

$RUBY/sample/fib.{aw,rb,pl,scm,py} がありますが、そのまま C に移植してみました。
それだけだとつまらないので、通常の実行バイナリと Ruby拡張ライブラリがひとつの
ソースになってます。ついでに extconf.rbも組み込んであります。
# わたなべさんの日記の http://jarp.jin.gr.jp/diary/200208b.html#200208172 を
# パクらせていただきました。

 % make fib
で、通常の実行バイナリを作ります。引数は数をとります。
 % ruby fib.c
とすると、無ければ fib.so を作ってから実行します。
# "ruby" を埋め込んであるのがダサい。

単純な拡張ライブラリの雛型としても使えますです。
sample に追加してもらえるといいなぁ。

#if 0
begin
  require './fib'
  n = ARGV.shift||33
  p Fib::fib(n.to_i)

rescue LoadError
  require 'mkmf'
  $CFLAGS = '-DRBEXT'
  create_makefile ("fib")
  system('make')
  exec("ruby", $0, ARGV.join(' '))
end

__END__
#endif

int
fib (int n)
{ 
  if (n < 2)
    { 
      return n;
    }
  else
    { 
      return fib (n - 2) + fib (n - 1);
    }
}

#if RBEXT
#include "ruby.h"
static VALUE
rb_fib (VALUE obj, VALUE num)
{ 
  int n = NUM2INT (num);
  return INT2NUM (fib (n));
}
void
Init_fib ()
{ 
  VALUE mFib = rb_define_module ("Fib");
  rb_define_module_function (mFib, "fib", rb_fib, 1);
}

#else
int
main (int argc, char *argv[])
{ 
  int n = 33;
  if (argc > 1) n = atoi (argv[1]);
  printf ("%d\n", fib (n));
  return 0;
}
#endif

-- 

たむら (http://www.rubyist.net/~tamura/d/)