Ich habe eine Frage zu Cygwin:
- Kann ich mit Cygwin Socket-basierten Code entwickeln?
- Hat Cygwin
read()
und write()
Funktionen, die mit Dateideskriptoren arbeiten?
- Kann ich die Pthread-Bibliothek in Cygwin verwenden?
- Lässt sich Code, der in Cygwin kompiliert wird, auch unter Linux ohne oder mit geringen Änderungen kompilieren?
- Wird eine von Cygwin erstellte ausführbare Datei unter Linux ausgeführt?
- Warum benötigt Cygwin die Linker-Option nicht
-lpthread
wenn ich die pthread-Bibliothek verwende?
- warum hinein
#include <iostream>
muss ich nicht verwenden using namespace std;
?
- Kann ich mit QT in Cygwin arbeiten? Wenn das so ist, wie?
- Kann ich mein Linux in anderen booten
- mit Cygwin partitionieren und verwenden?
- Kann ich auf die andere Partition zugreifen, die EXT3 in Cygwin ist?
Auf 1:
Ja. Socket-Bibliotheken werden mit Cygwin ausgeliefert – viele Socket-basierte Apps wie z Webserver sind in der Grundverteilung enthalten.
Am 2.:
Ja. Ich denke, dass alle Systemaufrufe „Abschnitt 2 und 3“ in der GNU C-Laufzeitumgebung und -Bibliothek von Cygwin Runtume implementiert werden. Sie können dies in den Manpages überprüfen, die mit Cygwin geliefert werden. Eine Liste der von Cygwin implementierten Systemaufrufe und std lib-Aufrufe finden Sie hier hier.
Auf 3: Ja. Pthread ist in Cygwin enthalten. Die Liste, auf die in der Link oben erwähnt auch pthreads.
Am 4.: Alles, was gegen GNU-Bibliotheken gebaut wurde, sollte mit wenig oder gar keinen Änderungen zwischen Cygwin und Linux funktionieren (vorausgesetzt, es fehlen keine Abhängigkeiten auf Cygwin). Je nach CPU-Architektur müssen Sie sich möglicherweise Sorgen machen Wortausrichtung, Endianität und andere architekturspezifische Portierungsprobleme, aber wenn Sie auf Windows und Linux auf Intel abzielen, hätte Ihr Code nur wenige oder gar keine Portierungsprobleme, die sich aus der CPU-Architektur ergeben.
Am 5.: Cygwin erstellt standardmäßig ein Programm anhand seiner eigenen gemeinsam genutzten Bibliotheken, aber GCC kann Cross-Compiling durchführen, um auf andere Plattformen abzuzielen. Sie könnten (theoretisch) GCC so einrichten, dass es auf jedes vom Compiler unterstützte Ziel querkompiliert wird. Es gibt viele Ressourcen im Web über Cross-Compiling mit GCC, und ich glaube nicht, dass der Prozess auf Cygwin wesentlich anders sein wird.
Beachten Sie, dass Cygwin-Binärdateien nicht unter Linux laufen – oder umgekehrt. Sie benötigen weiterhin separate Builds für beide.
Am 6.: Nicht sicher – vermutlich ist es in der Standardlaufzeit enthalten, vielleicht weil es aus irgendeinem Grund notwendig war, die Win32-Threading-API zu umschließen.
Am 7.: Weiß nicht – es ist wahrscheinlich auf allen Plattformen auf g++ gleich. Anscheinend ein Compiler-Bug. Die Antwort von Dan Moulding behandelt dies ausführlicher.
Am 8.: Ja. IIRC QT ist in den Standard-Builds verfügbar und es wird sicherlich auf Cygwin kompiliert. Wie bei Linux/Unix verwendet QT auf Cygwin ein X11-Backend, daher benötigen Sie einen X-Server wie z XMing laufend.
Um die Abhängigkeit von einem X-Server zu vermeiden, können Sie dies tun Erstellen Sie QT-Apps gegen die Win32-API,. Es ist möglich, dies mit zu tun MinGW, bei dem es sich um eine Reihe von Header-Dateien und Bibliotheken zum Erstellen nativer Win32-Apps mit GCC handelt. MinGW kann innerhalb einer Cygwin-Umgebung verwendet werden (ein Beispiel für GCC auf Cygwin-Crosskompilierung auf ein Nicht-Cygwin-Ziel) und die Installateur aus cygwin.com gibt Ihnen die Möglichkeit, es zu installieren.
MinGW ist ziemlich ausgereift; es hat alle “üblichen Verdächtigen” – Bibliotheken und Header-Dateien, die Sie in einer Unix/Linux-GCC-Entwicklungsumgebung erwarten würden, und ist sehr stabil. Es ist häufig das Werkzeug der Wahl zum Erstellen von Win32-Portierungen von Open-Source-Software, da es (a) kostenlos ist, (b) die von der Software verwendeten Bibliotheken unterstützt und (c) GCC verwendet, sodass es nicht von dialektischen Variationen zwischen MSVC betroffen ist und GCC.
Diese dialektischen Variationen in der Sprache und den verfügbaren Bibliotheken (zum Beispiel enthält MSVC keine Implementierung von getopt
) bedeutet, dass das Portieren von Programmen zwischen MinGW und MSVC ziemlich fummelig sein kann. Meine Erfahrung – zugegebenermaßen nicht sehr umfangreich, da ich dies nur wenige Male gemacht habe – ist, dass die Portierung von Anwendungen zwischen MinGW32 und Linux einfacher ist als die Portierung zwischen MinGW und MSVC. Offensichtlich würden Apps mit nicht-portablen Abhängigkeiten wie Win32-spezifische API-Nutzung erfordern, dass die abhängigen Komponenten für die neue Plattform neu geschrieben werden, aber Sie werden weitaus weniger Probleme mit Unterschieden in den Standardbibliotheken, Header-Dateien und dem Sprachdialekt haben.
QT leistet ziemlich gute Arbeit bei der Bereitstellung einer Plattform-Abstraktionsschicht. Es bietet APIs für Datenbankzugriff, Threading, I/O und viele andere Dienste sowie die GUI. Die Verwendung der QT-APIs sollte nach Möglichkeit bei der Portabilität helfen, und die Unix/Linux-ähnlichen Bibliotheken, die mit MinGW geliefert werden, bedeuten, dass es Ihnen eine gute Plattform zum Erstellen von Anwendungen bieten könnte, die zwischen Win32 und Linux mit relativ wenig plattformabhängigem Code portiert werden.
BEARBEITEN: Die qt-Entwicklungspakete in Cygwin sind:
- qt4: Qt-Anwendungsframework (Quelle)
- qt4-devel-tools: Qt4-Assistent, Designer und Linguist
- qt4-doc: Qt4-API-Dokumentation
- qt4-qtconfig: Qt4-Desktop-Konfigurations-App
- qt4-qtdemo: Qt4-Demos und Beispiele
Sie benötigen wahrscheinlich auch gcc4-g++ und einige andere Kleinigkeiten. Diese Auflistung auf der Cygwin-Website hat eine Liste der Pakete.
“Ja” zu allen außer 5. Sie müssen Ihre ausführbaren Dateien für Linux separat erstellen, aber das sollte einfach sein, da die Antwort auf 4 “Ja” ist.
Stellen Sie sicher, dass Sie alle erforderlichen Entwicklungsheader auf beiden Plattformen installieren.
Ja, Ja, Ja, Ja (wenn Sie es sorgfältig schreiben und nichts Spezifisches für Cygwin verwenden), Nein.
Zu 5: Es kann möglich sein, von Cygwin nach Linux zu kompilieren, ich weiß es wirklich nicht. Wenn dies der Fall ist, würden technisch gesehen einige ausführbare Dateien, die “von Cygwin erstellt wurden”, unter Linux ausgeführt werden. Ausführbare Cygwin-Dateien werden jedoch nicht unter Linux ausgeführt.
1-4: Die Antworten darauf sind alle “Ja”, da alle diese Funktionen, nach denen Sie fragen, Teil des POSIX-Standards sind. Cygwin ist im Grunde eine POSIX-Schicht für Windows, daher enthält Cygwin natürlich alle diese Funktionen.
5: Nein, Cygwin-Binärdateien werden nicht unter dem Linux-Kernel ausgeführt, da der von Cygwin generierte Code letztendlich Windows-nativer Code ist. Es wird mit den üblichen Windows-DLLs (wie kernel32.dll) verknüpft, während Linux nicht einmal eine Vorstellung von DLLs hat (es hat gemeinsame Objekte, die ähnlich, aber unterschiedlich sind). Noch wichtiger ist, dass unter Cygwin erstellte ausführbare Dateien im PE-Format vorliegen, aber Linux verwendet im Allgemeinen das ELF-Format für ausführbare Dateien. Sie könnten natürlich Cross-Compiling unter Cygwin durchführen und dadurch native ausführbare Linux-Dateien generieren, aber es klingt nicht so, als ob Sie danach suchen. Auch das Kompilieren einer neuen Version von GCC zur Verwendung als Cross-Compiler unter Cygwin ist wahrscheinlich keine triviale Aufgabe.
6: GCC unter Cygwin erfordert keine Verwendung von -lpthread
da sich der gesamte pthread-Code unter Cygwin in cygwin1.dll befindet, die standardmäßig immer eingebunden ist.
7: Dies ist ein Fehler in GCC (auf allen Plattformen). Es gibt es schon seit a lang Zeit und wird wahrscheinlich nie behoben werden.
8: ConcernedOfTunbridgeWells hat das großartig erklärt, also bleibt mir nicht mehr viel zu sagen. Es ist jedoch erwähnenswert, dass Cygwin das X.org X Window System in seiner Paketliste hat. Mit Cygwin 1.7.x ist die Einrichtung und Verwendung a Brise und es scheint ziemlich felsenfest zu sein. Wenn Sie Qt mit X verwenden möchten, empfehle ich die Verwendung des X-Servers von Cygwin.
Als Antwort auf #7 ist die Version des C++-Compilers, die Sie haben, wahrscheinlich veraltet. Wenn Sie keine Linux/Posix-Portabilität benötigen, würde ich auf den Nicht-Cygwin-MinGW-GCC-Compiler umsteigen – Sie können 4.4.1 unter bekommen http://tdragon.net/recentgcc/
In Bezug auf 6 benötigen Sie -lpthread nicht, da die Pthreads-Unterstützung Teil der Cygwin-DLL ist.