Eine Anwendung ausgeführt wird, kompiliert in cygwin, ohne cygwin installiert
Sagen wir, ich habe eine Anwendung, die ich kompiliert unter cygwin, und ich möchte zu verteilen, dass die Anwendung die zimmerreserviereung, ohne das der Benutzer installieren Sie cygwin. Würde es genug sein, Verpacken Sie die ausführbare Datei und die cygwin-DLL?
Die cygwin-DLL wird unter der GPL steht, so würden Sie auch haben, verteilen Sie die Quelle Ihrer app.
Aber Sie können kaufen eine kommerzielle Lizenz für Cygwin.
Bitte erläutern Sie -- da scheint es zwei Arten der interpretation in den Antworten. Meinst du das technisch (die andere - Dateien brauche ich zum verteilen) oder legal (was bedeutet die Lizenz, erlauben Sie mir zu tun)?
Aber Sie können kaufen eine kommerzielle Lizenz für Cygwin.
Bitte erläutern Sie -- da scheint es zwei Arten der interpretation in den Antworten. Meinst du das technisch (die andere - Dateien brauche ich zum verteilen) oder legal (was bedeutet die Lizenz, erlauben Sie mir zu tun)?
InformationsquelleAutor Robby Jones | 2009-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann die Anwendung tatsächlich benötigen Cygwin zur Verfügung gestellt Posix-emulation? Wenn nicht, können Sie es kompilieren mit -mno-cygwin-flag und es wird nicht davon abhängen, cygwin überhaupt, wird aber eine native Windows-Anwendung. Oft müssen Sie nur eine echte shell (bash) zu konfigurieren, und erstellen Sie Ihre Anwendung, aber Sie nicht wirklich brauchen, die Posix-Funktionalität von Cygwin.
Andere alternative ist MSYS + MinGW, die eine leichte Gabel von Cygwin. Dies bietet eine Zusammenstellung Umgebung, die produziert, native Windows-apps standardmäßig.
Eine Dritte option wäre die Verwendung des MinGW-Compiler von Cygwin selbst. Sie sollten über die normale Cygwin-Paket-manager. Dann konfigurieren Sie das Projekt für eine cross-kompilieren mit dem MinGW-Compiler.
mingw.org/history en.wikipedia.org/wiki/MinGW#Comparison_with_Cygwin zusätzlich, die wichtigsten Leute auf der MinGW-mailing-Liste sagen oft, dass MinGW/MSYS ist ein fork von cygwin.
MinGW ist nicht MSYS
OK, ich glaube, du bist so kleinlich bin hier; trotzdem habe ich bearbeitet meine post um das Problem zu vermeiden. Noch, msys-1.0.dll wäre das funktionale äquivalent der cygwin.dll ja? MinGW ist mehr die Compiler und andere Werkzeuge, die verwendet werden können, außerhalb einer bash-shell, während msys bietet eine bash-shell und (begrenzt) der posix-emulation.
InformationsquelleAutor Matthew Talbert
Haben sich die Dinge geändert. Die Cygwin-Bibliotheken sind jetzt unter der Lesser GPL (v3), die es möglich macht, bundle mit Applikationen, die fallen unter eine Breite Palette von Lizenzen, von FOSS zu proprietär.
Was im Weg steht ist, dass die POSIX-emulation in Cygwin nimmt die Dinge ein wenig zu weit aus der Perspektive der nativen Windows-Anwendungen.
Dies ist, wo meine Cygnal Projekt kommt in. Cygnal steht für CYGwin Native Anwendung-Bibliothek: es ist ein drop-in-kompatibel Gabel von Cygwin, die sich verändert, oder in einigen Fällen einfach neu konfiguriert, die das Verhalten von bestimmten Funktionen in übereinstimmung mit einheitlichen Konventionen der Windows-Plattform.
Einem einfachen "Hallo, Welt" Cygwin-Programm erfordert zwei Bibliotheken. Ein GCC-Lauf-Zeit genannt
cyggcc_s-1.dll
- und die Cygwin-DLLcygwin1.dll
. Der Cygnal Projekt stellt einen Ersatz für letztere. (Ein 32-bit-build zum download verfügbar ist).Einen eklatanten Bereich Inkompatibilität zwischen der Cygwin-POSIX-Sicht auf die Welt, und Windows ist der Pfad der Handhabung. Die Cygwin-Ansicht des Dateisystems wird durch eine gefälschte
/
root-Verzeichnis, und seinen eigenen internen "mount-table" - welche Räume bietet wie/cygdrive
,/proc
und/dev
. Cygnal nicht mit allen. Pfade sind Win32-Pfade. Das aktuelle Arbeits-Verzeichnis verhält sich wie der Windows-aktuellen Arbeitsverzeichnis. Laufwerke werden verbunden mit aktuellen Verzeichnisse, und fahren Sie relative Pfade wieD:foo.txt
Arbeit unter Cygnal. Unter Cygnal,/dev
und/proc
sind noch verfügbar: Zugriff auf die speziellen Präfixedev:/
undproc:/
. Es ist nicht gestattetchdir
in diese: das wäre nicht native! Unter Cygnal, wenn Siechdir
zuD:\wherever
dann das aktuelle Laufwerk ist dieD
Fahrt, und die Wege, die/foo
oder\foo
sieheD:\foo
. Cygwin master POSIX-root-Verzeichnis ist verschwunden.Doch mit Cygnal, Sie können weiterhin verwenden die POSIX-Funktionalität, die es möglich machen, zu entwickeln, cross-Plattform-Programme, die haben weniger code, der geschaltet wird, basierend auf der Plattform, im Vergleich zu der Aufrechterhaltung eines Anschlusses mit Hilfe von MinGW und Microsoft Visual C/C++.
Beispiel: schreiben Sie eine Win32-Konsolenanwendung, die mit VT100-codes und
termios
. Der gleiche code läuft auf UNIX-Varianten. Keine Notwendigkeit, verwenden Sie die Win32-console-API unter Windows und VT100/termios
auf einem POSIX-system.Anderes Beispiel: für threading, können Sie einfach verwenden Sie POSIX-threads.
pthread_create
zu Beginn einen thread,pthread_mutex_lock
sperren einer mutex-und so weiter. Ihr Programm muss nicht eine Portabilität Abstraktion für threads, die übersetzt "Win32" oder " POSIX; verwenden Sie einfach die POSIX-und das ist es.Den
uname
Funktion in Cygnal Berichte dersysname
mit einemCYGNAL
Präfix anstattCYGWIN
. Durch das Programm sagen kann, dass es läuft auf Cygnal statt Cygwin (oder einem anderen POSIX-Plattform). So können Sie die nötigen änderungen vor: zum Beispiel, wenn Sie Ihr Programm muss/dev/null
auf Cygnal es Aussehen kann, fürdev:/null
statt.InformationsquelleAutor Kaz
Normalerweise, ja. Installieren Sie den Cygwin-DLL in einen öffentlichen Ort, obwohl (Windows\System32), diese DLL verhält sich sehr schlecht, wenn mehrere Versionen geladen werden, die auf der gleichen Maschine.
Die Frage nicht Zustand, etwas über den Autor nicht loslassen der code. Viele Dienstprogramme tun bundle ein cygwin1.dll. Ein Beispiel ist cntml: cntlm.sourceforge.net.
InformationsquelleAutor Wim
Könnten Sie versuchen, zu kompilieren, alles so statisch. Das sollte Ihnen ermöglichen, alles ohne die Notwendigkeit, die libs (da Sie bereits in Ihrem Binär).
Aber dies bedeutet auch, dass es vielleicht nicht Arbeit für alle Plattformen, wenn cygwin müsste eine andere oder neuere dll.
InformationsquelleAutor Sorin