So kompilieren Sie Linux-Programme unter Windows mit Cygwin

Windows und Linux sind zwei sehr unterschiedliche Systeme und daher ist es oft nicht einfach, Programme, die für das eine geschrieben wurden, auf das andere zu portieren, insbesondere wenn es sich um GUI-Programme handelt. Obwohl es viele verschiedene plattformübergreifende Bibliotheken und SDKs gibt, sind native Programme, die ohne Rücksicht auf die Portabilität geschrieben wurden, ziemlich schwierig zu portieren.

Wenn es darum geht, für Linux geschriebene Programme unter Windows zu kompilieren und auszuführen, gibt es eine Lösung namens Cygwin. Das Cygwin-Projekt ist eine Sammlung der gängigsten Tools und Compiler (einschließlich der Bash-Shell und der GNU-Compilerkette) für Windows. Es enthält außerdem eine Bibliothek, die eine Kompatibilitätsschicht bereitstellt, damit Programme kompiliert werden können, die Linux-spezifische APIs aufrufen. Cygwin ist kein Emulator oder eine virtuelle Maschine und ermöglicht nicht die Ausführung von Linux-Binärdateien unter Windows, ohne dass diese zuvor neu kompiliert werden müssen.

Lesen Sie auch: So verwenden Sie den G++-Compiler unter Linux

Besuche den Cygwin-Installationsseite und laden Sie die ausführbare 32-Bit- oder 64-Bit-Setup-Datei herunter (je nachdem, welche Windows-Variante Sie verwenden). Führen Sie das Setup-Programm aus. Klicken Sie erneut auf „Weiter“ und dann auf „Weiter“ (zu „Aus dem Internet installieren“). Das Standardverzeichnis ist „C:\cygwin“. Sie kann bei Bedarf geändert werden. Sofern Sie jedoch keinen bestimmten Grund haben, sie zu ändern, ist die Standardeinstellung am besten. Klicken Sie erneut auf Weiter, Weiter und Weiter.

Das Cygwin-Projekt verfügt über Spiegelseiten auf der ganzen Welt; Wählen Sie eines aus, das Ihrer Meinung nach am besten zu Ihrem Standort passt, und klicken Sie auf „Weiter“. Sie müssen nun auswählen, welche Pakete installiert werden sollen. Um einfache Linux-Programme in Windows zu kompilieren, benötigen Sie die GNU Compiler Chain (GCC), die einen C- und C++-Compiler bereitstellt.

Geben Sie „gcc“ in das Suchfeld ein und klicken Sie dann in der Liste der Pakete auf das kleine Pluszeichen neben „Devel“. Suchen Sie nach „gcc-core“ und „gcc-g++“ und klicken Sie jeweils auf „Überspringen“. Das Wort „Überspringen“ ändert sich in eine Versionsnummer und das „n/a“-Zeichen im „Bin?“-Feld. Die Spalte wird zu einem Kontrollkästchen. Geben Sie „make“ in das Suchfeld ein und suchen Sie „make“ unter „Devel“. Klicken Sie auf „Überspringen“, um es zur Installation zu markieren. Suchen Sie nach „wget“ und markieren Sie es auch für die Installation über „Web“. Um das folgende Beispiel zu erstellen, benötigen wir außerdem „libiconv;“ Suchen Sie danach und markieren Sie es zur Installation.

Weiter klicken. Das Installationsprogramm sieht dann, welche anderen Pakete installiert werden müssen, um etwaige Abhängigkeiten aufzulösen. Klicken Sie auf Weiter, um die Empfehlungen zu akzeptieren.

Nachdem alle Pakete heruntergeladen und installiert wurden, befolgen Sie die letzten Schritte, bis das Installationsprogramm beendet wird. Starten Sie das „Cygwin Terminal“, um in die Linux-ähnliche Entwicklungsumgebung zu gelangen. Im Terminal verwenden Sie keine Windows-Befehle wie „dir“, sondern Shell-Befehle wie „ls“.

Um zu demonstrieren, wie man ein Linux-Programm unter Windows kompiliert, verwenden wir das HTML-XML-Paket aus dem W3. Weitere Informationen zu den möglichen Funktionen finden Sie unter So manipulieren Sie HTML- und XML-Dateien über die Befehlszeile.

Laden Sie die Quelldateien mit „wget“ herunter:

wget http://www.w3.org/Tools/HTML-XML-utils/html-xml-utils-6.7.tar.gz

Entpacken Sie nun die Archivdatei:

tar -zxf html-xml-utils-6.7.tar.gz

Die Quelldateien befinden sich jetzt im Verzeichnis „html-xml-utils-6.7“. Geben Sie dieses Verzeichnis ein:

Bevor die Dateien erstellt werden können, müssen Sie das Shell-Skript „configure“ ausführen, um das Makefile (die Build-Anweisungen) zu generieren, das für diese Build-Umgebung geeignet ist. Dies ist ein häufiger Schritt unter Linux (und Cygwin), wenn Pakete aus dem Quellcode erstellt werden.

Sobald „configure“ abgeschlossen ist, können Sie den Build mit „make“ starten:

Der Build wird teilweise fehlschlagen. Ich war mir nicht sicher, was ich als nächstes tun sollte. Entweder könnte ich zu einem anderen Projekt wechseln und es aus der Quelle erstellen oder mit den HTML-XML-Utils weiterkämpfen. Ich habe mich für Letzteres entschieden, da es zeigt, dass beim Versuch, Linux-Programme unter Cygwin zu kompilieren, nicht alles ein Kinderspiel sein wird. Die Lösung für dieses spezielle Problem ist einfach. Die Fehlermeldung zeigt, dass der Linker die Bibliothek „iconv“ nicht finden kann. Ein kurzer Blick auf den Link-Befehl zeigt, dass die Bibliothek nicht angegeben ist. Die schnelle und schmutzige Lösung besteht darin, den Befehl manuell auszuführen und den Linker anzuweisen, libconv zu verwenden. Der „richtige“ Weg, dies zu beheben, wäre, sich mit dem Makefile usw. zu befassen, um herauszufinden, warum es nicht funktioniert.

Führen Sie den folgenden Befehl aus und achten Sie auf die Einfügung von „-liconv“ am Ende:

gcc -g -O2 -o hxindex.exe hxindex.o scan.o html.o openurl.o url.o heap.o class.o errexit.o connectsock.otypes.o tree.o genid.o dtd.o Header .o dict.o fopencookie.o -liconv

Sobald die Datei „hxindex.exe“ erstellt ist, können Sie mit dem Rest des Builds fortfahren, indem Sie erneut „make“ eingeben. Die Funktionsweise von „make“ besteht darin, dass es prüft, was erstellt wurde und was nicht, und dann den Erstellungsprozess an der entsprechenden Stelle fortsetzt. Da wir „hxindex.exe“ manuell erstellt haben, fährt „make“ einfach mit der nächsten Binärdatei in seiner Liste fort.

Wenn „make“ abgeschlossen ist, befinden sich alle .exe-Dateien im Verzeichnis html-xml-utils-6.7.

Wenn Sie bei der Verwendung von Cygwin nicht weiterkommen, sollten Sie sich das ansehen FAQund am Dokumentation. Andernfalls verfügt das Projekt über eine Reihe von Mailinglisten. Wenn Sie Probleme mit den oben beschriebenen Schritten haben, nutzen Sie bitte den Kommentarbereich unten.

Index

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Go up