Compilare C++ per windows da Linux, cross compiling

Compilare C++ per windows da Linux.

Installare un toolchain (“catena di strumenti”) sul sistema linux, in questa guida verrà installato mingw nel percorso /opt/mingw

  1. Scaricare
  2. Scompattare l’archivio ottenuto nella cartella /opt/mingw
  3. Supponiamo che dobbiamo compilare il sorgente hello_world.cpp da linux 32bit per windows 32bit. Allora ci posizioniamo nella cartella dove è presente il file e compiliamo con il comando /opt/mingw/cross_win32/bin/i686-w64-mingw32-g++ -static-libstdc++ -static-libgcc -o hello_world.exe hello_world.cpp

L’output sarà il file hello_world.exe. Provate ad eseguirlo su un sistema windows.
Oppure se avete wine installato sulla macchina, è sufficiente recarsi nella cartella dove è contenuto il file hello_world.exe e digitare da terminale wine hello_world.exe (N.B. l’estensione “.exe” è facoltativa)

Tutto questo è possibile per software piccoli, che non necessitano l’uso di un IDE nè di un makefile.

Usando eclipse per progetti più ampi invece, una volta installato il toolchain mingw, bisogna dire a eclipse il comando da eseguire per la compilazione alterando le voci C++ Compiler, C++ Linker, Assembler.
Dalle proprietà del progetto, selezionare C/C++ Build->Settings alla voce C++ Compiler scriviamo il comando per compilare /opt/mingw/cross_win32/bin/i686-w64-mingw32-g++

Selezionare la voce Includes e aggiungere cliccando il relativo bottone /opt/mingw/cross_win32/i686-w64-mingw32/include

Selezionare la voce C++ Linker e scriviamo il comando per il linker /opt/mingw/cross_win32/bin/i686-w64-mingw32-g++

Selezionare la voce Miscellaneous di C++ Linker e aggiungere i parametri che abbiamo visto prima -static-libstdc++ -static-libgcc (servono per le librerie statiche)

Infine selezionare la voce Assembler e scriviamo il comando /opt/mingw/cross_win32/bin/i686-w64-mingw32-as

Fatti tutti questi passaggi necessari, abbiamo ora un progetto eclipse che può essere compilato per windows.
In quest’altro post trovate un esempio di codice cross-platform che è possibile compilare anche per windows.