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,