Forum: Ruby Embedded Ruby into C

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.
Joe Van D. (Guest)
on 2005-12-12 04:18
(Received via mailing list)
Anyone got any good resources on embedding C into Ruby?  The ones I
found were a couple years old (i.e. for 1.6).

What I'd like to do is be able to call Ruby functions from the C code
(don't care about return value here), and be able to call C functions
(and get the return data) from the Ruby code.

Thanks,
Joe
Jon S. (Guest)
on 2005-12-12 04:57
(Received via mailing list)
On 12/11/05, Joe Van D. <removed_email_address@domain.invalid> wrote:
> Anyone got any good resources on embedding C into Ruby?  The ones I
> found were a couple years old (i.e. for 1.6).

Chapter 21 in Programming Ruby, Second Edition covers it for Ruby 1.8.
I haven't tried it but it looks like a reasonably complete
explanation.
Joe Van D. (Guest)
on 2005-12-12 05:06
(Received via mailing list)
On 12/11/05, Joe Van D. <removed_email_address@domain.invalid> wrote:
> Anyone got any good resources on embedding C into Ruby?  The ones I
> found were a couple years old (i.e. for 1.6).
>
> What I'd like to do is be able to call Ruby functions from the C code
> (don't care about return value here), and be able to call C functions
> (and get the return data) from the Ruby code.

I created a Ruby extension in C called 'functions.so'.  My ruby script
is require'ing it.

When I launch the Ruby script via ruby_run() in C, I get 'no such file
to load -- functions' error.

Any ideas?
Jon S. (Guest)
on 2005-12-12 05:12
(Received via mailing list)
On 12/11/05, Joe Van D. <removed_email_address@domain.invalid> wrote:
>
> When I launch the Ruby script via ruby_run() in C, I get 'no such file
> to load -- functions' error.

The source code from the book is here:
http://www.pragmaticprogrammer.com/titles/ruby/cod...
The examples from "Extending Ruby" may help.
Joe Van D. (Guest)
on 2005-12-12 05:27
(Received via mailing list)
On 12/11/05, Joe Van D. <removed_email_address@domain.invalid> wrote:
>
> When I launch the Ruby script via ruby_run() in C, I get 'no such file
> to load -- functions' error.

Aha, calling ruby_init_loadpath() did the trick.

Essentially, I have a C program.  I want to create a GUI (using
ruby-gnome2) that can call the C program's functions and process and
report its data.

Originally, I added a small UDP server to the C program that would
listen for UDP messages from the Ruby GUI and that's how they
exchanged information.  The process of creating all the message
formats for the UDP messages was a pain in the butt though.  So I'm
thinking of a different approach (embedding a Ruby program in the C
executable and create Ruby extensions for calling the C functions).

Joe
Joe Van D. (Guest)
on 2005-12-12 05:30
(Received via mailing list)
On 12/11/05, Joe Van D. <removed_email_address@domain.invalid> wrote:
> > is require'ing it.
> Originally, I added a small UDP server to the C program that would
> listen for UDP messages from the Ruby GUI and that's how they
> exchanged information.  The process of creating all the message
> formats for the UDP messages was a pain in the butt though.  So I'm
> thinking of a different approach (embedding a Ruby program in the C
> executable and create Ruby extensions for calling the C functions).

Is this a reasonable approach:

int main()
{
  initialize ruby stuff

  create glib thread (or maybe pthread)
  {
     run ruby script that starts the GUI
  }
}
Joe Van D. (Guest)
on 2005-12-12 07:03
(Received via mailing list)
Anyone know how I can avoid the following compile errors?

/usr/lib/libruby.so: undefined reference to `gnu_dev_major@GLIBC_2.3.3'
/usr/lib/libruby.so: undefined reference to `gnu_dev_minor@GLIBC_2.3.3'
Joe Van D. (Guest)
on 2005-12-12 08:21
(Received via mailing list)
One more question:

Can I embed a Ruby extension into a C executable, run a Ruby script
from the C executable, and have the Ruby script have access to the
Ruby extension that's in the C executable?
Joe Van D. (Guest)
on 2005-12-12 10:28
(Received via mailing list)
Whew, figured it all out.

My solution was to create a Ruby object in C that has access to all of
the C program's internal data, then create a normal Ruby object from a
Ruby script file, then give that Ruby object the C/Ruby object that I
first created.

So, now, in C, I have this gigantic array of structs.  Each struct has
a bunch of fields and a bunch of 'sub structs' (i.e. pointers to other
structs).

What's the easiest way to do reporting on this array of structs in Ruby?

Thanks,
Joe
This topic is locked and can not be replied to.