Question

Is there a manual for cross-compiling a C++ application from Linux to Windows?

Just that. I would like some information (links, reference, examples...) to guide me to do that.

I don't even know if it's possible.

My objective is to compile a program in Linux and get a .exe file that I can run under Windows.

Was it helpful?

Solution

The basics are not too difficult:

sudo apt-get install mingw32    
cat > main.c <<EOF
int main()
{
  printf("Hello, World!");
}
EOF
i586-mingw32msvc-cc main.c -o hello.exe

Replace apt-get with yum, or whatever your Linux distro uses. That will generate a hello.exe for Windows.

Once you get your head around that, you could use autotools, and set CC=i586-mingw32msvc-cc

CC=i586-mingw32msvc-cc ./configure && make

Or use CMake and a toolchain file to manage the build. More difficult still is adding native cross libraries. Usually they are stored in /usr/cross/i586-mingw32msvc/{include,lib} and you would need to add those paths in separately in the configure step of the build process.

OTHER TIPS

It depends on what you mean (I couldn't really say).

  1. If you mean that you want to use an existing Linux application on Windows, then you could try compiling it using Cygwin on Windows. This however does not give you a Windows executable free from all dependencies towards Cygwin (your executable still depends on the cygwin.dll file) - and it still may need some porting before it will work. See http://www.cygwin.com.

  2. If you mean that you want to be able to perform the actual compilation of a Windows application on Linux and produce a .exe file that is executable on Windows - thus using your Linux box for development and/or compilation then you should look into MinGW for Linux which is a tool for crosscompiling for Windows on Linux. See http://www.mingw.org/wiki/LinuxCrossMinGW.

Best regards!

I suggest you give the following, GUB (Grand Unified Builder) a try as it cross-compiles several packages with their dependencies and assembles them into a single installation package for currently 11 architectures. You can download a prebuilt iso for installation in a VM from here and follow the source here. It can currently be used to cross-compile GNU LilyPond/ GNU Denemo / Inkscape and OpenOffice.org.

The target architectures are:

  • darwin-ppc - tar.bz2 file for Darwin 7 (MacOS 10.3)/PowerPC
  • darwin-x86 - tar.bz2 file for Darwin 8 (MacOS 10.4)/x86
  • mingw - mingw executable for Windows32
  • linux-x86 - shar archive for Linux/x86
  • linux-64 - shar archive for Linux/x86_64
  • linux-ppc - shar archive for Linux/PowerPC
  • freebsd-x86 - shar archive for FreeBSD 4/x86
  • freebsd-64 - shar archive for FreeBSD 6/x86_64
  • cygwin - .tar.bz2 packages for Cygwin/Windows32
  • arm - shar archive for Linux/ARM (largely untested)
  • debian - shar archive for Debian (largely untested)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top