[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

gem and ruby extension

Guillaume Marcais

12/27/2005 8:36:00 PM

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.



6 Answers

Jim Weirich

12/27/2005 9:34:00 PM

0

Guillaume Marcais 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/chapte... for details.

--
-- Jim Weirich

--
Posted via http://www.ruby-....


Guillaume Marcais

12/27/2005 10:39:00 PM

0

On Wed, 2005-12-28 at 06:33 +0900, Jim Weirich wrote:
> Guillaume Marcais 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/chapte... 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.



> --
> -- Jim Weirich
>



Guillaume Marcais

12/28/2005 12:44:00 AM

0

On Wed, 2005-12-28 at 07:38 +0900, Guillaume Marcais wrote:
> On Wed, 2005-12-28 at 06:33 +0900, Jim Weirich wrote:
> > Guillaume Marcais 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/chapte... 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.




pere.noel

12/28/2005 12:44:00 AM

0

Guillaume Marcais <guslist@free.fr> 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
_^^_______
--
une bévue

Guillaume Marcais

12/28/2005 1:19:00 AM

0

On Wed, 2005-12-28 at 09:47 +0900, Une bévue wrote:
> Guillaume Marcais <guslist@free.fr> 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

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.




pere.noel

12/28/2005 7:52:00 AM

0

Guillaume Marcais <guslist@free.fr> 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...
--
une bévue