Windows en Linux zijn twee heel verschillende systemen en daarom is het vaak niet eenvoudig om programma's die voor elkaar zijn geschreven over te zetten, vooral als het gaat om GUI-programma's. Hoewel er veel verschillende platformonafhankelijke bibliotheken en SDK's zijn, zijn native programma's die zonder portabiliteit zijn geschreven, vrij moeilijk te porten.

Als het gaat om het compileren en uitvoeren van programma's geschreven voor Linux op Windows, is er een oplossing die bekend staat als Cygwin. Het Cygwin-project is een verzameling van de meest gebruikte gereedschappen en compilers (inclusief de bash-shell en de GNU-compileerketen) voor Windows. Het bevat ook een bibliotheek die een compatibiliteitslaag biedt, zodat programma's die Linux-specifieke API's aanroepen, kunnen worden gecompileerd. Cygwin is geen emulator of virtuele machine en het staat Linux binaries niet toe om op Windows te draaien zonder eerst opnieuw gecompileerd te worden.

Ga naar de Cygwin-installatiepagina en download het 32-bits of 64-bits setup-uitvoerbare bestand (afhankelijk van de Windows-variant die u gebruikt). Voer het installatieprogramma uit. Klik opnieuw op Volgende en Volgende (om "Installeren vanaf internet"). De standaarddirectory is "C: \ cygwin". Het kan indien nodig worden gewijzigd, maar tenzij u een specifieke reden hebt om het te wijzigen, is de standaardinstelling het beste. Klik nogmaals op Volgende, Volgende en Volgende.

Het Cygwin-project heeft spiegelsites over de hele wereld; kies er een waarvan je denkt dat deze je locatie het beste zal dienen en klik op Volgende. U moet nu kiezen welke pakketten u wilt installeren. Voor het compileren van eenvoudige Linux-programma's in Windows hebt u de GNU Compiler Chain (GCC) nodig, die een C- en C ++ -compiler biedt.

Typ 'gcc' in het zoekvak en klik vervolgens in het kleine plusteken naast 'Devel' in de lijst met pakketten. Zoek "gcc-core" en "gcc-g ++" en klik op "Overslaan" voor elke optie. Het woord "Overslaan" verandert in een versienummer en het "n / a" -teken in de kolom "Bin?" Verandert in een aankruisvakje. Type "make" in het zoekvak en zoek "make" onder "Devel." Klik op "Overslaan" om het te markeren voor installatie. Zoek naar "wget" en markeer het ook voor installatie vanaf "Web". Om het onderstaande voorbeeld te bouwen, hebben we ook "libiconv;" nodig om ernaar te zoeken en het te markeren voor installatie.

Klik volgende. Het installatieprogramma zal dan zien welke andere pakketten moeten worden geïnstalleerd om eventuele afhankelijkheden op te lossen. Klik op Volgende om de aanbevelingen te accepteren.

Nadat alle pakketten zijn gedownload en geïnstalleerd, volgt u de laatste stappen totdat het installatieprogramma wordt afgesloten. Start de "Cygwin Terminal" om de Linux-achtige ontwikkelomgeving te betreden. In de terminal gebruik je geen Windows-opdrachten zoals "dir" maar eerder shell-opdrachten zoals "ls".

Om te demonstreren hoe een Linux-programma onder Windows te compileren, gebruiken we het HTML-XML-pakket van de W3. Zie HTML- en XML-bestanden manipuleren vanaf de opdrachtregel voor een overzicht van wat het kan doen.

Download de bronbestanden met "wget":

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

Pak nu het archiefbestand uit:

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

De bronbestanden bevinden zich nu in de map "html-xml-utils-6.7". Ga naar die map:

 cd html-xml-utils-6.7 

Voordat de bestanden kunnen worden gebouwd, moet u het shell-script "configure" uitvoeren om de Makefile (de buildinstructies) te genereren die geschikt zijn voor deze buildomgeving. Dit is een veel voorkomende stap op Linux (en Cygwin) bij het bouwen van pakketten van de bron.

 ./configure 

Nadat "configure" is voltooid, kunt u de build starten met "make":

 maken 

De build zal gedeeltelijk mislukken. Ik had twee gedachten over wat ik nu moest doen. Ik zou kunnen overschakelen naar een ander project en dat bouwen vanaf de bron of meevechten met de HTML-XML-utils. Ik koos voor het laatste omdat het laat zien dat niet alles een walk-in-the-park zal zijn wanneer je probeert Linux-programma's onder Cygwin te compileren. De oplossing voor dit specifieke probleem is eenvoudig. Het foutbericht laat zien dat de linker de "iconv" -bibliotheek niet kan vinden. Een snelle blik op de link-opdracht laat zien dat de bibliotheek niet is gespecificeerd. De snelle en vuile oplossing is om de opdracht handmatig uit te voeren en de linker te vertellen om libconv te gebruiken. De "juiste" manier om dit op te lossen, zou zijn om je in de Makefile enz. Te verdiepen om erachter te komen waarom het niet werkt.

Voer de volgende opdracht uit en merk op dat "-liconv" aan het einde is toegevoegd:

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

Nadat het bestand "hxindex.exe" is gemaakt, kunt u doorgaan met de rest van de build door opnieuw "make" te typen. De manier waarop "make" werkt, is dat het controleert wat wel en niet is gebouwd en vervolgens wordt het buildproces op het juiste moment voortgezet. Aangezien we "hxindex.exe" handmatig hebben gebouwd, gaat "make" gewoon door met het volgende binaire bestand in zijn lijst.

Wanneer "make" voltooid is, hebt u alle .exe-bestanden in de map html-xml-utils-6.7.

Als u vastloopt met Cygwin, moet u de veelgestelde vragen en de documentatie raadplegen. Als dat niet lukt, heeft het project een reeks mailinglijsten. Als je problemen hebt met de hierboven beschreven stappen, gebruik dan de opmerkingen hieronder.