From: Gary Wright Date: 2008-01-03T02:02:22+09:00 Subject: Windows Compilation Madness No point in keeping this discussion in the Zed thread... On Jan 2, 2008, at 10:55 AM, M. Edward (Ed) Borasky wrote: > Thufir wrote: >> Completely off topic, but what's the equivalent for Linux? >> > There is a compiler, usually gcc but others exist. It translates the C > code to an object file. Then there is a linker which collects all > of the > object files and translates them to a "shared library", which usually > has a name ending in ".so". At run time, the shared library is brought > into working memory the first time a Ruby program references it, and > other Ruby programs can then reference it without having to load > another > copy. I could be wrong, but I sense a deeper question in Thurfir's message. What is it about Linux (or *BSD or Mac OS X) that avoids all the compilation problems that arise in the Windows environment? Can a Windows expert confirm my understanding that: Unlink Linux (and *BSD, Mac OS X...), Windows does not come packaged with a development environment and in fact there are multiple mutually-incompatible development environments (Cygwin, MinGW, VC6, VC8). For the most part you can not mix-and-match object code (dlls) created by these different environments with the biggest problem being that there is no common memory allocation library. I assume this is why some Windows software comes distributed with its own collection of 'standard' dlls compiled in the same development environment as the underlying application. The end result is that the least-common-denominator for all these environments is source code, which still requires the 'end-user' to install a development environment of some sort and to manage the compile/link process for Ruby and for any and all 3rd party libraries/ gems/extensions that they need. I also gather that each of those environments has very different build utilities (the Windows equivalent of make, config, autoconf, and so on). For an extension writer, the problem is that they can't really know what the build process is going to look like on an arbitrary Windows system making it very difficult to even distribute source packages. So am I hot or cold in understanding the Windows situation?