Forum: Ruby Extending ruby with 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.
ruby talk (Guest)
on 2006-01-21 03:27
(Received via mailing list)
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


I read this
http://www.onlamp.com/pub/a/onlamp/2004/11/18/exte...  and
it is
in linux, make does not work.

Thank you for your time.
Becker
Eero S. (Guest)
on 2006-01-21 04:20
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/exte...  and
> it is
> in linux, make does not work.
>
> Thank you for your time.
> Becker


E
ruby talk (Guest)
on 2006-01-21 05:48
(Received via mailing list)
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]
Eero S. (Guest)
on 2006-01-21 06:21
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
ruby talk (Guest)
on 2006-01-21 06:43
(Received via mailing list)
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
Eero S. (Guest)
on 2006-01-21 07:00
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://www.msdn.com.

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

> Becker


E
ruby talk (Guest)
on 2006-01-21 07:16
(Received via mailing list)
Thank you i found nmake at
http://support.microsoft.com/default.aspx?scid=kb;...

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
ruby talk (Guest)
on 2006-01-21 08:14
(Received via mailing list)
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
ruby talk (Guest)
on 2006-01-21 20:39
(Received via mailing list)
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
Joe Van D. (Guest)
on 2006-01-21 21:13
(Received via mailing list)
On 1/21/06, ruby talk <removed_email_address@domain.invalid> wrote:
> 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.
Anatol P. (Guest)
on 2006-01-21 21:28
(Received via mailing list)
See file
"C:\Program Files\Microsoft Visual Studio .NET
2003\Common7\Tools\vsvars32.bat"

that .bat file registres all EVN variables needed for ms compiler. You
need
to add those PATH, INCLUDE, LIB add to user env variables.
ruby talk (Guest)
on 2006-01-21 21:43
(Received via mailing list)
I changed the cl.exe option to -I c:\Dev-cpp\include  /I also works, but
the
windef.h file is in the same Dir as the windows.h


C:\ruby\code>nmake

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

        cl -nologo -I c:\C:\Dev-Cpp\include -MD -Zi -O2b2xg- -G6 -I.
-Ic:/ruby/l
ib/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\windows.h(48) : fatal error C1083:
Cannot
open
 include file: 'windef.h': No such file or directory
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code
'0x2'
Stop.

C:\ruby\code>
ruby talk (Guest)
on 2006-01-21 22:03
(Received via mailing list)
Did that, I got an error for the dir having a space in the ie :
f:\documents
and settings, so i copied the code folder to my c drive root ( c:\rcode)
and now i get the error

        cl -nologo -LD -FeTest.so TcTest.obj Test.obj msvcrt-ruby18.lib
oldname
s.lib user32.lib advapi32.lib wsock32.lib  -link -incremental:no -debug
-opt:ref
 -opt:icf -dll -libpath:"c:/ruby/lib" -def:Test-i386-mswin32.def
cl : Command line warning D4024 : unrecognized source file type '.',
object
file
 assumed
LINK : fatal error LNK1104: cannot open file '.'
NMAKE : fatal error U1077: 'F:\WINDOWS\system32\cmd.exe' : return code
'0x2'
Stop.


Becker
This topic is locked and can not be replied to.