gem and ruby extension

G

Guillaume Marcais

I created a gem for a ruby C extension. Compiling the gem and
installation goes find. When I try to run the test I get the following
error:

[gus@comp ~]$ sudo
ruby /usr/lib/ruby/gems/1.8/gems/Rulog-0.1.0/test/rulog.rb

Loaded suite /usr/lib/ruby/gems/1.8/gems/Rulog-0.1.0/test/rulog
Started
ruby: symbol lookup
error: /usr/lib/ruby/gems/1.8/gems/Rulog-0.1.0/lib/rulog.so: undefined
symbol: rb_mark

But, if I specify an include directory to ruby, it work:

[gus@comp ~]$ sudo ruby
-I /usr/lib/ruby/gems/1.8/gems/Rulog-0.1.0/lib /usr/lib/ruby/gems/1.8/gems/Rulog-0.1.0/test/rulog.rb

Loaded suite /usr/lib/ruby/gems/1.8/gems/Rulog-0.1.0/test/rulog
Started
....
Finished in 2.341459 seconds.

4 tests, 38 assertions, 0 failures, 0 errors


Duh! Why can't it load rulog.so in the first case? The platform is ruby
1.8.2 (2004-12-25) [i586-linux-gnu].

Any idea, pointers?

Guillaume.
 
J

Jim Weirich

Guillaume said:
Duh! Why can't it load rulog.so in the first case? The platform is ruby
1.8.2 (2004-12-25) [i586-linux-gnu].

Ruby is able to find libraries installed via RubyGems only after the
rubygem library is loaded. You can accomplish in several ways,
including setting an environment variable (RUBYOPT=rubygems), including
-rubygems on your ruby command line, or even putting a 'require
"rubygems"' in your source code. See
http://docs.rubygems.org/read/chapter/3#page70 for details.
 
G

Guillaume Marcais

Guillaume said:
Duh! Why can't it load rulog.so in the first case? The platform is ruby
1.8.2 (2004-12-25) [i586-linux-gnu].

Ruby is able to find libraries installed via RubyGems only after the
rubygem library is loaded. You can accomplish in several ways,
including setting an environment variable (RUBYOPT=rubygems), including
-rubygems on your ruby command line, or even putting a 'require
"rubygems"' in your source code. See
http://docs.rubygems.org/read/chapter/3#page70 for details.

Thanks for you quick answer. But I forgot to mention that I already have
the RUBYOPT variable set:

[gus@comp ruby-1.8.2]$ echo $RUBYOPT
-rrubygems
[gus@comp ruby-1.8.2]$ grep RUBY ~/.bashrc
RUBYOPT="-rrubygems"
export RUBYOPT

What strikes me as odd in this case is that it gives the right path of
the library to load (somewhere in /usr/lib/ruby/gems) but fails to load
it. If the path is added to $: (in the second example), then it loads
properly.

Guillaume.


 
G

Guillaume Marcais

Guillaume said:
Duh! Why can't it load rulog.so in the first case? The platform is ruby
1.8.2 (2004-12-25) [i586-linux-gnu].

Ruby is able to find libraries installed via RubyGems only after the
rubygem library is loaded. You can accomplish in several ways,
including setting an environment variable (RUBYOPT=rubygems), including
-rubygems on your ruby command line, or even putting a 'require
"rubygems"' in your source code. See
http://docs.rubygems.org/read/chapter/3#page70 for details.

Thanks for you quick answer. But I forgot to mention that I already have
the RUBYOPT variable set:

[gus@comp ruby-1.8.2]$ echo $RUBYOPT
-rrubygems
[gus@comp ruby-1.8.2]$ grep RUBY ~/.bashrc
RUBYOPT="-rrubygems"
export RUBYOPT

What strikes me as odd in this case is that it gives the right path of
the library to load (somewhere in /usr/lib/ruby/gems) but fails to load
it. If the path is added to $: (in the second example), then it loads
properly.

My fault. rb_mark doesn't exists, rb_gc_mark is want I wanted. What
confused me is that it doesn't complain when the library is required,
but when the call of this function is made.

Sorry for the noise,
Guillaume.
 
U

Une bévue

Guillaume Marcais said:
[gus@comp ruby-1.8.2]$ echo $RUBYOPT
-rrubygems

do you think this is right, because i've done :
export RUBYOPT=rubygems
(without de "-")
and, i've seen progs complaining about ubygems (without the "r")

BEWARE, in your case you have TWO "r" ie :
-rrubygems
_^^_______
 
G

Guillaume Marcais

Guillaume Marcais said:
[gus@comp ruby-1.8.2]$ echo $RUBYOPT
-rrubygems
=20
do you think this is right, because i've done :
export RUBYOPT=3Drubygems
(without de "-")
and, i've seen progs complaining about ubygems (without the "r")
=20
BEWARE, in your case you have TWO "r" ie :
-rrubygems

Actually, both work. AFAIK, rubygems is the official name of the library
but ubygems is also there so it looks good when using the -r options.
'ruby -rubygems' and 'ruby -rrubygems' are equivalent.

Looking in /usr/lib/ruby I see:

/usr/lib/ruby/site_ruby/1.8/ubygems.rb
/usr/lib/ruby/site_ruby/1.8/rubygems.rb

and

$ cat /usr/lib/ruby/site_ruby/1.8/ubygems.rb
# This file allows for the running of rubygems with a nice
# command line look-and-feel: ruby -rubygems foo.rb

require 'rubygems'



Guillaume.
 
U

Une bévue

Guillaume Marcais said:
Actually, both work. AFAIK, rubygems is the official name of the library
but ubygems is also there so it looks good when using the -r options.
'ruby -rubygems' and 'ruby -rrubygems' are equivalent.

thanks for your input that makes my setup clearer to me ))
my prob with "ubygems" comes to the fact i've two Rubys :
the default install on MacOS X /usr/bin/ruby
and the darwinports one /opt/local/bin/ruby
only the latest works with rubygems...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,277
Latest member
VytoKetoReview

Latest Threads

Top