Win32 environment for ruby extension work

Hi,

I've recently been attempting to look at Win32 compatibility on the various C extensions I work on, but in my ignorance I'm getting a bit confused (Microsoft's site seems designed to promote that :frowning: ). I could use a little help from someone who knows about these things.

To cut a (very) long story short, here's what I need to know:

1) I now gather that the VC 2005 I downloaded isn't going to cut it if I want to target the one-click installer. I can compile, but not use, extensions with it. I gather I need VC 6? Please tell me I'm wrong about this, but isn't that going to cost actual money? Is there a free download for it that I've missed?

2) Should I be targeting the one-click installer? It seems like it's the most commonly used on Windows, and for testing it's probably irrelevant, but I'd like to do precompiled binaries for win32 as well - should they target the one-click, or something else?

3) Am I going to run into similar problems with multiple runtime environments when using e.g. libxml-ruby, given that it's dependencies may be compiled with a different compiler. Should I be expecting any gotchas when (if) I get to that stage?

I'm sure there are great resources out there, but I have a bit of information overload and I'm struggling to sort the wheat from the chaff on this one. Any help or links to helpful resources would be very much appreciated.

Thanks,

ยทยทยท

--
Ross Bamford - rosco@roscopeco.remove.co.uk

Hi,

I've recently been attempting to look at Win32 compatibility on the
various C extensions I work on, but in my ignorance I'm getting a bit
confused (Microsoft's site seems designed to promote that :frowning: ). I could
use a little help from someone who knows about these things.

To cut a (very) long story short, here's what I need to know:

1) I now gather that the VC 2005 I downloaded isn't going to cut it if I
want to target the one-click installer. I can compile, but not use,
extensions with it. I gather I need VC 6? Please tell me I'm wrong about
this, but isn't that going to cost actual money? Is there a free download
for it that I've missed?

The compiler situation on Windows is currently a mess. Read this to help
understand the issues:

   You are in a maze of twisty little passages, all alike. // halo โ€ข statue

You should be able to use VC 6 (if you can find a copy, its no longer
available from MS) or MinGW. Either one should produce extensions compatible
wit the one-click installer.

2) Should I be targeting the one-click installer? It seems like it's the

most commonly used on Windows, and for testing it's probably irrelevant,
but I'd like to do precompiled binaries for win32 as well - should they
target the one-click, or something else?

Yes, you should target the one-click installer.

3) Am I going to run into similar problems with multiple runtime

environments when using e.g. libxml-ruby, given that it's dependencies may
be compiled with a different compiler. Should I be expecting any gotchas
when (if) I get to that stage?

If they are compiled with VC 6 or MinGW you'll be ok. If the depdencies are
compiled with other compilers you you could be ok or you could have
problems... it just depends.

Curt

I'm sure there are great resources out there, but I have a bit of

ยทยทยท

On 12/11/06, Ross Bamford <rosco@roscopeco.remove.co.uk> wrote:

information overload and I'm struggling to sort the wheat from the chaff
on this one. Any help or links to helpful resources would be very much
appreciated.

Thanks,
--
Ross Bamford - rosco@roscopeco.remove.co.uk

Hi,

I've recently been attempting to look at Win32 compatibility on the
various C extensions I work on, but in my ignorance I'm getting a bit
confused (Microsoft's site seems designed to promote that :frowning: ). I could
use a little help from someone who knows about these things.

I'm not an expert, so take this as such. Sometime ago there was a
thread on choosing compiler for OCI, you might find interesting info
there.

AFAIK, the problem with VC8 is that it uses sidebyside, that requires
you to put so called manifests (xml files describing dependencies)
along your dlls. One way to work around this is to statically compile.
Another is to install those files into a system-wide dir
(/Windows/SxS). There is also a binary incompatibility between VC6 and
VC7 and VC8 runtime libs (I believe they reordered functions in the
dlls).

To cut a (very) long story short, here's what I need to know:

1) I now gather that the VC 2005 I downloaded isn't going to cut it if I
want to target the one-click installer. I can compile, but not use,
extensions with it. I gather I need VC 6? Please tell me I'm wrong about
this, but isn't that going to cost actual money? Is there a free download
for it that I've missed?

IIRC mingw is binary compatible with VC6.

2) Should I be targeting the one-click installer? It seems like it's the
most commonly used on Windows, and for testing it's probably irrelevant,
but I'd like to do precompiled binaries for win32 as well - should they
target the one-click, or something else?

OCI uses win32 binaries from ruby-lang.org as they are, and *they* are
compiled with VC6. OCI doesn't recompile ruby itself, only the
extensions. That relaxes a bit the question.

3) Am I going to run into similar problems with multiple runtime
environments when using e.g. libxml-ruby, given that it's dependencies may
be compiled with a different compiler. Should I be expecting any gotchas
when (if) I get to that stage?

I was able to run VC8-compiled extension for more than year almost
each night, although I got segfaults rarely (10 times altogether). I
haven't analyzed them, so I don't know the real reason. Unfortunately
I had to live with the manifests... The extension ifself was wrapping
a c++ shared memory protocol - it does mostly type conversions, and
event polling, no files.

I'm sure there are great resources out there, but I have a bit of
information overload and I'm struggling to sort the wheat from the chaff
on this one. Any help or links to helpful resources would be very much
appreciated.

Now I'm not sure if I've added to chaff or wheat side... :wink:

ยทยทยท

On 12/11/06, Ross Bamford <rosco@roscopeco.remove.co.uk> wrote:

Thanks,

Hi,

I've recently been attempting to look at Win32 compatibility on the
various C extensions I work on, but in my ignorance I'm getting a bit
confused (Microsoft's site seems designed to promote that :frowning: ). I could
use a little help from someone who knows about these things.

I'm not an expert, so take this as such. Sometime ago there was a
thread on choosing compiler for OCI, you might find interesting info
there.

AFAIK, the problem with VC8 is that it uses sidebyside, that requires
you to put so called manifests (xml files describing dependencies)
along your dlls. One way to work around this is to statically compile.
Another is to install those files into a system-wide dir
(/Windows/SxS). There is also a binary incompatibility between VC6 and
VC7 and VC8 runtime libs (I believe they reordered functions in the
dlls).

I read a little about this, but it seemed to me at the time like a solution in search of a problem. I did have some problems with VC 8, in that nothing would work unless I copied some .dll files out from /windows/sxs to /windows/system32. After that I still had nothing working, but at least there was a useful error message (about some application trying to initialize the runtime incorrectly).

I don't suppose you have a link that describes these manifests in more detail?

(Btw I do realise now that I'd taken some bad advice on copying those .dll files - I was just working through what information I could find and picked that up off the net somewhere I think).

To cut a (very) long story short, here's what I need to know:

1) I now gather that the VC 2005 I downloaded isn't going to cut it if I
want to target the one-click installer. I can compile, but not use,
extensions with it. I gather I need VC 6? Please tell me I'm wrong about
this, but isn't that going to cost actual money? Is there a free download
for it that I've missed?

IIRC mingw is binary compatible with VC6.

Ahh, ok - I'd not realised this. So assuming I make provisions to generate a correct makefile, I could compile for both testing and ready-made binary downloads using mingw, and they'd run fine against the one-click? Is there an easy way to generate a suitable makefile from the one-click's ruby, or is it just a case of changing the Config::MAKEFILE_CONFIG to suit?

Since I'm planning to offer ready-made binaries, I'm not too worried if there are hoops to jump through / local modifications to make when compiling it up (though it seems a shame that the compatibility situation requires this).

2) Should I be targeting the one-click installer? It seems like it's the
most commonly used on Windows, and for testing it's probably irrelevant,
but I'd like to do precompiled binaries for win32 as well - should they
target the one-click, or something else?

OCI uses win32 binaries from ruby-lang.org as they are, and *they* are
compiled with VC6. OCI doesn't recompile ruby itself, only the
extensions. That relaxes a bit the question.

Okay, cool. So if I target the one-click, presumably I'll be targetting the vast majority of windows users. Those who compile their own ruby on Win32 (do people actually do this? I was unable to use VS 8 even if I compiled a ruby with it, since the resulting ruby didn't seem to want to work..).

I'm sure there are great resources out there, but I have a bit of
information overload and I'm struggling to sort the wheat from the chaff
on this one. Any help or links to helpful resources would be very much
appreciated.

Now I'm not sure if I've added to chaff or wheat side... :wink:

Definitely the wheat - twice while reading your reply I had those moments where disconnected bits of information come together in a flash, so thanks :slight_smile: I'm off to investigate the mingw option, if nothing else it'll save me from that msdn.microsoft.com labyrinthe :wink:

Cheers,

ยทยทยท

On Mon, 11 Dec 2006 21:40:08 -0000, Jan Svitok <jan.svitok@gmail.com> wrote:

On 12/11/06, Ross Bamford <rosco@roscopeco.remove.co.uk> wrote:

--
Ross Bamford - rosco@roscopeco.remove.co.uk

I read a little about this, but it seemed to me at the time like a
solution in search of a problem. I did have some problems with VC 8, in
that nothing would work unless I copied some .dll files out from
/windows/sxs to /windows/system32. After that I still had nothing working,
but at least there was a useful error message (about some application
trying to initialize the runtime incorrectly).

I don't suppose you have a link that describes these manifests in more
detail?

I don't have a link. I just googled and then didn't save the link.
Anyway, the technology is called Side by side, and there is a special
file that you can install that will get rid of the problem... I
believe it's this one: "C:\Program Files\Microsoft Visual Studio
8\SDK\v2.0\BootStrapper\Packages\vcredist_x86\vcredist_x86.exe" but
I'm not sure.

Ahh, ok - I'd not realised this. So assuming I make provisions to generate
a correct makefile, I could compile for both testing and ready-made binary
downloads using mingw, and they'd run fine against the one-click? Is there
an easy way to generate a suitable makefile from the one-click's ruby, or
is it just a case of changing the Config::MAKEFILE_CONFIG to suit?

I don't know.

Okay, cool. So if I target the one-click, presumably I'll be targetting
the vast majority of windows users. Those who compile their own ruby on
Win32 (do people actually do this? I was unable to use VS 8 even if I
compiled a ruby with it, since the resulting ruby didn't seem to want to
work..).

I somehow managed to compile ruby with VS8, although I didn't test it too much.

For more information, you might look up Curt Hibbs', Austin Ziegler's
and Dan Berger's posts as they seem to know the most about win
compilation here :wink:

J.

ยทยทยท

On 12/13/06, Ross Bamford <rosco@roscopeco.remove.co.uk> wrote: