Gem and ruby extension


#1

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.


#2

Guillaume M. wrote:

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.


– Jim W.


#3

On Wed, 2005-12-28 at 06:33 +0900, Jim W. wrote:

Guillaume M. wrote:

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.


#4

On Wed, 2005-12-28 at 09:47 +0900, Une bévue wrote:

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.


#5

Guillaume M. removed_email_address@domain.invalid wrote:

[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
^^______


#6

On Wed, 2005-12-28 at 07:38 +0900, Guillaume M. wrote:

http://docs.rubygems.org/read/chapter/3#page70 for details.
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.


#7

Guillaume M. removed_email_address@domain.invalid wrote:

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…