Windows og Linux er to helt forskjellige systemer, og det er ofte ikke lett å portprogrammer skrevet for hverandre, spesielt når det gjelder å håndtere GUI-programmer. Selv om det er mange forskjellige tverrplattformsbiblioteker og SDKer, er innfødte programmer skrevet uten portabilitet i tankene ganske vanskelig å porte.

Når det gjelder å kompilere og kjøre programmer skrevet for Linux på Windows, er det en løsning kjent som Cygwin. Cygwin-prosjektet er en samling av de vanligste verktøyene og kompilatørene (inkludert bash-skallet og GNU-kompilerkjeden) for Windows. Den inneholder også et bibliotek som tilbyr et kompatibilitetslag slik at programmer som kaller Linux-spesifikke APIer, kan kompileres. Cygwin er ikke en emulator eller en virtuell maskin, og det tillater ikke at Linux-binærprogrammer kjører på Windows uten først å bli kompilert.

Gå til Cygwin-installeringssiden og last ned 32-bit eller 64-biters installeringsprogram (avhengig av hvilken variant av Windows du bruker). Utfør oppsettprogrammet. Klikk på Neste og Neste igjen (til "Installer fra Internett"). Standardkatalogen er "C: \ cygwin". Det kan endres om nødvendig, men hvis du ikke har en bestemt grunn til å endre den, er standard best. Klikk Neste, Neste og Neste igjen.

Cygwin-prosjektet har speilsider over hele verden; velg en som du tror best vil betjene posisjonen din og klikk på Neste. Du må nå velge hvilke pakker som skal installeres. For å kompilere enkle Linux-programmer i Windows, trenger du GNU Compiler Chain (GCC) som gir en C og C + + kompilator.

Skriv "gcc" i søkeboksen og klikk deretter på det lille plustegnet ved siden av "Utvikle" i listen over pakker. Finn "gcc-core" og "gcc-g ++" og klikk "Skip" for hver enkelt. Ordet "Skip" vil endres til et versjonsnummer og "n / a" -tegnet i kolonnen "Bin?" Blir en merket boks. Skriv "make" i søkeboksen og finn "make" under "Devel." Klikk "Skip" for å markere den for installasjon. Søk etter "wget" og merk det også for installasjon fra "Web." For å bygge eksemplet nedenfor, trenger vi også "libiconv;" søk etter det og merk det for installasjon.

Klikk på Neste. Installasjonsprogrammet vil da se hvilke andre pakker som må installeres for å løse eventuelle avhengigheter. Klikk på Neste for å godta anbefalingene.

Når alle pakkene er lastet ned og installert, følg de siste trinnene til installasjonsprogrammet går ut. Start "Cygwin Terminal" for å gå inn i Linux-lignende utviklingsmiljø. I terminalen bruker du ikke Windows-kommandoer som "dir", men heller skal kommandoer som "ls".

For å demonstrere hvordan å kompilere et Linux-program under Windows, vil vi bruke HTML-XML-pakken fra W3. For å se hva det kan gjøre, se Hvordan manipulere HTML- og XML-filer fra kommandolinjen.

Last ned kildefilene ved hjelp av "wget":

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

Pakker arkivfilen ut:

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

Kildefilene er nå i katalogen "html-xml-utils-6.7". Skriv inn katalogen:

 cd html-xml-utils-6.7 

Før filene kan bygges, må du kjøre "configure" shell-skriptet for å generere Makefile (bygningsinstruksjonene) som passer for dette byggemiljøet. Dette er et vanlig trinn på Linux (og Cygwin) når du bygger pakker fra kilde.

 ./configure 

Når "configure" er ferdig, kan du starte bygget ved hjelp av "make":

 gjøre 

Bygget vil mislykkes delvis gjennom. Jeg var i to tanker om hva jeg skal gjøre neste gang. Enten kan jeg bytte til et annet prosjekt og bygge det fra sin kilde eller kjempe videre med HTML-XML-utils. Jeg valgte sistnevnte som det viser at ikke alt vil være en walk-in-the-park når du prøver å kompilere Linux-programmer under Cygwin. Løsningen på dette problemet er enkelt. Feilmeldingen viser at linkeren ikke kan finne "iconv" -biblioteket. En rask titt på lenke-kommandoen viser at biblioteket ikke er spesifisert. Den raske og skitne løsningen er å kjøre kommandoen manuelt og fortelle linkeren å bruke libconv. Den "riktige" måten å fikse dette ville være å begynne å dype inn i Makefile etc. for å finne ut hvorfor det ikke virker.

Kjør følgende kommando, og noter inkluderingen av "-liconv" på slutten:

 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 bygd, kan du fortsette med resten av bygningen ved å skrive "lage" igjen. Måten "make" fungerer, kontrollerer det som har og ikke er bygget, og det fortsetter byggeprosessen på det aktuelle punktet. Siden vi har manuelt bygget "hxindex.exe", gjør "make" bare med det neste binære i listen.

Når "make" er ferdig, vil du ha alle .exe-filene i html-xml-utils-6.7-katalogen.

Hvis du sitter fast ved hjelp av Cygwin, bør du se på FAQ, og i dokumentasjonen. Hvis ikke, har prosjektet et sett med adresselister. Hvis du har noen problemer med trinnene beskrevet ovenfor, vennligst bruk kommentarfeltet nedenfor.