J'ai un projet que je souhaite compiler de manière croisée pour Windows. J'ai le Makefile approprié et tout fonctionne avec g++
. J'ai couru
$ apt install mingw-w64
et téléchargé 500 Mo de packages, mais je ne peux pas savoir comment l'exécuter. Il n'y a pas d'exécutable mingw
, alors comment puis-je réellement le compiler?
Si vous regardez les listes de fichiers sur le serveur Web du paquet Ubuntu pour les paquets constitutifs de mingw-w64
:
gcc-mingw-w64-x86-64
g++-mingw-w64-x86-64
binutils-mingw-w64-x86-64
mingw-w64-x86-64-dev
gcc-mingw-w64-i686
g++-mingw-w64-i686
binutils-mingw-w64-i686
mingw-w64-i686-dev
Vous pouvez voir que mingw-w64
Fournit une chaîne d'outils , c'est-à-dire un ensemble d'outils alternatifs (compilateur, éditeur de liens, en-têtes, etc.) utilisés pour compilez votre code pour un autre système.
En supposant que vous vouliez compiler du code C++ pour un système 64 bits, vous devrez utiliser /usr/bin/x86_64-w64-mingw32-g++-win32
. Vous pouvez utiliser la variable d'environnement CXX
pour dire à la plupart des Makefiles d'utiliser ce compilateur pour compiler du code.
Une autre option consiste à jeter un œil à Mingw Cross Environment ( MXE ), qui vise spécifiquement la compilation croisée de Linux à Windows (et dernièrement aussi à Mac) . Le paquet a xupport bult-in pour un grand nombre de bibliothèques et est activement développé. Jetez un coup d'œil sur le site Web pour savoir s'il convient à vos besoins.
Soit dit en passant, il est suggéré d'utiliser le développement plutôt que la version finale. Cela est dû au fait que les versions des versions sont généralement obsolètes très rapidement, en raison du changement d'URL des responsables de packages (des bibliothèques) entraînant la rupture de la version de la version MXE. La version de développement est généralement plus à jour.
Je l'ai utilisé pour croiser la compilation des postgres:
$ Sudo apt-get install mingw-w64
$ ./configure --Host=i686-w64-mingw32 --without-zlib # 32 bit
# or --Host=x86_64-w64-mingw32 64 bit
ref ici
D'autres projets le font différemment, comme ffmpeg:
./configure --target-os=mingw32 --cross-prefix=i686-w64-mingw32-
ou une
./configure CC=i686-w64-mingw32-gcc ...
etc. GL!