Was ist der Unterschied zwischen Cygwin und MinGW?
Möchte ich, um meine C++ - Projekt cross-Plattform, und ich überlege mir mit Cygwin/MinGW.
Aber was ist der Unterschied zwischen Ihnen ?
Andere Frage ist, ob ich in der Lage zu führen Sie die Binärdatei auf einem system ohne Cygwin/MinGW ?
InformationsquelleAutor der Frage | 2009-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Cygwin ist ein Versuch, eine komplette UNIX/POSIX-Umgebung auf Windows. Dazu verwendet es verschiedene DLLs. Während diese DLLs sind abgedeckt durch GPLv3+, die Ihre Lizenz enthält eine Ausnahme, der nicht die Kraft eine abgeleitete Arbeit, die unter der GPLv3+. MinGW ist ein C/C++ - compiler-suite ermöglicht Ihnen das erstellen von ausführbaren Windows-Dateien ohne die Abhängigkeit auf solche DLLs - Sie brauchen nur die normale MSVC Laufzeiten, die sind Teil jeder normalen Microsoft Windows-installation.
Kann man auch eine kleine UNIX/POSIX Umgebung wie, kompiliert mit MinGW genannt MSYS. Es muss nicht überall in der Nähe von all den features von Cygwin, aber ist ideal für Programmierer zu verwenden, MinGW.
InformationsquelleAutor der Antwort
Als eine Vereinfachung, es ist so:
Kompilieren etwas in Cygwin und Sie kompilieren es für Cygwin.
Kompilieren etwas in MinGW und Sie kompilieren es für Windows.
Über Cygwin
Den Zweck von Cygwin zu machen, ist die Portierung von *nix-basierten Anwendungen zu Windows viel einfacher, durch Emulation viele kleine details, die das Unix-basierte Betriebssysteme bieten, und sind dokumentiert durch die POSIX standards. Wenn Ihre Anwendung davon aus, dass Sie es verwenden können Unix-Features wie pipes, Unix-style Datei-und Verzeichniszugriff, und so weiter, dann können Sie es kompilieren in Cygwin und Cygwin selbst als compatibility layer rund um Ihre Anwendung, so dass viele dieser Unix-spezifische Paradigmen können weiterhin verwendet werden, mit wenig oder keine änderungen an Ihrer Anwendung.
Wenn Sie kompilieren wollen etwas für Cygwin und zu verteilen, dass die resultierende Anwendung ist, müssen Sie vertreiben auch die Cygwin-Laufzeit-Umgebung (zur Verfügung gestellt von
cygwin1.dll
) zusammen mit und dies hat Konsequenzen für welche Arten von software-Lizenz können Sie.Über MinGW
MinGW ist ein Windows-port der GNU compiler tools, wie GCC, Make, Bash, und so weiter. Es wird nicht versucht, zu emulieren oder bieten umfassende Kompatibilität mit Unix, sondern es enthält die minimal erforderlichen Umgebung für die Verwendung der GCC (GNU compiler) und eine kleine Anzahl von anderen Werkzeugen auf Windows. Es muss nicht ein Unix-Emulationsschicht wie Cygwin, sondern als Ergebnis Ihrer Anwendung muss speziell programmiert werden, um der Lage sein, die in Windows ausgeführt, was bedeuten kann, dass eine wesentliche änderung, wenn es geschaffen wurde, um Vertrauen führen Sie in einem standard-Unix-Umgebung und verwendet Unix-spezifische Funktionen wie diejenigen erwähnt. Standardmäßig wird der code kompiliert und im MinGW-GCC kompiliert, um eine native Windows-X86-target, inkl .exe-und .dll-Dateien, aber Sie konnte auch cross-kompilieren mit den richtigen Einstellungen. MinGW ist ein open-source-alternative zu Microsoft Visual C++ compiler und alle seine damit verbundenen Vernetzung/Werkzeug machen.
Deutlich anspruchsvoller cross-Plattform-frameworks existieren, die die Aufgabe der Portierung von Anwendungen auf unterschiedlichen Betriebssystemen problemlos - zum Beispiel die Qt-framework ist ein beliebtes framework für cross-Plattform-Anwendungen. Wenn Sie einen solchen Rahmen aus, der beginnen, können Sie reduzieren nicht nur Ihre Kopfschmerzen, wenn es Zeit kommt, um port auf eine andere Plattform, aber Sie können die gleichen grafischen widgets - windows, Menüs und Steuerelemente - über alle Plattformen hinweg, wenn Sie schreiben eine GUI-app.
InformationsquelleAutor der Antwort thomasrutter
Hinzufügen, um die anderen Antworten, Cygwin kommt mit dem MinGW-Bibliotheken und Header-Dateien, und kompilieren Sie ohne die Verknüpfung zu der cygwin1.dll durch mit -mno-cygwin-flag bei gcc. Ich stark bevorzugen dies mit einfachen MinGW und MSYS.
InformationsquelleAutor der Antwort TrayMan
Wikipedia einen Vergleich hier.
Von Cygwin ist website:
Von Mingw ist website:
InformationsquelleAutor der Antwort dirkgently
Cygwin eine DLL verwendet cygwin.dll (oder vielleicht eine Reihe von DLLs, um eine POSIX-ähnliche Laufzeitumgebung auf Windows.
MinGW kompiliert, um eine native Win32-Anwendung.
Wenn Sie etwas bauen, mit Cygwin ist jedes system, das Sie installieren, es müssen auch die Cygwin-DLL(s). Eine MinGW-Anwendung benötigt keine spezielle Laufzeitumgebung.
InformationsquelleAutor der Antwort Michael Burr
Lesen Sie diese Fragen beantwortet, um zu verstehen, den Unterschied zwischen Cygwin und MinGW.
Frage #1: ich will eine Anwendung erstellen, die ich Schreibe source-code einmal kompilieren Sie es einmal und führen Sie es in beliebige Plattformen (z.B. Windows, Linux und Mac OS X...).
Frage #2: ich möchte eine Anwendung erstellen, die ich Schreibe source-code einmal aber es ist kein problem, dass ich den Quellcode kompilieren, der für alle Plattformen separat (z.B. Windows, Linux und Mac OS X ...).
Frage #3: In der Antwort der Frage #2, es ist schwierig, mit verschiedenen compiler für jede Plattform gibt es eine cross-Plattform-compiler?
Frage #4: C-oder C++ - standard-header-Dateien bieten keine erweiterten Funktionen wie multi-threading. Was kann ich tun?
Also:
Zu nutzen, Vorteil von GCC cross-Plattform-compiler verwenden Sie in Windows MinGW.
Zu verwenden Vorteil der POSIX-standard erweiterte Programmier-features und-tools in Windows verwenden Sie die Cygwin.
InformationsquelleAutor der Antwort Amir Saniyan
Wikipedia Sagt:
InformationsquelleAutor der Antwort
Aus der Sicht der Portierung einer C-Programm ein guter Weg, um dies zu verstehen, ist ein Beispiel nehmen:
Wenn wir uns ändern
stat
zu_stat
können wir kompilieren dieses Programm mit Microsoft Visual C. Wir können auch kompilieren Sie dieses Programm mit MinGW und Cygwin) installiert werden muss.Unter Microsoft Visual C, wird das Programm verknüpft eine MSVC redistributable run-time library:
mxvcrtnn.dll
, wonn
eine version-suffix. Versand dieses Programm, das wir haben, dass Sie diese DLL. Diese DLL bietet_stat
,system
undprintf
.Unter MinGW, das Programm wird im Zusammenhang mit
msvcrt.dll
, die einen internen, undokumentierten, nicht-versionierte Bibliothek, die Teil von Windows, und off-limits zur Anwendung. Die Bibliothek ist im wesentlichen eine Abspaltung der weitervertreibbaren Runtime-Bibliothek von Microsoft Visual C die für die Verwendung durch Windows selbst.Unter diese beiden, das Programm wird ähnliche Verhaltensweisen:
stat
Funktion gibt nur sehr begrenzte Informationen—keine brauchbaren Berechtigungen oder inode-Nummer, zum Beispiel.c:file.txt
ist gelöst nach dem aktuellen Arbeitsverzeichnis zugeordnet Laufwerkc:
.system
verwendetcmd.exe /c
für die Ausführung des externen Kommandos.Können wir auch das Programm kompilieren unter Cygwin. Ähnlich wie die weitervertreibbaren Runtime-verwendet, die mit MS Visual C, das Cygwin-Programm wird im Zusammenhang mit der Cygwin-Laufzeit-Bibliotheken:
cygwin1.dll
(Cygwin richtige) undcyggcc_s-1.dll
(GCC run-time support). Da Cygwin ist jetzt unter der LGPL, wir können das Paket mit unserem Programm, auch wenn es nicht GPL-kompatible freie software, und senden das Programm.Unter Cygwin, die library-Funktionen Verhalten sich anders:
stat
Funktion hat eine reiche Funktionalität, Rückkehr sinnvolle Werte in den meisten Bereichen.c:file.txt
ist nicht verstanden zu werden, als mit einem Laufwerksbuchstaben Referenz, da diec:
ist nicht gefolgt von einem Schrägstrich. Der Doppelpunkt wird als Teil des namens und irgendwie entstellte hinein. Es gibt kein Konzept für einen relativen Pfad für ein volume oder Laufwerk im Cygwin, keine "aktuell angemeldeten drive" - Konzept, und keine pro-drive-das aktuelle Arbeitsverzeichnis.system
Funktion versucht, die/bin/sh -c
Dolmetscher. Cygwin lösen des/
Weg nach dem Standort der ausführbaren, und erwarten einesh.exe
- Programm zu co-located mit der ausführbaren Datei.Sowohl Cygwin und MinGW ermöglichen Ihnen die Verwendung von Win32-Funktionen. Wenn Sie möchten, rufen Sie
MessageBox
oderCreateProcess
können Sie das tun. Sie können auch leicht ein Programm erstellen, die nicht erforderlich ist, ein Konsolen-Fenster, mitgcc -mwindows
unter MinGW und Cygwin.Cygwin ist nicht streng POSIX. Neben der Bereitstellung Zugriff auf die Windows-API, es bietet auch seine eigenen Implementierungen von Microsoft-C-Funktionen (Zeug gefunden in
msvcrt.dll
oder die re-verteilbaremsvcrtnn.dll
run-Zeiten). Ein Beispiel HIERFÜR sind diespawn*
Familie von Funktionen wiespawnvp
. Diese sind eine gute Idee, um anstelle vonfork
undexec
auf Cygwin, da Sie anzeigen besser zu den Windows-Prozess und die Schaffung von Modell, die hat kein Konzept fürfork
.Also:
Cygwin-Programme sind nicht weniger "einheimische" als MS-Visual-C-Programme auf Grund erfordert die Begleitung von Bibliotheken. Programmiersprache Implementierungen unter Windows werden erwartet, um Ihre eigenen Lauf-Zeit, auch die Sprache C-Implementierungen. Es gibt keine "libc" unter Windows für die öffentliche Nutzung.
Die Tatsache, dass MinGW erfordert keine Drittanbieter-DLL ist wirklich ein Nachteil; es ist je nachdem eine undokumentierte Windows-internen Abspaltung des Visual C run-time. MinGW funktioniert, weil die GPL system library Ausnahme gilt für
msvcrt.dll
, was bedeutet, dass GPL-ed-Programme kompiliert werden kann, und verteilt mit MinGW.Aufgrund seiner viel umfassenderen und tieferen Unterstützung für POSIX-im Vergleich zu
msvcrt.dll
, Cygwin ist mit Abstand die superior Umwelt für die Portierung von POSIX-Programmen. Da ist es jetzt unter der LGPL, die es Anwendungen ermöglicht, mit allen möglichen Lizenzen, open oder closed source, vertrieben werden. Cygwin enthält sogar VT100-emulation undtermios
, die Arbeit mit der Microsoft-Konsole! Eine POSIX-Anwendung, die richtet raw-Modus mittcsetattr
und verwendet VT100-codes zur Steuerung der cursor wird direkt in dercmd.exe
Fenster. Soweit die end-user angeht, ist es eine native Konsole app zu machen, die Win32-Aufrufe zum Steuern der Konsole.Jedoch:
/bin/sh
und andere Fragen. Diese Unterschiede sind, was die render-Cygwin-Programme "nicht-native". Wenn ein Programm einen Pfad als argument, oder eine Eingabe in einem Dialogfeld, Windows-Benutzer erwarten, dass der Pfad auf die gleiche Weise funktionieren wie in anderen Windows-Programmen. Wenn es nicht so funktioniert, ist das ein problem.Stecker: Kurz nach der LGPL Ankündigung, begann ich, die Cygnal (Cygwin Native Anwendung-Bibliothek) Projekt, um eine Abspaltung von der Cygwin-DLL, welche Ziele diese Probleme zu beheben. Programme entwickelt werden können, unter Cygwin und dann implementiert mit der Cygnal version von
cygwin1.dll
ohne Neukompilierung. Als diese Bibliothek verbessert, Sie wird nach und nach beseitigt die Notwendigkeit für MinGW.Wenn Cygnal löst das Pfad-handling-problem, wird es möglich sein, zu entwickeln, um eine einzelne ausführbare Datei, die funktioniert mit Windows-Pfade bei der Auslieferung wie eine Windows-Anwendung mit Cygnal, und arbeitet nahtlos mit der Cygwin-Pfade bei der Installation in Ihrem
/usr/bin
unter Cygwin. Unter Cygwin, die ausführbare Datei wird transparent die Arbeit mit einem Pfad wie/cygdrive/c/Users/bob
. Im nativen deployment, in dem es verknüpft ist gegen die Cygnal version voncygwin1.dll
- dieser Weg wird keinen Sinn machen, in der Erwägung, dass verstehenc:foo.txt
.InformationsquelleAutor der Antwort Kaz
Nicht übersehen AT&T U/Win software, die entworfen ist, um Ihnen zu helfen kompilieren Unix-Anwendungen auf windows (Letzte version - 2012-08-06; verwendet, Eclipse Public License, Version 1.0).
Wie Cygwin Sie haben, um gegen eine Bibliothek; in Ihrem Fall
POSIX.DLL
. Die AT&T-Jungs sind tolle Ingenieure (gleiche Gruppe, die Sie mitgebracht ksh und dot) und deren Zeug ist Wert, heraus zu überprüfen.InformationsquelleAutor der Antwort Norman Ramsey
Cygwin emuliert komplette POSIX-Umgebung, während MinGW ist minimal Werkzeug-set für die Zusammenstellung nur (kompiliert native Win-Anwendung.) Also, wenn Sie wollen, um Ihr Projekt zu cross-Plattform der Wahl zwischen den beiden ist offensichtlich, MinGW.
Obwohl Sie vielleicht erwägen, VS auf Windows, GCC auf Linux/UNIX Systemen. Die meisten open-source-Projekte (z.B. Firefox oder Python).
InformationsquelleAutor der Antwort vartec
Beachten Sie, dass Dienstprogramm Verhalten kann echt variieren zwischen den beiden.
Beispielsweise Cygwin-tar kann die Gabel - da fork() wird unterstützt, die in der DLL - wo die mingw-version nicht. Dies ist ein problem, wenn Sie versuchen, kompilieren Sie mysql aus dem Quellcode.
InformationsquelleAutor der Antwort
Verwenden Cygwin in eine kommerzielle /proprietäre /nicht-open-source-Anwendung, müssen Sie zu berappen Zehntausende von Dollar für eine "buyout Lizenz" von Red Hat; dadurch erlischt die standard-Lizenzbedingungen bei einer erheblichen Kosten. Google "cygwin-Lizenz-Kosten" und sehen zunächst nur wenige Ergebnisse.
Für mingw, keine solchen Kosten angefallen sind, und die Lizenzen (PD, BSD, MIT) sind extrem Freizügig. Bei den meisten Sie kann erwartet werden, zu liefern Lizenz-Informationen mit Ihrer Anwendung, wie die winpthreads Lizenz erforderlich, wenn mit mingw64-tdm.
BEARBEITEN Dank Izzy Helianthus: Die kommerzielle Lizenz ist nicht mehr verfügbar oder erforderlich ist, weil der API-Bibliothek in der winsup Unterverzeichnis von Cygwin jetzt wird verteilt unter der LGPL-Lizenz, im Gegensatz zu den vollständigen GPL.
InformationsquelleAutor der Antwort Arcane Engineer
Cygwin ist entworfen worden, um eine mehr oder weniger komplette POSIX-Umgebung für Windows, einschließlich einer umfangreichen Reihe von tools entwickelt, um einen vollwertigen Linux-ähnlichen Plattform. Im Vergleich, MinGW und MSYS bieten eine leichte, minimalistische POSIX-ähnliche Schicht, nur mit wesentlich mehr tools, wie
gcc
undbash
erhältlich. Da der MinGW ist eher minimalistischen Ansatz, es wird nicht der Grad der POSIX-API Abdeckung Cygwin bietet, und somit nicht bauen kann, bestimmte Programme, die sonst auf Cygwin kompiliert.In Bezug auf die der generierte code von den beiden, die Cygwin-toolchain setzt auf die dynamische Verknüpfung zu einem großen runtime-Bibliothek
cygwin1.dll
, während die MinGW-toolchain kompiliert den code zu binaries, dass der link dynamisch zu Windows native C-Bibliothekmsvcrt.dll
sowie statisch auf Teile derglibc
. Cygwin-Programme sind daher kompakter, erfordern jedoch eine separate redistributable-DLL, beim MinGW binaries geliefert werden können, standalone, aber in der Regel größer.Die Tatsache, dass die Cygwin-basierte Programme erfordern eine separate DLL ausführen führt auch Zulassungsbeschränkungen. Die Cygwin-Laufzeit-Bibliothek ist lizenziert unter der GPLv3 mit einer Verlinkung Ausnahme für Anwendungen mit einer OSI-kompatiblen Lizenzen, so dass Entwickler, die zum Aufbau einer closed-source-Anwendung, um Cygwin müssen, erwerben Sie eine kommerzielle Lizenz von Red Hat. Auf der anderen Seite, MinGW-code kann verwendet werden in beiden open-source und closed-source-Anwendungen, wie die Header und Bibliotheken sind permissively lizenziert.
InformationsquelleAutor der Antwort bwDraco
Cygwin ist eine Unix-artige Umgebung und command-line-interface für Microsoft Windows.
Mingw ist eine native software-port der GNU Compiler Collection (GCC) , Microsoft Windows, zusammen mit einer Reihe von frei verteilbaren import-Bibliotheken und header-Dateien für die Windows API. MinGW erlaubt Entwicklern das erstellen von nativen Microsoft Windows-Anwendungen.
Können Sie ausführen generierten Binärdateien mit
mingw
ohne diecygwin
Umwelt, vorausgesetzt, dass alle erforderlichen Bibliotheken (DLLs) vorhanden sind.InformationsquelleAutor der Antwort gimel
Cygwin
verwendet eine Kompatibilität Schicht, währendMinGW
heimisch ist. Das ist einer der Hauptunterschiede.InformationsquelleAutor der Antwort user3362761