Creating executables for Windows from a Linux box
When writing a program, especially a graphical one, you may feel some compassion towards Windows users and wonder whether it would be possible to give them a chance of using it. Famous toolkits like GTK and Qt provide good support for Windows and an abstraction layer for OS-dependent vital functions, so it becomes easier to write OS-independant code.
Next you need a cross-compiler: it’s just a compiler, except that instead of creating executable files you could run, it creates executables in another format (e.g. Win32
.exe files). But since Windows is very different from GNU/Linux, some code or one of its dependencies has to use Windows-specific functions: so you need source headers, and maybe additional libraries.
MinGW aims at providing all of this: a compiler, a linker and other necessary utilies, headers and libraries for Windows basic functions… Standard distributions include a package for installing MinGW. Mine is ArchLinux, and the needed package is
mingw32-gcc. If you are using
autoconf, there is then an easy way of using the cross-compilation tools instead of the traditinoal ones.
Suppose the name of the cross-compiler is
i486-mingw32-gcc, as it is the case with ArchLinux: then the option
--host=i486-mingw32 will tell the configure script to use i486-mingw32-xxx programs instead of xxx. It allows installing all GTK libraries as DLLs, and compiling a GTK program as a .exe binary. I have not yet tested the resulting file on a real Windows system, but it works under Wine.
When testing with Wine, you need to make the needed DLLs accessible: this can either be done using the
drive_c directory tree which holds programs installed under Wine, or by including in the PATH variable the folder containing the binaries and DLLs compiled by MinGW, for example
/usr/i486-mingw32/bin (this should be done in
$HOME/.wine/system.reg, using Wine conventions for path names).