mediu Sygwin pentru programare multiplatformă

Cygwin: ce este?

Cygwin - este o abreviere pentru „Cygnus“, grup
software-ul gratuit în
Proiectul „RedHat“ și „Ferestre“, iubit de noi toți






sistem de operare. Mă grăbesc să risipi foarte
popular punct de vedere pe care Cygwin - l
UNIX emulator În Windows: nu este așa! Cygwin - l
un puternic, foarte dezvoltată și, cel mai important,
un set gratuit de instrumente
transferarea (portare) software Unixuri pentru Windows
și compileze (a crea un cod binar
pe o singură platformă sub alte software UNIX'ovgo).
Pentru mine personal, The Cygwin, în primul rând,
puternic compilator gcc cu lustruit
sub Windows și Heather libami.

Cygwin acum devine destul de popular:
mulți producători de software gratuit pentru UNIX
sprijin „-Target = Cygwin“ în configurările lor
programe, beneficiul nu este la fel de consumatoare de timp. A
Cygwin, la rândul său, se extinde
compatibilitatea cu UNIX, sprijinind nu numai
POSIX, dar altele, mai strict specifice
sisteme de standarde bazate pe UNIX.

Cygwin: în cazul în care să se uite?

Cygwin: ce și cum se instalează?

Dacă ați scris sau compilate vreodată
programe sub UNIX, credeți că nu va experimenta
nici o problema cu Cygwin. numai
amintiți-vă că gcc nu poate cygwin'ny
susține unele dintre opțiunile pe care le
utilizarea în UNIX'e, deși numărul de astfel de
neînțelegerile sunt reduse la minimum. pe meu
lea, astfel de probleme nu apar.
În orice caz, dacă există
problemă, știm cu toții cel mai bun mod de a pe cale amiabilă
rezolvarea lor: „om gcc“. )))

Dacă nu ați angajat anterior
programare sub UNIX, și sunt folosite pentru a apăsa
în scopul de a compila dumneavoastră
Programul nu ar trebui să fie supărat.
Încercați „om GCC“ în cygwin'a bash'e: destul
lectură demn și fascinant.

Nu voi fi original, așa că începe
vom, ca întotdeauna și peste tot, cu O „Hello World!“ on
consola. Deci, hello.c:

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

gcc -s hello.c o- hello.exe

si uita-te la binar. 3072 octeți binare
cod, format PE, executabil portabil, dll descărcabil:

cygwin1.dll, în cazul în care hello.exe ia printf noastre () și alte
funcții pe care le nakompiliroval CGC;
kernel32.dll, în cazul în care hello.exe ia GetModuleHandleA.

buruiană ponturi de GCC / usr / include, că






este directorul implicit și inkludnoy
la UNIX și cygwin'e.

În GCC cygwin'nom există o opțiune foarte frumos,
care, din anumite motive, nu este documentat în
om-fișier, '-mno-Cygwin'. compilează nostru
program cu această opțiune:

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

si uita-te la binar: Din nou, 3072 bytes
cod binar, dar programul nostru nu mai este
are nevoie de cygwin1.dll! în schimb,
Se folosește Msvcrt.dll, în cazul în care el găsește SUA
Funcția printf.

Dacă ne yuzaem opțiunea '-mno-Cygwin', aruncă Cygwin gcc'shny
preprocessor în directorul / usr / include / MinGW, și,
respectiv, gcc compilează
este din acest director.

Vă recomandăm insistent să facă
plimbare prin conținutul directorului / usr / include
în scopul de a înțelege ceea ce este ceea ce. Te crezi
vor aprecia conținutul directorului / usr / include / sys
și / usr / include / W32api.

- [Makefile (pentru neyuniksoidov, Makefile cu
capital de litera 'M'):

# Makefile Tiny pentru un mic program

toate:
@echo alege 'face POSIX' pentru UNIX / Cygwin sau 'face ferestre' pentru Windows

POSIX:
@printf "easy.c Clădire pentru POSIX ..."
@printf "#define ENV_POSIX"> plateform.h
@gcc -s easy.c o- easy.exe
@echo OK!

ferestre:
@printf „easy.c Clădire pentru ferestre ...“
@printf "ENV_WINDOWS #define"> 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 // pentru INADDR_ANY
#include // pentru semnalul ()
#else
#include
# endif

int main (int argc, char ** argv)

dst sockaddr_in struct;
# ifdef ENV_POSIX
int ciorap, sid;
#else
SOCKET ciorap, sid;
WSAData WSAData;
# endif
int len ​​= sizeof (sockaddr struct);
buf char;
Portul scurt unsigned;

în cazul în care (argc<2) printf(«Usage: easy.exe \ N »);
întoarce 1;
>

în cazul în care (port!) printf ( «Bad \ Definit n ») !;
întoarce 2;
>

# ifdef ENV_POSIX // în pozikse am ignora semnalele, nu știi niciodată 🙂
semnal (SIGPIPE, SIG_IGN);
#else ENV_WINDOWS // vom verifica în versiunea pentru Windows vinsoka, nu știi niciodată 🙂
printf ( «Testarea dacă versiunea Winsock2 este egală sau mai mare de 2,1 ...»);
if (! WSAStartup (MAKEWORD (2,1), WSAData) = 0) printf ( «a eșuat \ n!»);
întoarce 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);
ciorap = soclu (AF_INET, SOCK_STREAM, 0);
printf ( «Se așteaptă o conexiune de intrare ...»); fflush (stdout);
bind (ciorap, (struct sockaddr *) dst, len);
asculta (ciorap, 1);
sid = accepta (ciorap, (struct sockaddr *) dst, len);
printf ( «realizat \ nWaiting pentru datele de intrare ...!»); fflush (stdout);
recv (sid, buf, 1,0);
printf ( «primit: [% 2X] ...»); fflush (stdout);
buf ++;
trimite (sid, buf, 1,0);
printf ( «terminat \ n!»);

# ifdef ENV_POSIX
închidere (ciorap);
#else
WSACleanup ();
closesocket (ciorap);
# endif

Așa că am de tip „make POSIX“ pentru a
compila un program sub UNIX'om sau sub cygwin'nuyu
mediu sau „face ferestre“ pentru a evita
depind de cygwin'a și de a folosi numai
kernel32.dll, ws2_32.dll și Msvcrt.dll, care sunt incluse în
pachetul standard al fiecărei distribuție
Windows. Să acorde o atenție la dimensiunea binar:
4096 bytes pentru Cygwin, 4608 byte pentru ferestre! 🙂

De data aceasta, totul! Stai la scurt timp după
articole în viitorul apropiat: „Tehnologie
rețele de scanare: motor Coketny“.

Arată acest articol unui prieten: