Hi,

I am writing a program in C.  From this program I need to call into some Ruby 
scripts.  While for the most part everything works ok, I cannot require/use 
the ruby socket library from my scripts if they are called from the C program.

Basically as soon as i try to require socket, I get the following error:
#<LoadError: /usr/local/lib/ruby/1.6/i686-linux/socket.so: undefined symbol: 
rb_eSecurityError - /usr/local/lib/ruby/1.6/i686-linux/socket.so>

I am not sure if there is something wrong with the way I am building my C 
executable...  I searched on the ruby-lang website, but did not find anything 
obviously related to my problem.

Have included dumps of the files in question at the end of this email - would 
appreciate any help that you can give me...

Cheers,
Martin Hart
martin / zsdfherg.com


Files...

[martin@dorfl test]$ ruby -v
ruby 1.6.6 (2002-01-21) [i686-linux]

[martin@dorfl test]$ cat broken.rb
 
begin
  require "socket"
  puts "Everything worked"
rescue Exception => e
  p e
end

[martin@dorfl test]$ ruby broken.rb
Everything worked

[martin@dorfl test]$ cat broken.c
#include "ruby.h"
 
int main()
{
  VALUE val;
 
  ruby_init();
  ruby_script("embedded");
  ruby_init_loadpath();
  val = rb_require("broken.rb");
  return 0;
}

[martin@dorfl test]$ cat makefile
# makefile for spmod_ruby
 
CC = gcc
RUBY_INC_PATH=/usr/local/lib/ruby/1.6/i686-linux
CFLAGS = -D_LINUX -fPIC -Wall -g -O -pedantic -lpthread -I$(RUBY_INC_PATH)
RUBY_LIB_PATH = /usr/local/lib/ruby/1.6/i686-linux
 
all: broken
 
broken.o: broken.c
 
broken: broken.o
        $(CC) -g broken.o -L$(RUBY_LIB_PATH) -o broken -lruby -ldl -lm -lcrypt


... And finally here is what happens if I run the C program...

[martin@dorfl test]$ ./broken
#<LoadError: /usr/local/lib/ruby/1.6/i686-linux/socket.so: undefined symbol: 
rb_eSecurityError - /usr/local/lib/ruby/1.6/i686-linux/socket.so>