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'
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?
You don't give the most important part : how do you build your
executable ?
You must use the value given in rbconfig.rb to build the command line, in
your case you've probably forgotten -rdynamic when you have compiled your
source.
Another thing
rb_require("sum.rb"); //ruby script is sum.rb
You *must* protect any call to a ruby function which can generate an
error, with rb_protect(), otherwise ruby will crash
In article <200410301010.i9UAAFP29889@moulon.inra.fr>,
Here is the relevant part of the C-side code:
You don't give the most important part : how do you build your
executable ?
You must use the value given in rbconfig.rb to build the command line, in
your case you've probably forgotten -rdynamic when you have compiled your
source.