diff --git a/Rakefile b/Rakefile
index 484c41b576af99b3d6ab0ad3864658eb502140bf..d0375c76421f2362d1b298a82edd6cdf81ee17c8 100755
--- a/Rakefile
+++ b/Rakefile
@@ -215,6 +215,7 @@ end
 namespace :swig do
   SWIG = "/usr/local/bin/swig"
   SWIGFLAGS = "-fcompact -noruntime -c++ -ruby -no_default -I../fox-includes"
+  SWIG_LIB = `#{SWIG} -swiglib`.chomp
   SWIG_MODULES = {
     "core.i" => "core_wrap.cpp",
     "dcmodule.i" => "dc_wrap.cpp",
@@ -275,9 +276,21 @@ namespace :swig do
       end
     end
   end
+  
+  task :swig_librb do
+    Dir.chdir "swig-interfaces" do
+      File.open(wrapper_src_file_path("librb.c"), "w") do |io|
+        io.puts "#define SWIG_GLOBAL 1"
+        io.write(IO.read(File.join(SWIG_LIB, "ruby", "precommon.swg")))
+        io.write(IO.read(File.join(SWIG_LIB, "common.swg")))
+        io.write(IO.read(File.join(SWIG_LIB, "ruby", "rubyhead.swg")))
+        io.write(IO.read(File.join(SWIG_LIB, "ruby", "rubydef.swg")))
+      end
+    end
+  end
 
   desc "Run SWIG to generate the wrapper files."
-  task :swig => [:swig_dependencies] do
+  task :swig => [:swig_dependencies, :swig_librb] do
     Dir.chdir "swig-interfaces" do
       SWIG_MODULES.each do |key, value|
         swig(key, value)