Instead of embedding Ruby into a C program with a main() function I want to embed Ruby in a C library. The library is then linked with some other code which has a main() function. Here's my C code: //begin C code #include <ruby.h> static VALUE protected_require() { //TODO: for testing only, add protection later return rb_require("foo.rb"); } static int initialized = 0; static VALUE summer ; static initialize_ruby() { if (!initialized) //only initialize once { int value; ruby_init(); ruby_init_loadpath(); ruby_script("embedded"); rb_protect(protected_require, Qnil, &value); if (value) { VALUE err = rb_inspect(rb_gv_get("$!")); fprintf(stderr, "ERR %s\n", StringValuePtr(err)); } summer = rb_class_new_instance(0,0, rb_const_get(rb_cObject,rb_intern("Summer"))); initialized = 1; } } int sum(int max) { initialize_ruby(); int id_sum = rb_intern("sum"); VALUE result = rb_funcall(summer, id_sum,1,INT2NUM(max)); //ruby_finalize(); //seems to work OK without it return NUM2INT(result); } int foo(int max) { initialize_ruby(); int id_foo = rb_intern("foo"); VALUE result = rb_funcall(summer, id_foo,1,INT2NUM(max)); //ruby_finalize(); //seems to work OK without it return NUM2INT(result); } //end C code So I keep track of whether or not ruby has been initialized. Each of the functions in the library calls the initialize_ruby() function first thing. initialize_ruby() only really initializes ruby the first time (in order to save some time - I don't want to have to startup ruby for every function call and then finalize ruby at the end of each function call). Since I don't know what the last call to the function library might be, I don't call ruby_finalize() in any of the library functions. I used to do this, but eliminating the ruby_finalize() call seems to have no ill-effects. What are the consequences of not calling ruby_finalize()? Phil