Ruby extension (C++) on OS X [ruby 1.8.2] and Google-Sketchup [ruby 1.8.5]

Discussion in 'Ruby' started by Nicholas, Jan 27, 2007.

  1. Nicholas

    Nicholas Guest

    Hi,

    I have written a ruby extension in C++ and it works fine on OS X
    Tiger which ships ruby-1.8.2.

    With the succesful test of the extension (bundle), I then proceed to
    try to use it within Google-Sketchup [which I think embeds ruby-1.8.5].

    Sketchup crashes the application just loading the extension.

    8<------8<------8<------8<------8<------8<------8<------8<------8<------
    void
    Init_rcl(void)
    {
    cRCL = rb_define_class("rcl", rb_cObject); <=== /CRASH
    8<------8<------8<------8<------8<------8<------8<------8<------8<------

    Has there been significant changes in extension loading/startup
    between ruby 1.8.2 and 1.8.5?

    I could install 1.8.5 on my machine to try ou but wanted to find out
    more information before I do that.

    Regards
    Nicholas, Jan 27, 2007
    #1
    1. Advertising

  2. Nicholas

    Ryan Davis Guest

    On Jan 26, 2007, at 6:50 PM, Nicholas wrote:

    > 8<------8<------8<------8<------8<------8<------8<------8<------8<----
    > --
    > void
    > Init_rcl(void)
    > {
    > cRCL = rb_define_class("rcl", rb_cObject); <=== /CRASH
    > 8<------8<------8<------8<------8<------8<------8<------8<------8<----
    > --


    That could should be fine in pretty much any version of ruby.

    > Has there been significant changes in extension loading/startup
    > between ruby 1.8.2 and 1.8.5?


    nope, but if you compiled and linked against one version (1.8.2) I
    don't think you can count on it working in binary form on another
    version, ESPECIALLY the stock 1.8.2 that ships on osx (unless apple
    has fixed up their stuff).

    I'm not positive, but I think even if you do recompile it on 1.8.5 it
    could still be unstable because they could compile and link in the
    embedded ruby entirely different from yours. You could either
    refactor all your external code out to a generic dynamic library
    (a .bundle on osx) and write pure ruby DL code that calls out to it
    (I dunno if that is an option with sketchup or not), or you could
    possibly try out rubyinline so the compile and link happens the same
    as with sketchup's embedded interp. Again, dunno if that will work
    with sketchup.
    Ryan Davis, Jan 27, 2007
    #2
    1. Advertising

  3. Re: Ruby extension (C++) on OS X and Google-Sketchup [ruby 1

    Nicholas wrote:
    > I have written a ruby extension in C++ and it works fine on OS X
    > Tiger which ships ruby-1.8.2.


    I'm surprised that it actually works in 1.8.2...

    > cRCL = rb_define_class("rcl", rb_cObject); <=== /CRASH


    Why are you defining a class whose name is not capitalized?

    Ruby doesn't let you do this from Ruby code:

    $ irb
    class rcl
    end
    SyntaxError: compile error
    (irb):1: class/module name must be CONSTANT
    from (irb):2

    --
    Posted via http://www.ruby-forum.com/.
    Suraj Kurapati, Jan 27, 2007
    #3
  4. Nicholas

    Ryan Davis Guest

    Re: Ruby extension (C++) on OS X and Google-Sketchup [ruby 1

    On Jan 27, 2007, at 12:52 PM, Suraj Kurapati wrote:

    > Nicholas wrote:
    >> I have written a ruby extension in C++ and it works fine on OS X
    >> Tiger which ships ruby-1.8.2.

    >
    > I'm surprised that it actually works in 1.8.2...


    Why? Nothing has fundamentally changed since 1.8.2. His code sample
    should work in 1.6 just fine as well.

    >> cRCL = rb_define_class("rcl", rb_cObject); <=== /CRASH

    >
    > Why are you defining a class whose name is not capitalized?


    That has nothing to do with why he's crashing.

    > Ruby doesn't let you do this from Ruby code:
    >
    > $ irb
    > class rcl
    > end
    > SyntaxError: compile error
    > (irb):1: class/module name must be CONSTANT
    > from (irb):2


    % ruby -e 'names = []; ObjectSpace.each_object(Module) { |o| names <<
    o.name if o.name =~ /^[a-z]/ }; p names'
    ["fatal"]
    Ryan Davis, Jan 28, 2007
    #4
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. r
    Replies:
    95
    Views:
    2,723
  2. Gavin Kistner
    Replies:
    0
    Views:
    113
    Gavin Kistner
    Jul 13, 2004
  3. Rich Morin

    SketchUp Ruby API

    Rich Morin, May 15, 2007, in forum: Ruby
    Replies:
    3
    Views:
    182
    Rich Morin
    May 16, 2007
  4. Eps Ilon
    Replies:
    3
    Views:
    188
    Todd Burch
    Sep 3, 2008
  5. Zeeshan Zia
    Replies:
    1
    Views:
    208
    Marc Heiler
    Mar 7, 2008
Loading...

Share This Page