web-dev-qa-db-fra.com

Comment invoquer le compilateur croisé MinGW sous Linux?

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?

21
Martin Melka

Si vous regardez les listes de fichiers sur le serveur Web du paquet Ubuntu pour les paquets constitutifs de mingw-w64:

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.

14
gipi

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.

5
Bart

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!

5
rogerdpack