Je veux rendre mon projet C++ multiplateforme, et j'envisage d'utiliser Cygwin/MinGW. Mais quelle est la différence entre les deux ?
Une autre question est de savoir si je pourrai exécuter le binaire sur un système sans Cygwin/MinGW ?
Je veux rendre mon projet C++ multiplateforme, et j'envisage d'utiliser Cygwin/MinGW. Mais quelle est la différence entre les deux ?
Une autre question est de savoir si je pourrai exécuter le binaire sur un système sans Cygwin/MinGW ?
Pour simplifier, c'est comme ça :
Compiler quelque chose dans Cygwin et vous le compilez pour Cygwin .
Compilez quelque chose dans MinGW et vous le compilez pour Windows .
À propos de Cygwin
Cygwin est une couche de compatibilité qui facilite le portage d'applications simples basées sur Unix vers Windows, en émulant un grand nombre d'interfaces de base fournies par les systèmes d'exploitation basés sur Unix, comme les pipes, l'accès aux fichiers et aux répertoires à la manière d'Unix, etc. POSIX normes. Si vous disposez d'un code source existant qui utilise ces interfaces, vous pouvez être en mesure de le compiler pour l'utiliser avec Cygwin après avoir effectué très peu de changements, voire aucun, ce qui simplifie grandement le processus de portage d'un code Unix simple basé sur les IO pour l'utiliser sous Windows.
Lorsque vous distribuez votre logiciel, le destinataire devra l'exécuter avec l'environnement d'exécution Cygwin (fourni par le fichier cygwin1.dll
). Vous pouvez le distribuer avec votre logiciel, mais celui-ci devra se conformer à sa licence open source. Même le fait de lier votre logiciel avec cette dll, mais de la distribuer séparément, peut encore imposer des restrictions de licence sur votre code.
À propos de MinGW
MinGW vise à être simplement un portage des outils de développement GNU pour Windows. Il ne tente pas d'émuler ou de fournir une compatibilité complète avec Unix, si ce n'est de fournir une version de la collection de compilateurs GNU, de GNU Binutils et de GNU Debugger qui peut être utilisée nativement sous Windows. Il inclut également des fichiers d'en-tête permettant l'utilisation de l'API native de Windows dans votre code.
Par conséquent, votre application doit être programmée spécifiquement pour Windows, en utilisant l'API Windows, ce qui peut impliquer des modifications importantes si elle a été créée pour s'exécuter dans un environnement Unix standard et utiliser des fonctionnalités spécifiques à Unix. Par défaut, le code compilé dans le GCC de MinGW sera compilé vers une cible native Windows X86, y compris les fichiers .exe et .dll, bien que vous puissiez également faire une compilation croisée avec les bons paramètres, puisque vous utilisez essentiellement la suite d'outils de compilation GNU.
MinGW est une alternative gratuite et open source à l'utilisation de l'application Microsoft Visual C++ et ses outils de liaison/make associés sous Windows. Il peut être possible dans certains cas d'utiliser MinGW pour compiler quelque chose qui était destiné à être compilé avec Microsoft Visual C++ sans trop de modifications.
Même si MingW inclut des fichiers d'en-tête et du code d'interface permettant à votre code d'interagir avec l'API Windows, comme avec les bibliothèques standard ordinaires, cela n'impose pas de restrictions de licence sur le logiciel que vous avez créé.
Autres considérations
Pour toute application logicielle non triviale, telle qu'une application qui utilise une interface graphique, du multimédia ou qui accède à des périphériques sur le système, vous quittez la limite de ce que Cygwin peut faire pour vous et un travail supplémentaire sera nécessaire pour rendre votre code multiplateforme. Mais cette tâche peut être simplifiée par l'utilisation de boîtes à outils ou de frameworks multiplateformes qui permettent de coder une fois et de compiler votre code avec succès pour n'importe quelle plate-forme. Si vous utilisez un tel cadre dès le départ, vous pouvez non seulement réduire vos maux de tête au moment du portage sur une autre plate-forme, mais vous pouvez aussi utiliser les mêmes widgets graphiques - fenêtres, menus et contrôles - sur toutes les plates-formes si vous écrivez une application à interface graphique, et faire en sorte qu'ils apparaissent natifs à l'utilisateur.
Par exemple, le logiciel libre Cadre de travail Qt est un cadre de développement multiplateforme populaire et complet, permettant de créer des applications graphiques qui fonctionnent sur tous les systèmes d'exploitation, y compris Windows. Il existe également d'autres cadres de ce type. En plus des grands frameworks, il existe des milliers de bibliothèques logicielles plus spécialisées qui prennent en charge plusieurs plates-formes, ce qui vous permet de ne pas vous soucier de l'écriture d'un code différent pour différentes plates-formes.
Lorsque vous développez des logiciels multiplateformes dès le départ, vous n'avez normalement aucune raison d'utiliser Cygwin. Lorsque vous compilez sous Windows, vous cherchez généralement à faire en sorte que votre code puisse être compilé avec MingW ou Microsoft Visual C/C++, ou les deux. Lors de la compilation sur Linux/*nix, vous le compilerez le plus souvent directement avec les compilateurs et outils GNU.
Le bash qui est fourni avec MinGW n'est pas un programme natif de Windows. Il dépend de la DLL MSYS, qui est un fork de la DLL Cygwin. Il en va de même pour la plupart des autres utilitaires Unix fournis avec MinGW/MSYS. MinGW gcc est bien un programme natif cependant. Make est disponible à la fois dans une version native et une version MSYS.
La différence de vitesse sera ignorable dans le plus situations. Toute différence se résumera à la mesure dans laquelle le niveau d'abstraction supplémentaire fourni par la couche de compatibilité de Cygwin ralentit les choses. Cela peut avoir un effet mesurable sur des choses comme les E/S. Par exemple, il y a longtemps, Git ne fonctionnait que sous Windows dans cygwin, et à cause de cela, il était un peu plus lent. Mais encore une fois, si vous codez en utilisant un framework, c'est aussi une couche d'abstraction avec le potentiel de ralentir certaines choses de toute façon.
Cygwin est une tentative de créer un environnement UNIX/POSIX complet sous Windows. Pour ce faire, il utilise diverses DLLs. Bien que ces DLLs soient couvertes par la GPLv3+, leur licence contient une exception qui n'oblige pas une œuvre dérivée à être couverte par la GPLv3+. MinGW est une suite de compilateurs C/C++ qui vous permet de créer des exécutables Windows sans dépendre de ces DLLs - vous avez seulement besoin des runtimes MSVC normaux, qui font partie de toute installation normale de Microsoft Windows.
Vous pouvez également obtenir un petit environnement de type UNIX/POSIX, compilé avec MinGW et appelé MSYS . Il n'a pas toutes les fonctionnalités de Cygwin, mais il est idéal pour les programmeurs qui veulent utiliser MinGW.
Mais si je veux publier un logiciel libre non GPL ? Désolé, je ne suis pas un fan de la GPL, c'est tout.
@Dan Vous n'avez pas besoin de redistribuer le runtime que MinGW utilise - il fait partie de Windows.
Cela ne fonctionne plus avec cygwin 1.7.6. gcc : L'indicateur -mno-cygwin a été supprimé ; utilisez un compilateur croisé ciblant mingw.
@sigjuice : vrai, mais l'ancien drapeau -mno-cygwin fonctionne toujours pour GCC 3.x : gcc-3 -mno-cygwin
Cela signifie-t-il que je dois télécharger les bibliothèques mingw depuis le site officiel de mingw afin de compiler vers une cible mingw depuis un hôte cygwin ? Ou ces bibliothèques peuvent-elles être téléchargées à partir du système de paquets de Cygwin ?
Wikipedia fait une comparaison aquí .
À partir de la page de Cygwin site web :
- Cygwin est un environnement de type Linux pour Windows. Il se compose de deux parties : Une DLL (cygwin1.dll) qui agit comme une couche d'émulation de l'API Linux fournissant une fonctionnalité substantielle de l'API Linux.
- Une collection d'outils qui donnent l'impression d'être sous Linux.
De Mingw's site web :
MinGW ("Minimalistic GNU for Windows") est une collection de fichiers d'en-tête et de bibliothèques d'importation spécifiques à Windows, librement disponibles et distribuables, combinés à des outils GNU permettant de produire des programmes Windows natifs qui ne dépendent d'aucune DLL d'exécution C tierce partie.
Le site web de MinGW-w64 est maintenant . Comme il est dit "Mingw-w64 est une évolution du projet original mingw.org, créé pour supporter le compilateur GCC sur les systèmes Windows. Il a bifurqué en 2007 afin de fournir un support pour 64 bits et de nouvelles API. Il a depuis lors gagné une large utilisation et distribution.
Cygwin utilise une DLL, cygwin.dll, (ou peut-être un ensemble de DLLs) pour fournir un runtime de type POSIX sous Windows.
MinGW se compile en une application Win32 native.
Si vous construisez quelque chose avec Cygwin, tout système sur lequel vous l'installez aura également besoin des DLL de Cygwin. Une application MinGW n'a pas besoin d'un runtime spécial.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Vous pouvez faire en sorte que MinGW soit installé en même temps que votre paquet. Bien que je ne puisse pas fournir un flux de travail accepté pour cela (d'où l'absence de réponse peut-être que quelqu'un d'autre peut ajouter), je suis sûr que c'est plus que possible car git le fait pour le git bash. Regardez le nom de la fenêtre de git bash sur n'importe quel système Windows.