[newbie] help, I can't compile an extension on windows

Hello!

I'm on Windows2000, with ruby 1.8.2 (2004-12-25) [i386-mswin32]
(on-click-installer). I have latest mingw and VC++ installed (the
command line version) and vars are set: PATH to each bin dirs, LIB to
each lib dirs and INCLUDE to each include dirs.

I've written in a file the first sample found in pragmatic programmer's
book: http://www.ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
----8<----
#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);
}
----8<----

My first attempt was with the extconf.rb written this way:
----8<----
require 'mkmf'
create_makefile("Test")
----8<----

I launch it, I then launch make (the mingw version of make, I don't have
M$ make. Someone know where I can freely get it?)

And I get this error:
----8<----

make

makefile:105: *** multiple target patterns. Stop.
----8<----

I'm not a make expert and I feel hard to see where the error truly lies.

I then tried it manually, as I read it on the same pragprog page (with
readaptation for my directory structure):
----8<----

gcc -fPIC -IC:\usr\ruby\lib\ruby\1.8\i386-mswin32 -g -O2 -c

first_prag_sample.c -o first_prag_sample.o
cc1.exe: warning: -fPIC ignored for target (all code is position
independent)
In file included from C:/usr/ruby/lib/ruby/1.8/i386-mswin32/ruby.h:670,
                 from first_prag_sample.c:1:
C:/usr/ruby/lib/ruby/1.8/i386-mswin32/missing.h:64:1: warning: "isinf"
redefined

In file included from
C:/usr/ruby/lib/ruby/1.8/i386-mswin32/win32/win32.h:56,
                 from C:/usr/ruby/lib/ruby/1.8/i386-mswin32/defines.h:184,
                 from C:/usr/ruby/lib/ruby/1.8/i386-mswin32/ruby.h:22,
                 from first_prag_sample.c:1:
C:/usr/MinGW/include/math.h:290:1: warning: this is the location of the
previous
definition
----8<----

And then the second command line:
----8<----
gcc -shared -o Test.so first_prag_sample.o -lc
C:\usr\MinGW\bin\..\lib\gcc-lib\mingw32\3.2.3\..\..\..\..\mingw32\bin\ld.exe:
cannot find -lc

----8<----

Any clues? Any tips? Perhaps a way to do it easier with rake or rant?

···

--
Lionel Thiry

Personal website: http://users.skynet.be/lthiry/

Lionel Thiry wrote:

Hello!

I'm on Windows2000, with ruby 1.8.2 (2004-12-25) [i386-mswin32]
(on-click-installer). I have latest mingw and VC++ installed (the
command line version) and vars are set: PATH to each bin dirs, LIB to
each lib dirs and INCLUDE to each include dirs.

I've written in a file the first sample found in pragmatic programmer's
book: Programming Ruby: The Pragmatic Programmer's Guide

<snip>

IIRC, your problem is caused by the word "Test". I think it conflicts
with Kernel.test or something strange. Try changing it to "Foo" and
see how it goes. I may be off.

I launch it, I then launch make (the mingw version of make, I don't have
M$ make. Someone know where I can freely get it?)

If you follow these instructions, you should have nmake.

Regards,

Dan

Daniel Berger a écrit :

Lionel Thiry wrote:

Hello!

I'm on Windows2000, with ruby 1.8.2 (2004-12-25) [i386-mswin32]
(on-click-installer). I have latest mingw and VC++ installed (the
command line version) and vars are set: PATH to each bin dirs, LIB to
each lib dirs and INCLUDE to each include dirs.

I've written in a file the first sample found in pragmatic programmer's
book: Programming Ruby: The Pragmatic Programmer's Guide

<snip>

IIRC, your problem is caused by the word "Test". I think it conflicts
with Kernel.test or something strange. Try changing it to "Foo" and
see how it goes. I may be off.

Replaced all occurences of Test by Foo. The error is still exactly the same.

----8<----

make

makefile:105: *** multiple target patterns. Stop.
----8<----

I launch it, I then launch make (the mingw version of make, I don't have
M$ make. Someone know where I can freely get it?)

http://www.rubygarden.org/ruby?WindowsCompiler

If you follow these instructions, you should have nmake.

Thank for the tip.

Regards,

Dan

Regards

···

--
Lionel Thiry

Personal website: http://users.skynet.be/lthiry/

Daniel Berger a écrit :

Lionel Thiry wrote:

I launch it, I then launch make (the mingw version of make, I don't have
M$ make. Someone know where I can freely get it?)

http://www.rubygarden.org/ruby?WindowsCompiler

If you follow these instructions, you should have nmake.

I have it now, and it still don't work. There is something about a
missing windows.h that I can't find anywhere. I can't find excepted in
my MinGw include dir, but if I add it to the INCLUDE var, I get another
bunch of errors (probably some kind of incompatibilities between cl
compiler and mingw headers)

···

--
Lionel Thiry

Personal website: http://users.skynet.be/lthiry/

Hi,

At Thu, 2 Jun 2005 08:20:23 +0900,
Lionel Thiry wrote in [ruby-talk:144281]:

----8<----
>make
makefile:105: *** multiple target patterns. Stop.
----8<----

>>I launch it, I then launch make (the mingw version of make, I don't have
>>M$ make. Someone know where I can freely get it?)

Makefile generated by mkmf.rb for nmake can't work with other makes.

`extconf.rb --with-make-prog=make' might help you, though I'm not
sure.

···

--
Nobu Nakada

Daniel Berger a écrit :

Lionel Thiry wrote:

I launch it, I then launch make (the mingw version of make, I don't have
M$ make. Someone know where I can freely get it?)

Captcha

If you follow these instructions, you should have nmake.

I have it now, and it still don't work. There is something about a
missing windows.h that I can't find anywhere. I can't find excepted in
my MinGw include dir, but if I add it to the INCLUDE var, I get another
bunch of errors (probably some kind of incompatibilities between cl
compiler and mingw headers)

You should not be mixing cl and MinGW... use whichever tool your
version of Ruby was compiled with. You can get the MS tools as a
free (your soul does not count) download if you need them.

Lionel Thiry

E

···

Le 5/6/2005, "Lionel Thiry" <lthiryidontwantspam@skynetnospam.be> a écrit:

--
template<typename duck>
void quack(duck& d) { d.quack(); }

nobuyoshi nakada a écrit :

Hi,

At Thu, 2 Jun 2005 08:20:23 +0900,
Lionel Thiry wrote in [ruby-talk:144281]:

----8<----

make

makefile:105: *** multiple target patterns. Stop.
----8<----

I launch it, I then launch make (the mingw version of make, I don't have
M$ make. Someone know where I can freely get it?)

Makefile generated by mkmf.rb for nmake can't work with other makes.

`extconf.rb --with-make-prog=make' might help you, though I'm not
sure.

Unfortunately, it doesn't work.

Seems I'm going to dive into mkmf sources.

···

--
Lionel Thiry

Personal website: http://users.skynet.be/lthiry/

ES a écrit :

Lionel Thiry wrote:

I launch it, I then launch make (the mingw version of make, I don't have
M$ make. Someone know where I can freely get it?)

http://www.rubygarden.org/ruby?WindowsCompiler

If you follow these instructions, you should have nmake.

I have it now, and it still don't work. There is something about a
missing windows.h that I can't find anywhere. I can't find excepted in
my MinGw include dir, but if I add it to the INCLUDE var, I get another
bunch of errors (probably some kind of incompatibilities between cl
compiler and mingw headers)

You should not be mixing cl and MinGW...

I haven't. This what I tried to explained: if I mix them, I get errors,
so I don't.

use whichever tool your
version of Ruby was compiled with. You can get the MS tools as a
free (your soul does not count) download if you need them.

I already have all the MS tools I should use: nmake, cl, link, and the
headers and libs, and so on. But I got the error of windows.h missing,
and there are no windows.h anywhere in MS include stuff.

···

Le 5/6/2005, "Lionel Thiry" <lthiryidontwantspam@skynetnospam.be> a > écrit: > >>Daniel Berger a écrit :

--
Lionel Thiry

Personal website: http://users.skynet.be/lthiry/

Hi,

At Fri, 3 Jun 2005 07:40:23 +0900,
Lionel Thiry wrote in [ruby-talk:144419]:

> Makefile generated by mkmf.rb for nmake can't work with other makes.
>
> `extconf.rb --with-make-prog=make' might help you, though I'm not
> sure.
>

Unfortunately, it doesn't work.

I'll consider about it later, but mingw doesn't support msvcr7 runtime
yet, which is used by VisualC++ 7 or later.

···

--
Nobu Nakada