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

L

Lionel Thiry

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<----
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?
 
D

Daniel Berger

Lionel said:
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

<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?)

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

If you follow these instructions, you should have nmake.

Regards,

Dan
 
L

Lionel Thiry

Daniel Berger a écrit :
Lionel said:
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


<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<----
makefile:105: *** multiple target patterns. Stop.
----8<----
http://www.rubygarden.org/ruby?WindowsCompiler

If you follow these instructions, you should have nmake.
Thank for the tip.
Regards,

Dan

Regards
 
N

nobuyoshi nakada

Hi,

At Thu, 2 Jun 2005 08:20:23 +0900,
Lionel Thiry wrote in [ruby-talk:144281]:
----8<----
makefile:105: *** multiple target patterns. Stop.
----8<----

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.
 
L

Lionel Thiry

nobuyoshi nakada a écrit :
Hi,

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


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


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.
 
L

Lionel Thiry

Daniel Berger a écrit :
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)
 
E

ES

Le 5/6/2005 said:
Daniel Berger a =E9crit :

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
 
N

nobuyoshi nakada

Hi,

At Fri, 3 Jun 2005 07:40:23 +0900,
Lionel Thiry wrote in [ruby-talk:144419]:
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.
 
L

Lionel Thiry

ES a écrit :
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.
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,967
Messages
2,570,148
Members
46,694
Latest member
LetaCadwal

Latest Threads

Top