When you load an extension module, what's the mechanism that makes those C calls (the ones that call into the Ruby API) actually get connected to the currently-running instance of ruby? When I build C code (not an extension module) that uses some external functions -- say, in a shared lib -- the compiler finds the headers at compile-time. At link-edit time, the compiler checks that the code fits the shared lib (i.e., makes sure the calls it saw declared in the headers (and defined in my source) match up with the shared lib's ABI). At runtime (dynamic link time), the OS hunts down the .so file, loads it, and gives my program a connection to it. I've got that much. But when we're building an extension module, how to you do tell GCC (at link-edit time) that you want your code to link to (at runtime) what's already loaded and running -- that is, to link to the ruby interpreter -- rather than to some shared lib somewhere? Incidentally, I notice that I don't even have a libruby.so anywhere on my system. I've got an /opt/ruby-1.8.4/lib/libruby-static.a though. That makes sense to me I suppose, since there's only one app (i.e., ruby) that will need to load that library, and you want each instance of ruby to have its own private memory structures anyway. But I don't think I'm supposed to link my extension module with that static library... Any insights or words of wisdom are most appreciated. Thanks, ---John