Manual for cross-compiling a C++ application from Linux to Windows?
Solution 1
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.
Solution 2
It depends on what you mean (I couldn't really say).
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.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!
Solution 3
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)
Pablo Herrero
Software Development Engineer, Business Software Developer
Updated on February 07, 2020Comments
-
Pablo Herrero about 4 years
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.
-
Branan over 15 yearsOne thing to note with this is that some libraries don't like to cross-compile. If your only choices are an .exe installer and source, you may want to install the library under wine and then copy the libraries and headers into your mingw search path. I never could get Boost to cross-compile
-
NawaMan over 14 yearsWould you mind guide me to how can I test such compiled program with Wine?
-
Ben Moss over 14 years
wine hello.exe
should do it! -
namuol about 11 yearsWINE is okay for stupid-simple programs like this, but a VM (VirtualBox, VMWare, QEMU, etc) is your best bet.
-
chus over 7 yearsIf you want to generate a 64-bit Windows binary, install the 64-bit tools:
$ sudo apt-get install mingw-w64
. The compiler isx86_64-w64-mingw32-gcc
.