Forum: Ruby gem and ruby extension

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Guillaume M. (Guest)
on 2005-12-27 22:36
(Received via mailing list)
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.
Jim W. (Guest)
on 2005-12-27 23:33
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.
Guillaume M. (Guest)
on 2005-12-28 00:40
(Received via mailing list)
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.
Guillaume M. (Guest)
on 2005-12-28 02:44
(Received via mailing list)
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.
unknown (Guest)
on 2005-12-28 02:50
(Received via mailing list)
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
_^^_______
Guillaume M. (Guest)
on 2005-12-28 03:20
(Received via mailing list)
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.
unknown (Guest)
on 2005-12-28 09:54
(Received via mailing list)
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...
This topic is locked and can not be replied to.