[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Extending ruby with c

RubyTalk@gmail.com

1/21/2006 12:49:00 AM

13 Answers

Eero Saynatkari

1/21/2006 1:44:00 AM

0

ruby talk wrote:
> Hello,
> I am looking for an example/tutorial on extending ruby with C using
> windows.
> I add the using windows because I was to extend pcap ruby to windows
> (one
> day), and it is what i currently have installed. I read the pickaxe book
> and
> the example does not work for me. I think my problem with pickaxe
> example is
> the location of my file in the ruby dir. I was getting and error with
> the
> value statment so i removed all the code excpet the return self in the
> functions. and i get
>
> c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
> `require__':
> C:\ruby\lib\ruby\Test.rb:7: void value expression (SyntaxError)
> return self;
> ^
> C:\ruby\lib\ruby\Test.rb:7: odd number list for Hash
> return self;
> ^
> C:\ruby\lib\ruby\Test.rb:7: syntax error
> return self;
> ^
> C:\ruby\lib\ruby\Test.rb:8: syntax error from
> c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
> `require'
> from testtest.rb:1

Is return self; in the C code? (The C level does not have an
implicit self.) Does everything compile OK with extconf.rb?

If you post the code, we can troubleshoot.

> I read this
> http://www.onlamp.com/pub/a/onlamp/2004/11/18/extending... and
> it is
> in linux, make does not work.
>
> Thank you for your time.
> Becker


E

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


RubyTalk@gmail.com

1/21/2006 3:12:00 AM

0

I am using the pickaxe example to help learn how it is writen.
Thank you once again.
Becker

my run program
[code]
require "C:\\ruby\\Test"
t = Test.new()
t.add("Bill Chase")
[code]

my code example from pickaxe saved as a .rb
[code]
#include "ruby.h"
static VALUE t_init(VALUE self)
{
VALUE arr;
arr = rb_ary_new();
rb_iv_set(self, "@arr", arr);
return self;
}

static VALUE t_add(VALUE self, VALUE anObject)
{
VALUE arr;
arr = rb_iv_get(self, "@arr");
rb_ary_push(arr, anObject);
return arr;
}

VALUE cTest;

void Init_Test() {
cTest = rb_define_class("Test", rb_cObject);
rb_define_method(cTest, "initialize", t_init, 0);
rb_define_method(cTest, "add", t_add, 1);
}

[code]


error
[error]
C:\ruby\Test.rb:2: warning: parenthesize argument(s) for future version
C:\ruby\Test.rb:2: warning: parenthesize argument(s) for future version
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in `require__':
C:\ruby\Test.rb:4: syntax error (SyntaxError)
VALUE arr;
^
C:\ruby\Test.rb:8: syntax error from
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in `require'
from testtest.rb:1
[error]




On 1/20/06, Eero Saynatkari <ruby-forum-reg@mailinator.com> wrote:
>
> ruby talk wrote:
> > Hello,
> > I am looking for an example/tutorial on extending ruby with C using
> > windows.
> > I add the using windows because I was to extend pcap ruby to windows
> > (one
> > day), and it is what i currently have installed. I read the pickaxe book
> > and
> > the example does not work for me. I think my problem with pickaxe
> > example is
> > the location of my file in the ruby dir. I was getting and error with
> > the
> > value statment so i removed all the code excpet the return self in the
> > functions. and i get
> >
> > c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
> > `require__':
> > C:\ruby\lib\ruby\Test.rb:7: void value expression (SyntaxError)
> > return self;
> > ^
> > C:\ruby\lib\ruby\Test.rb:7: odd number list for Hash
> > return self;
> > ^
> > C:\ruby\lib\ruby\Test.rb:7: syntax error
> > return self;
> > ^
> > C:\ruby\lib\ruby\Test.rb:8: syntax error from
> > c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in
> > `require'
> > from testtest.rb:1
>
> Is return self; in the C code? (The C level does not have an
> implicit self.) Does everything compile OK with extconf.rb?
>
> If you post the code, we can troubleshoot.
>
> > I read this
> > http://www.onlamp.com/pub/a/onlamp/2004/11/18/extending... and
> > it is
> > in linux, make does not work.
> >
> > Thank you for your time.
> > Becker
>
>
> E
>
> --
> Posted via http://www.ruby-....
>
>

Tim Hunter

1/21/2006 3:25:00 AM

0

ruby talk wrote:
> I am using the pickaxe example to help learn how it is writen.
> Thank you once again.
> Becker
>
> my run program
> [code]
> require "C:\\ruby\\Test"
> t = Test.new()
> t.add("Bill Chase")
> [code]
>
> my code example from pickaxe saved as a .rb
> [code]
> #include "ruby.h"
> static VALUE t_init(VALUE self)
> {
> VALUE arr;
> arr = rb_ary_new();
> rb_iv_set(self, "@arr", arr);
> return self;
> }
>
> static VALUE t_add(VALUE self, VALUE anObject)
> {
> VALUE arr;
> arr = rb_iv_get(self, "@arr");
> rb_ary_push(arr, anObject);
> return arr;
> }
>
> VALUE cTest;
>
> void Init_Test() {
> cTest = rb_define_class("Test", rb_cObject);
> rb_define_method(cTest, "initialize", t_init, 0);
> rb_define_method(cTest, "add", t_add, 1);
> }
>
> [code]
>
>
> error
> [error]
> C:\ruby\Test.rb:2: warning: parenthesize argument(s) for future version
> C:\ruby\Test.rb:2: warning: parenthesize argument(s) for future version
> c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in `require__':
> C:\ruby\Test.rb:4: syntax error (SyntaxError)
> VALUE arr;
> ^

You do understand that you have to compile the C code and link it into a
..dll, don't you?

Eero Saynatkari

1/21/2006 3:45:00 AM

0

ruby talk wrote:
> I am using the pickaxe example to help learn how it is writen.
> Thank you once again.
> Becker
>
> my run program
> [code]
> require "C:\\ruby\\Test"
> t = Test.new()
> t.add("Bill Chase")
> [code]
>
> my code example from pickaxe saved as a .rb

This here is the problem; the below code must be
saved as a .c file and then compiled to a library
using extconf.rb (the Pickaxe should have further
instructions for this). Once done, you will have
a Test.so file that you can #require for example
from irb.

> [code]
> #include "ruby.h"
> static VALUE t_init(VALUE self)
> {
> VALUE arr;
> arr = rb_ary_new();
> rb_iv_set(self, "@arr", arr);
> return self;
> }
>
> static VALUE t_add(VALUE self, VALUE anObject)
> {
> VALUE arr;
> arr = rb_iv_get(self, "@arr");
> rb_ary_push(arr, anObject);
> return arr;
> }
>
> VALUE cTest;
>
> void Init_Test() {
> cTest = rb_define_class("Test", rb_cObject);
> rb_define_method(cTest, "initialize", t_init, 0);
> rb_define_method(cTest, "add", t_add, 1);
> }
>
> [code]
>
>
> < Error messages elided />

The code itself is fine, you just need to compile it.


E


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


RubyTalk@gmail.com

1/21/2006 4:05:00 AM

0

Hello,
i created the .rb
[code]
require 'mkmf'

dir_config("Test")

create_makefile("Test")
[code]

but it only created the makefile which in windows make is not a command.
What do i do with the file instead?
Becker


On 1/20/06, Eero Saynatkari <ruby-forum-reg@mailinator.com> wrote:
>
> ruby talk wrote:
> > I am using the pickaxe example to help learn how it is writen.
> > Thank you once again.
> > Becker
> >
> > my run program
> > [code]
> > require "C:\\ruby\\Test"
> > t = Test.new()
> > t.add("Bill Chase")
> > [code]
> >
> > my code example from pickaxe saved as a .rb
>
> This here is the problem; the below code must be
> saved as a .c file and then compiled to a library
> using extconf.rb (the Pickaxe should have further
> instructions for this). Once done, you will have
> a Test.so file that you can #require for example
> from irb.
>
> > [code]
> > #include "ruby.h"
> > static VALUE t_init(VALUE self)
> > {
> > VALUE arr;
> > arr = rb_ary_new();
> > rb_iv_set(self, "@arr", arr);
> > return self;
> > }
> >
> > static VALUE t_add(VALUE self, VALUE anObject)
> > {
> > VALUE arr;
> > arr = rb_iv_get(self, "@arr");
> > rb_ary_push(arr, anObject);
> > return arr;
> > }
> >
> > VALUE cTest;
> >
> > void Init_Test() {
> > cTest = rb_define_class("Test", rb_cObject);
> > rb_define_method(cTest, "initialize", t_init, 0);
> > rb_define_method(cTest, "add", t_add, 1);
> > }
> >
> > [code]
> >
> >
> > < Error messages elided />
>
> The code itself is fine, you just need to compile it.
>
>
> E
>
>
> --
> Posted via http://www.ruby-....
>
>

Eero Saynatkari

1/21/2006 4:24:00 AM

0

ruby talk wrote:
> Hello,
> i created the .rb
> [code]
> require 'mkmf'
>
> dir_config("Test")
>
> create_makefile("Test")
> [code]
>
> but it only created the makefile which in windows make is not a command.
> What do i do with the file instead?

Windows can use a program called 'nmake' that you can use.
In addition to this, you would need to install a C compiler.
Microsoft does offer a free version of theirs. Both should
be available somewhere on http://ww....

Alternatively, you could install the MinGW toolkit from
http://www..., it provides minimal GNU tools.

> Becker


E

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


RubyTalk@gmail.com

1/21/2006 4:37:00 AM

0

RubyTalk@gmail.com

1/21/2006 5:34:00 AM

0

For the other program i get this error. I will never win at this. I am
currently downloading the 2005 express c++ it should have the cl.exe file?


iv@SLAB-1298E5B638 /c/ruby/code
$ make
Makefile:105: *** target pattern contains no `%'. Stop.


Becker

On 1/20/06, ruby talk < rubytalk@gmail.com> wrote:
>
> Thank you i found nmake at
> http://support.microsoft.com/default.aspx?scid=kb;en-...
>
> using nmake i get this error
> C:\ruby\code>nmake
>
> Microsoft (R) Program Maintenance Utility Version 1.50
> Copyright (c) Microsoft Corp 1988-94. All rights reserved.
>
> cl -nologo -MD -Zi -O2b2xg- -G6 -I.
> -Ic:/ruby/lib/ruby/1.8/i386-mswin32
> -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -IC:/ruby/code -I. -I./..
> -I./../missing -c
> -TcTest.c
> 'cl' is not recognized as an internal or external command,
> operable program or batch file.
> NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code
> '0x1'
> Stop.
>
> C:\ruby\code>
>
> I will try the other program next.
> Becker
>
> On 1/20/06, Eero Saynatkari < ruby-forum-reg@mailinator.com> wrote:
> >
> > ruby talk wrote:
> > > Hello,
> > > i created the .rb
> > > [code]
> > > require 'mkmf'
> > >
> > > dir_config("Test")
> > >
> > > create_makefile("Test")
> > > [code]
> > >
> > > but it only created the makefile which in windows make is not a
> command.
> > > What do i do with the file instead?
> >
> > Windows can use a program called 'nmake' that you can use.
> > In addition to this, you would need to install a C compiler.
> > Microsoft does offer a free version of theirs. Both should
> > be available somewhere on http://ww....
> >
> > Alternatively, you could install the MinGW toolkit from
> > http://www... , it provides minimal GNU tools.
> >
> > > Becker
> >
> >
> > E
> >
> > --
> > Posted via http://www.ruby-....
> >
> >
>
>

RubyTalk@gmail.com

1/21/2006 6:38:00 PM

0

Good news:
I got CL to work! i donlowaded Visual C++ Toolkit 2003 for free and now cl
works.

Bad news:
now i get a differnt error.

C:\ruby\code>nmake

Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.

cl -nologo -MD -Zi -O2b2xg- -G6 -I.
-Ic:/ruby/lib/ruby/1.8/i386-mswin32
-Ic:/ruby/lib/ruby/1.8/i386-mswin32 -IC:/ruby/code -I. -I./..
-I./../missing -c
-TcTest.c
Test.c
c:\ruby\lib\ruby\1.8\i386-mswin32\win32\win32.h(25) : fatal error C1083:
Cannot
open include file: 'windows.h': No such file or directory
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2'
Stop.

C:\ruby\code>

Becker

On 1/21/06, ruby talk <rubytalk@gmail.com> wrote:
>
> For the other program i get this error. I will never win at this. I am
> currently downloading the 2005 express c++ it should have the cl.exe file?
>
>
> iv@SLAB-1298E5B638 /c/ruby/code
> $ make
> Makefile:105: *** target pattern contains no `%'. Stop.
>
>
> Becker
>
> On 1/20/06, ruby talk < rubytalk@gmail.com> wrote:
> >
> > Thank you i found nmake at
> > http://support.microsoft.com/default.aspx?scid=kb;en-...
> >
> > using nmake i get this error
> > C:\ruby\code>nmake
> >
> > Microsoft (R) Program Maintenance Utility Version 1.50
> > Copyright (c) Microsoft Corp 1988-94. All rights reserved.
> >
> > cl -nologo -MD -Zi -O2b2xg- -G6 -I.
> > -Ic:/ruby/lib/ruby/1.8/i386-mswin32
> > -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -IC:/ruby/code -I. -I./..
> > -I./../missing -c
> > -TcTest.c
> > 'cl' is not recognized as an internal or external command,
> > operable program or batch file.
> > NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code
> > '0x1'
> > Stop.
> >
> > C:\ruby\code>
> >
> > I will try the other program next.
> > Becker
> >
> > On 1/20/06, Eero Saynatkari < ruby-forum-reg@mailinator.com> wrote:
> > >
> > > ruby talk wrote:
> > > > Hello,
> > > > i created the .rb
> > > > [code]
> > > > require 'mkmf'
> > > >
> > > > dir_config("Test")
> > > >
> > > > create_makefile("Test")
> > > > [code]
> > > >
> > > > but it only created the makefile which in windows make is not a
> > command.
> > > > What do i do with the file instead?
> > >
> > > Windows can use a program called 'nmake' that you can use.
> > > In addition to this, you would need to install a C compiler.
> > > Microsoft does offer a free version of theirs. Both should
> > > be available somewhere on http://ww....
> > >
> > > Alternatively, you could install the MinGW toolkit from
> > > http://www... , it provides minimal GNU tools.
> > >
> > > > Becker
> > >
> > >
> > > E
> > >
> > > --
> > > Posted via http://www.ruby-....
> > >
> > >
> >
> >
>
>

Joe Van Dyk

1/21/2006 7:12:00 PM

0

On 1/21/06, ruby talk <rubytalk@gmail.com> wrote:
> Good news:
> I got CL to work! i donlowaded Visual C++ Toolkit 2003 for free and now cl
> works.
>
> Bad news:
> now i get a differnt error.
>
> C:\ruby\code>nmake
>
> Microsoft (R) Program Maintenance Utility Version 1.50
> Copyright (c) Microsoft Corp 1988-94. All rights reserved.
>
> cl -nologo -MD -Zi -O2b2xg- -G6 -I.
> -Ic:/ruby/lib/ruby/1.8/i386-mswin32
> -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -IC:/ruby/code -I. -I./..
> -I./../missing -c
> -TcTest.c
> Test.c
> c:\ruby\lib\ruby\1.8\i386-mswin32\win32\win32.h(25) : fatal error C1083:
> Cannot
> open include file: 'windows.h': No such file or directory

You need to tell the compiler about the directory that includes the
header file windows.h. You can probably do this via giving the
compiler line the following: -I/<dir>, where <dir> is the directory
that contains windows.h.

> NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0x2'
> Stop.
>
> C:\ruby\code>
>
> Becker
>
> On 1/21/06, ruby talk <rubytalk@gmail.com> wrote:
> >
> > For the other program i get this error. I will never win at this. I am
> > currently downloading the 2005 express c++ it should have the cl.exe file?
> >
> >
> > iv@SLAB-1298E5B638 /c/ruby/code
> > $ make
> > Makefile:105: *** target pattern contains no `%'. Stop.
> >
> >
> > Becker
> >
> > On 1/20/06, ruby talk < rubytalk@gmail.com> wrote:
> > >
> > > Thank you i found nmake at
> > > http://support.microsoft.com/default.aspx?scid=kb;en-...
> > >
> > > using nmake i get this error
> > > C:\ruby\code>nmake
> > >
> > > Microsoft (R) Program Maintenance Utility Version 1.50
> > > Copyright (c) Microsoft Corp 1988-94. All rights reserved.
> > >
> > > cl -nologo -MD -Zi -O2b2xg- -G6 -I.
> > > -Ic:/ruby/lib/ruby/1.8/i386-mswin32
> > > -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -IC:/ruby/code -I. -I./..
> > > -I./../missing -c
> > > -TcTest.c
> > > 'cl' is not recognized as an internal or external command,
> > > operable program or batch file.
> > > NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code
> > > '0x1'
> > > Stop.
> > >
> > > C:\ruby\code>
> > >
> > > I will try the other program next.
> > > Becker
> > >
> > > On 1/20/06, Eero Saynatkari < ruby-forum-reg@mailinator.com> wrote:
> > > >
> > > > ruby talk wrote:
> > > > > Hello,
> > > > > i created the .rb
> > > > > [code]
> > > > > require 'mkmf'
> > > > >
> > > > > dir_config("Test")
> > > > >
> > > > > create_makefile("Test")
> > > > > [code]
> > > > >
> > > > > but it only created the makefile which in windows make is not a
> > > command.
> > > > > What do i do with the file instead?
> > > >
> > > > Windows can use a program called 'nmake' that you can use.
> > > > In addition to this, you would need to install a C compiler.
> > > > Microsoft does offer a free version of theirs. Both should
> > > > be available somewhere on http://ww....
> > > >
> > > > Alternatively, you could install the MinGW toolkit from
> > > > http://www... , it provides minimal GNU tools.
> > > >
> > > > > Becker
> > > >
> > > >
> > > > E
> > > >
> > > > --
> > > > Posted via http://www.ruby-....
> > > >
> > > >
> > >
> > >
> >
> >
>
>