[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Win32 environment for ruby extension work

Ross Bamford

12/11/2006 9:04:00 PM

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 :( ). 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
3 Answers

Jano Svitok

12/11/2006 9:40:00 PM

0

On 12/11/06, Ross Bamford <rosco@roscopeco.remove.co.uk> wrote:
> 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 :( ). 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... ;-)

> Thanks,

Ross Bamford

12/13/2006 10:22:00 AM

0

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:
>> 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 :( ). 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... ;-)
>

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

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

Jano Svitok

12/14/2006 11:33:00 AM

0

On 12/13/06, Ross Bamford <rosco@roscopeco.remove.co.uk> wrote:
> 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 ;-)

J.