From: Ross Bamford Date: 2006-12-13T19:25:05+09:00 Subject: Re: Win32 environment for ruby extension work On Mon, 11 Dec 2006 21:40:08 -0000, Jan Svitok wrote: > On 12/11/06, Ross Bamford 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