ptkwt
10/29/2004 11:36:00 PM
I've basically taken the embedding example from pickaxeII and the only
thing I've added is for the Ruby program to do a 'require' of a file known
to exist in the library.
Here is the relevant part of the C-side code:
//summer.c
int main(void) {
int value;
int* next = Values;
ruby_init();
ruby_init_loadpath();
ruby_script("embedded");
rb_require("sum.rb"); //ruby script is sum.rb
ruby_finalize();
exit(0);
}
//end of summer.c
So the ruby_init_loadpath() should be setting up the loadpath correctly,
and I can confirm this by making the ruby script to be required (sum.rb)
like so:
#sum.rb
puts $:
Now if I run summer, I get:
$ ./summer
/usr/local/lib/ruby/site_ruby/1.8
/usr/local/lib/ruby/site_ruby/1.8/i686-linux
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/1.8
/usr/local/lib/ruby/1.8/i686-linux
.
....Which looks fine.
Now, if I change sum.rb to:
#sum.rb
require 'openssl'
I get:
$ ./summer
./sum.rb:2: [BUG] Segmentation fault
ruby 1.8.2 (2004-07-29) [i686-linux]
Aborted
Apparently, because require can't find the openssl library.
However, the openssl lib is there:
$ irb
irb(main):001:0> require 'openssl'
=> true
What gives? $: looks fine.
Another datapoint: if I change the require in sum.rb to:
#sum.rb
require 'ftools'
It seems to work. Is there a problem with require'ing extensions (like
openssl.so) this way? (seems to not work) If so, is there any way of
doing this?
Phil