2017-10-04 1 views
0

Ich habe ein Arbeitsmodul auf Linux und einer der Client will es auf Windows. Es gibt eine sehr gute Diskussion über ein ähnliches Thema hier (https://ask.slashdot.org/story/04/08/12/1932246/cygwin-in-a-production-environment), ich denke, es neigt dazu, Cygwin für Produktionen zu vermeiden, aber seine 13 Jahre ältere Diskussion, es könnte Probleme gegeben haben, aber in etwa 13 Jahren hoffe ich, dass Cygwin verbessert worden ist und gut für den Produktionseinsatz.Ist es in Ordnung, Linux-Code zu verwenden, der auf cygwin für die Produktion in Windows kompiliert wurde?

Der Code kompiliert nur gut und scheint unter cygwin ok zu arbeiten, so dass es sehr verlockend ist, es vorwärts zu bringen, anstatt es in Windows-Code zu wiederholen. Aber wenn es wirklich irgendwelche unlösbaren bekannten Probleme gibt und Leute es für Produktionen vermeiden, würde ich gerne wissen. Der Code verwendet stark Pthreads, Sockets in No-Warte

+0

Cygwin ist in Ordnung, wenn Sie die Lizenzbedingungen einhalten, die die Bereitstellung des Quellcodes erfordern. – tim18

Antwort

1

Ich habe Cygwin ein gutes Stück verwendet, und habe es meist unproblematisch gefunden. Ich kenne einige der gemeldeten Probleme, habe sie aber selbst nicht erlebt. Einige Dinge auf Cygwin sind viel langsamer als der gleiche Code unter Linux - das merke ich am meisten mit Verzeichnis Scans, aber das ist wahrscheinlich nicht das einzige Ding. Die Leute beschweren sich über fork() langsam, aber das ist nicht wirklich eine Überraschung, da "Forking" ist kein natives Konzept in Windows. Wenn Sie nur fork() verwenden, um Subprozesse zu starten, könnte die gesamte fork/exec-Sache möglicherweise durch Aufrufe von nativen Windows-APIs ersetzt werden.

Eine mögliche Einschränkung von Cygwin ist, dass es Cygwin zur Laufzeit oder zumindest einen Teil der Cygwin-Infrastruktur benötigt. MinGW kann diese Einschränkung entfernen, allerdings auf Kosten der Tatsache, dass Sie eine größere Anzahl von Kompatibilitätsänderungen in Ihrem Code vornehmen müssen (z. B. Dateispeicherorte). Das letzte Mal, als ich nachgesehen habe, hatte MinGW nicht so umfangreiche Werkzeuge wie Cygwin, aber es ist wahrscheinlich gut genug für viele Zwecke.

Ich denke, eine andere Möglichkeit in diesen Tagen ist das Windows-Subsystem für Linux (WSL) unter Windows 10. Ich habe festgestellt, dass Code, der für Cygwin baut normalerweise erstellt und läuft ohne Änderungen auf WSL, aber ich habe nicht wirklich herausgefunden, was die relativen Vor- und Nachteile von Cygwin und WSL sind.

Ich habe keine Probleme mit Pthreads in Cygwin, MinGW oder WSL bemerkt; obwohl ich denke, dass irgendwelche probleme wahrscheinlich von der genauen art abhängen, wie sie threads verwenden. Ich kann das No-Wait-Socket-Problem nicht kommentieren, weil ich das nicht versucht habe.

Übrigens, sowohl Cygwin als auch MinGW können Sie native Windows API und andere Funktionen in DLLs aufrufen, wenn Sie benötigen. Es besteht also die Möglichkeit, eine Art "hybride" Anwendung zu erstellen, die POSIX-ähnliche Funktionen und auch Win32-APIs verwendet. Dies kann nützlich sein, wenn sich herausstellt, dass einige Dinge mit Win32-Funktionalität viel schneller sind. Ich bin mir nicht sicher, ob das mit der WSL möglich ist.

+0

Danke Ich wusste nicht, WSL ist auch eine Option, MinGW Ich glaube, keine Steckdosen haben, oder? – Pras

+0

Also ich verstehe. Ich denke, der Nachteil der Verwendung von MinGW, um einige der Cygwin-Blähungen zu vermeiden, ist, dass Sie einige der Cygwin-Blähungen wieder implementieren können. Die Windows-Sockets-API ist in den meisten Anwendungen fast ein direkter Ersatz für Berkley-Sockets, abgesehen von mehr Windows-y-Datentypen und -Benennungen. Auf den ersten Blick würde ich nicht erwarten, dass es extrem schwierig sein wird, die Verwendung von Sockets in Windows-Sockets durch die Linux-App zu übersetzen.Aber es ist leicht zu sagen, dass, wenn ich nicht derjenige sein werde, der es tun muss;) –

+0

Meiner Erfahrung nach sind WSL-Skripte mehr von Speicherbedingungen abhängig als Cygwin. Es kann einen Versuch wert sein, wenn Ihre Kunden die zeitraubenden Updates akzeptieren können. – tim18

1

Ich sollte sagen, dass mein Kommentar über zeitaufwändige Updates bezieht sich so sehr auf die Notwendigkeit, ein komplettes Windows-Update sowie apt-get Updates vor dem Ausführen eines WSL Skript, das nach Mitternacht zu gehen. Das Ausführen eines separaten Speicherwiederherstellungsskripts alle 4 Stunden oder so ist eine Teillösung. Ich habe "nur" 6GB RAM.

Verwandte Themen