Sygwin környezet multiplatform programozás

Cygwin: mi ez?

Cygwin - egy rövidítés az „Cygnus”, csoport
szabad szoftver alatt
Project „RedHat” és a „Windows”, szeretett mindannyian
operációs rendszer. Sietek eloszlatni az igen
A népszerű szempontból, hogy cygwin - ez
UNIX emulátor Windows: ez nem így van! Cygwin - ez
egy erős, fejlett, és ami a legfontosabb,
egy ingyenes eszközkészlet
átadó (számhordozás) Unix szoftver Windows
és a határon fordítási (hozzon létre egy bináris kód
egy platformon a másik alatt) UNIX'ovgo szoftver.
Nekem személy szerint az cygwin, először is, hogy
erőteljes gcc fordítóval polírozott
Windows és Heather libami.

Cygwin most egyre nagyon népszerű:
Sok gyártó a szabad szoftver UNIX
támogatás „-target = cygwin” saját konfigurációk
programok, az ellátás nem olyan időigényes. A
A Cygwin, viszont kitágul
kompatibilitás UNIX, alátámasztó nemcsak
posix, de más, szűkebb konkrét
szabványok UNIX-alapú rendszerekhez.

Cygwin: hol kell keresni?

Cygwin: mit és hogyan kell telepíteni?

Ha valaha írott vagy összeállított
programok UNIX, úgy gondolja, nem fog tapasztalni
nincs probléma a cygwin. csak
megjegyezni, hogy a gcc nem cygwin'ny
támogat egyes lehetőségeket, hogy
használja UNIX'e, bár ezek száma
félreértések minimálisak. én
században ezek a problémák nem merülnek fel.
Mindenesetre, ha van olyan
probléma, mindannyian tudjuk, hogy a legjobb módja annak, hogy békés úton
megoldásuk: „az ember gcc”. )))

Ha korábban nem foglalkozó
programozás alatt UNIX, és arra használják, hogy nyomja meg a
annak érdekében, hogy fordítsa le a
program ne legyen ideges.
Próbáld az 'ember gcc a bash'e cygwin'a: igen
méltó és érdekes olvasni.

Nem leszek eredeti, tehát indul
Mi lesz, mint mindig és mindenhol, ahol O „helló világ!” on
konzolt. Tehát hello.c:

#include
int main () printf ( "Hello World \ n!");
vissza 0;
>

gcc -s hello.c -o hello.exe

és nézd meg a bináris. 3072 byte bináris
kódot, PE méret, hordozható végrehajtható, letölthető dll:

cygwin1.dll, ahol hello.exe tart, amíg a printf () és az egyéb
jellemzői, hogy mi nakompiliroval gcc;
kernel32.dll, ahol hello.exe veszi GetModuleHandleA.

hanga gcc felveszi a / usr / include, hogy
az alapértelmezett könyvtár és inkludnoy
UNIX és cygwin'e.

A cygwin'nom gcc van egy nagyon jó lehetőség,
amely valamilyen okból nincs dokumentálva a
man-fájl '-mno-cygwin'. lefordítani a
program ezt az opciót:

gcc -mno-cygwin -s hello.c -o hello.exe

és nézd meg a bináris: Ismét 3072 bájt
bináris kód, de a program már nem
szüksége cygwin1.dll! ehelyett
Ez használ msvcrt.dll, ahol megtalálja a minket
függvény a printf.

Ha yuzaem opció '-mno-cygwin' cygwin dob gcc'shny
preprocessor a / usr / include / mingw, és
illetve gcc általa összeállított
ez ebből a könyvtárból.

Azt javasoljuk, hogy a
séta a tartalmát a / usr / include
annak érdekében, hogy megértsük, mi az, ami. Azt hiszem,
értékelni fogják a tartalmát a / usr / include / sys
és / usr / include / W32api.

- [Makefile (a neyuniksoidov, Makefile a
tőke 'M' betű):

# Apró makefile egy kicsi program

Az összes:
@echo Pick hogy posix "UNIX / cygwin vagy 'hogy a Windows' Windows

posix:
@printf "Building easy.c POSIX ..."
@printf "#define ENV_POSIX"> plateform.h
@gcc -s easy.c -o easy.exe
@echo ok!

windows:
@printf "Building easy.c az ablakok ..."
@printf "#define ENV_WINDOWS"> plateform.h
@gcc -mno-cygwin -s easy.c -lws2_32 -o easy.exe
@echo ok!

#include «plateform.h»
#include

#ifdef ENV_POSIX
#include
#include
#include // a INADDR_ANY
#include // a jelet ()
#else
#include
#endif

int main (int argc, char ** argv)

struct sockaddr_in DST;
#ifdef ENV_POSIX
int zokni, SID;
#else
SOCKET zokni, SID;
WSADATA wsaData;
#endif
int LEN = sizeof (struct sockaddr);
char buf;
unsigned short port;

if (argc<2) printf(«Usage: easy.exe \ N »);
vissza 1;
>

if (! port) printf ( «Bad definiált \ n ») !;
vissza 2;
>

#ifdef ENV_POSIX // in pozikse figyelmen kívül hagyjuk a jeleket, soha nem lehet tudni 🙂
jelet (SIGPIPE, SIG_IGN);
#else ENV_WINDOWS // ellenőrizzük Windows vinsoka verzió, soha nem lehet tudni 🙂
printf ( «Testing ha a WinSock2 verzió nagyobb vagy egyenlő, mint 2,1 ...»);
ha (WSAStartup (MAKEWORD (2,1), wsaData) = 0!) printf ( «sikertelen \ n!»);
vissza 1;
>
printf ( «ok \ n!»);
fflush (stdout);
#endif

dst.sin_family = AF_INET;
dst.sin_addr.s_addr = htonl (INADDR_ANY);
dst.sin_port = htons (port);
zokni = socket (AF_INET, SOCK_STREAM, 0);
printf ( «Várakozás bejövő kapcsolatra ...»); fflush (stdout);
bind (zokni, (struct sockaddr *) DST, len);
hallgatni (zokni, 1);
sid = fogadja (zokni, (struct sockaddr *) DST, len);
printf ( «Kész \ nWaiting bejövő adatok ...!»); fflush (stdout);
recv (sid, buf, 1,0);
printf ( «kapott: [% 2X] ...»); fflush (stdout);
buf ++;
Levél (sid, buf, 1,0);
printf ( «kész \ n!»);

#ifdef ENV_POSIX
bezár (zokni);
#else
WSACleanup ();
closesocket (zokni);
#endif

Tehát írja „make posix” a
összeállítani egy programot UNIX'om vagy a cygwin'nuyu
közepes vagy „hogy a Windows” annak érdekében, hogy elkerüljék
függ cygwin'a és csak
kernel32.dll, ws2_32.dll és msvcrt.dll, amelyek szerepelnek
A standard csomag az egyes elosztó
Windows-t. Ügyeljen arra, hogy a méret a bináris:
4096 byte cygwin, 4608 byte az ablakok! 🙂

Ezúttal mindent! Várj követően röviddel
cikkek a közeljövőben: „Technológia
leolvasó hálózatok: Coketny motor”.

Itt található az ezt a cikket egy ismerősének: