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.
D8831c4665a164c6ce484003deb1afd6?d=identicon&s=25 Guillaume Marcais (Guest)
on 2005-12-27 21: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.
10d4acbfdaccb4eee687a428ca00a5d8?d=identicon&s=25 Jim Weirich (weirich)
on 2005-12-27 22:33
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/chapter/3#page70 for details.

--
-- Jim Weirich
D8831c4665a164c6ce484003deb1afd6?d=identicon&s=25 Guillaume Marcais (Guest)
on 2005-12-27 23:40
(Received via mailing list)
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/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.
D8831c4665a164c6ce484003deb1afd6?d=identicon&s=25 Guillaume Marcais (Guest)
on 2005-12-28 01:44
(Received via mailing list)
On Wed, 2005-12-28 at 07:38 +0900, Guillaume Marcais 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.
Fa0d14a176f060c96eef797fa48e6bcc?d=identicon&s=25 unknown (Guest)
on 2005-12-28 01:50
(Received via mailing list)
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
_^^_______
D8831c4665a164c6ce484003deb1afd6?d=identicon&s=25 Guillaume Marcais (Guest)
on 2005-12-28 02: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.
Fa0d14a176f060c96eef797fa48e6bcc?d=identicon&s=25 unknown (Guest)
on 2005-12-28 08:54
(Received via mailing list)
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...
This topic is locked and can not be replied to.