Windows og Linux er to meget forskellige systemer, og som sådan er det ofte ikke let at porte programmer skrevet til den ene til den anden, især når man beskæftiger sig med GUI-programmer. Selv om der er mange forskellige platforme biblioteker og SDK'er, er native programmer, der er skrevet uden portabilitet i tankerne, ret vanskelige at porte.

Når det kommer til at kompilere og køre programmer skrevet til Linux på Windows, er der en løsning kendt som Cygwin. Cygwin-projektet er en samling af de mest almindelige værktøjer og kompilatorer (herunder bash shell og GNU compiler kæden) til Windows. Det indeholder også et bibliotek, der leverer et kompatibilitetslag, så programmer, der kalder Linux-specifikke API'er, kan kompileres. Cygwin er ikke en emulator eller virtuel maskine, og det tillader ikke, at Linux-binære filer kører på Windows uden først at blive kompileret.

Besøg Cygwin installations siden og download 32-bit eller 64-bit opsætnings eksekverbar (afhængig af hvilken variant af Windows du bruger). Udfør installationsprogrammet. Klik på Næste og Næste igen (til "Installer fra internettet"). Standardmappen er "C: \ cygwin". Det kan ændres, hvis det er nødvendigt, men medmindre du har en specifik grund til at ændre det, er standard det bedste. Klik på Næste, Næste og Næste igen.

Cygwin-projektet har spejlsites over hele verden; Vælg en, som du synes bedst vil betjene din placering, og klik på Næste. Du skal nu vælge hvilke pakker, der skal installeres. For at kompilere simple Linux-programmer i Windows skal du bruge GNU Compiler Chain (GCC), som indeholder en C og C ++ compiler.

Skriv "gcc" i søgefeltet, og klik derefter på det lille plusskilt ved siden af ​​"Udvikl" i listen over pakker. Find "gcc-core" og "gcc-g ++" og klik "Skip" for hver enkelt. Ordet "Skip" ændres til et versionsnummer, og "n / a" -tegnet i kolonnen "Bin?" Bliver til en afkrydsningsfelt. Skriv "make" i søgefeltet og find "make" under "Devel." Klik på "Skip" for at markere det for install. Søg efter "wget" og marker også den for installation fra "Web". For at bygge eksemplet nedenfor skal vi også bruge "libiconv;" søge efter det og markere det for installation.

Klik på Næste. Installatøren vil derefter se, hvilke andre pakker der skal installeres for at løse eventuelle afhængigheder. Klik på Næste for at acceptere anbefalingerne.

Når alle pakkerne er blevet downloadet og installeret, skal du følge de sidste trin, indtil installationsprogrammet udløber. Start "Cygwin Terminal" for at komme ind i Linux-lignende udviklingsmiljø. I terminalen bruger du ikke Windows-kommandoer som "dir", men snarere shell kommandoer som "ls".

For at demonstrere, hvordan man compilerer et Linux-program under Windows, bruger vi HTML-XML-pakken fra W3. For at se hvad det kan gøre, se Sådan manipuleres HTML og XML-filer fra kommandolinjen.

Download kildefilerne ved hjælp af "wget":

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

Pak nu arkivfilen ud:

 tjære -zxf html-xml-utils-6.7.tar.gz 

Kildedatabaserne findes nu i katalogen "html-xml-utils-6.7". Indtast den pågældende mappe:

 cd html-xml-utils-6.7 

Før filerne kan opbygges, skal du køre "configure" shell script for at generere Makefile (bygningsinstruktionerne), der passer til dette byggemiljø. Dette er et fælles trin på Linux (og Cygwin), når du bygger pakker fra kilde.

 ./configure 

Når "configure" er færdig, kan du starte bygningen ved hjælp af "make":

 lave 

Bygningen mislykkes delvist. Jeg var i to tanker om hvad jeg skal gøre næste gang. Jeg kunne enten skifte til et andet projekt og bygge det fra sin kilde eller kæmpe videre med HTML-XML-utils. Jeg valgte sidstnævnte som det viser at ikke alt vil være en walk-in-the-park, når man forsøger at kompilere Linux-programmer under Cygwin. Løsningen på dette særlige problem er simpelt. Fejlmeddelelsen viser, at linkeren ikke kan finde "iconv" biblioteket. Et hurtigt kig på linkkommandoen viser, at biblioteket ikke er angivet. Den hurtige og beskidte løsning er at køre kommandoen manuelt og fortælle linkeren at bruge libconv. Den "rigtige" måde at løse dette på ville være at begynde at dykke ind i Makefile mv. For at finde ud af, hvorfor det ikke virker.

Kør følgende kommando, og noter inkluderingen af ​​"-liconv" i slutningen:

 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 

Når filen "hxindex.exe" er bygget, kan du fortsætte med resten af ​​bygningen ved at skrive "make" igen. Den måde, hvorpå "make" virker, er det, der kontrollerer, hvad der er og ikke er bygget, og så fortsætter det byggeprocessen på det relevante punkt. Da vi manuelt har bygget "hxindex.exe", gør "make" bare med det næste binære i sin liste.

Når "make" er færdig, vil du have alle .exe-filer i html-xml-utils-6.7-biblioteket.

Hvis du sidder fast ved hjælp af Cygwin, skal du se på ofte stillede spørgsmål og i dokumentationen. Hvis det ikke er tilfældet, har projektet et sæt mailinglister. Hvis du har problemer med de trin, der er beskrevet ovenfor, skal du bruge kommentarafsnittet nedenfor.