Sygwin среда за програмиране многоплатформен

Cygwin: какво е това?

Cygwin - е съкращение на "Cygnus" група
безплатен софтуер при условията на
Проект "RedHat" и "Windows", обичан от всички нас






операционна система. Бързам да разсее самото
популярната гледна точка на това Cygwin - това
UNIX емулатор на Windows: това не е така! Cygwin - това
мощно и силно развита и най-важното,
безплатен набор от инструменти
прехвърляне (пренасяне) на Unix-софтуер за Windows
и кръстосано компилация (създаване на двоичен код
на една платформа под друга) UNIX'ovgo софтуера.
За мен лично, на Cygwin, на първо място, той
мощен GCC компилатор с полиран
под Windows и Хедър libami.

Cygwin сега става доста популярен:
много производители на безплатен софтуер за UNIX
подкрепа "-target = Cygwin" в своите конфигурации
програми, ползата не е толкова отнема много време. А
на Cygwin, от своя страна, се разширява
съвместимост с UNIX, подкрепа не само
POSIX, но друга, по-тясно специфичен
стандарти UNIX-базирани системи.

Cygwin: къде да търсите?

Cygwin: какво и как да се инсталира?

Ако някога сте писмено или компилиран
програми по UNIX, които смятате, че няма да се опита
няма проблеми с Cygwin. само
не забравяйте, че не може да ССЗ cygwin'ny
подкрепа на някои от опциите, които можете
използват в UNIX'e, въпреки че броят на такива
недоразумения са сведени до минимум. на моя
век, тези проблеми не са.
Във всеки случай, ако има такива
проблем, ние всички знаем, най-добрият начин да се приятелски
решаването им: "човек ССЗ. )))

Ако не сте ангажирани по-рано
програмиране под UNIX, и сте свикнали да натиснете
За да компилирате
програма не трябва да се разстрои.
Опитайте "човек ССЗ" в bash'e cygwin'a: доста
достоен и завладяващ четене.

Аз няма да бъдат оригинални, така че да започнете
ние, както винаги и навсякъде, с О 'Здравей, свят! "на
конзола. Така че, hello.c:

#include
вътр главната () ФОРМАТ ( "Hello World \ н!");
връщане 0;
>

ССЗ -s hello.c -o hello.exe

и погледнете в двоичен. 3072 байта двоичен
код, PE формат, преносим изпълним, изтегляне DLL:

cygwin1.dll, където hello.exe отнема нашата ФОРМАТ () и други
функции, които ние nakompiliroval ССЗ;
kernel32.dll, където hello.exe отнема GetModuleHandleA.

пирен ССЗ кирки на / ЮЕсАр / включват, че






е стандартната директория и inkludnoy
за UNIX, и cygwin'e.

В cygwin'nom ССЗ има една много хубава опция,
които, по някаква причина, то не е документирано в
човек-файл, "-mno-Cygwin". съставяне ни
програма с тази опция:

ССЗ -mno-Cygwin -s hello.c -о hello.exe

и погледнете в двоичния код: Отново, 3072 байта
двоичен код, но нашата програма вече не е
нуждае cygwin1.dll! вместо това
Той използва Msvcrt.dll, където той открива САЩ
функция ФОРМАТ.

Ако yuzaem опция "-mno-Cygwin", Cygwin хвърля gcc'shny
предпроцесорни в директорията / ЮЕсАр / включват / MinGW, и,
съответно, GCC компилира
тя е от тази директория.

Силно препоръчваме да се направи
разходка из съдържанието на директорията / ЮЕсАр / включват
за да се разбере какво е това, което. Аз ли, че
ще оценят съдържанието на директорията / ЮЕсАр / включват / SYS
и / ЮЕсАр / включват / w32api.

- [Makefile (за neyuniksoidov, Makefile с
главната буква "М"):

# Tiny Makefile за една малка програма

всички:
@echo Pick 'направи POSIX "за UNIX / Cygwin или" направи прозорци "за Windows

POSIX:
@printf "Сграда easy.c за POSIX ..."
@printf "#define ENV_POSIX"> plateform.h
@gcc -s easy.c -o easy.exe
@echo ОК!

прозорци:
@printf "Сграда easy.c за прозорци ..."
@printf "#define ENV_WINDOWS"> plateform.h
@gcc -mno-Cygwin -s easy.c -lws2_32 -о easy.exe
@echo ОК!

#include «plateform.h»
#include

#ifdef ENV_POSIX
#include
#include
#include // за INADDR_ANY
#include // за сигнал ()
#else
#include
# endif

Int основна (междинно argc, овъгляване ** argv)

Struct sockaddr_in DST;
#ifdef ENV_POSIX
Int чорап, Sid;
#else
КОНТАКТ чорап, Sid;
WSADATA wsaData;
# endif
Int дъл = sizeof (структура sockaddr);
овъгляване Buf;
неподписан кратко порт;

ако (argc<2) printf(«Usage: easy.exe \ N »);
върне 1;
>

ако (порт!) ФОРМАТ ( «Bad дефинирани \ н ») !;
върне 2;
>

#ifdef ENV_POSIX // в pozikse пренебрегваме сигналите, никога не се знае 🙂
сигнал (SIGPIPE, SIG_IGN);
#else ENV_WINDOWS // проверяваме в Windows vinsoka версия, никога не се знае 🙂
ФОРМАТ ( «тестване дали версията Winsock2 е равна или по-висока от 2,1 ...»);
ако (! WSAStartup (MAKEWORD (2,1), wsaData) = 0) ФОРМАТ ( «провали \ н!»);
върне 1;
>
ФОРМАТ ( «ОК \ н!»);
fflush (стандартния изход);
# endif

dst.sin_family = AF_INET;
dst.sin_addr.s_addr = htonl (INADDR_ANY);
dst.sin_port = htons (порт);
чорап = гнездо (AF_INET, SOCK_STREAM, 0);
ФОРМАТ ( «В очакване на входяща връзка ...»); fflush (стандартния изход);
свързват (чорап, (структура sockaddr *) DST, лен);
слушат (чорап, 1);
Sid = приема (чорап, (структура sockaddr *) DST, лен);
ФОРМАТ ( «направено \ nWaiting за входящи данни ...!»); fflush (стандартния изход);
Получ (SID, Buf, 1,0);
ФОРМАТ ( «получи: [% 2X] ...»); fflush (стандартния изход);
Buf ++;
изпратите (SID, Buf, 1,0);
ФОРМАТ ( «направено \ н!»);

#ifdef ENV_POSIX
близост (чорап);
#else
WSACleanup ();
closesocket (чорап);
# endif

Така че ние въвеждане "направи POSIX", за да
съставяне програма в рамките на UNIX'om или под cygwin'nuyu
среден или "направи прозорци", за да се избегне
зависи от cygwin'a и използвайте само
kernel32.dll, ws2_32.dll и Msvcrt.dll, които са включени в
стандартния пакет на всяко разпределение
Windows. Обърнете внимание на размера на двоичния код:
4096 байта за Cygwin, 4608 байтове за прозорци! 🙂

Този път всичко! Чакай малко следната
статии в близко бъдеще: "Технология
сканиране мрежи: Coketny двигател ".

Покажете тази статия на приятел: