MinGW

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
MinGW - Minimalist GNU for Windows
Розробник(и) MinGW Project
Операційна система Microsoft Windows
Тип компілятор
Ліцензія GNU GPL
Сайт http://www.mingw.org

MinGW(англ. Minimalist GNU for Windows), раніше mingw32,— це набір вільного програмного забезпечення з відкритим кодом для розробки Windows застосунків. Він включає в себе порт GNU Compiler Collection(GCC), GNU Binutils, набір вільно розповсюджуваних Windows файлів заголовків та статичних бібліотек які дозволяють використовувати Windows API, GNU debugger та інші утиліти. MinGW не використовує сторонніх C DLL файлів. Бібліотеки не розповсюджуються під ліцензією GNU's General Public License (GPL), тому не обов'язково надавати вихідний код разом з програмою.

Історія[ред.ред. код]

MinGW спочатку мав назву mingw32(Minimalist GNU for W32), згідно з договором GNU W32 було скороченням для Windows. Числа були відкинуті, щоб не вважалось, що він буде обмеженим для використання лише на 32-бітних системах Перший реліз був створений Коліном Пітерсом(англ. Colin Peters) у 1998 році, у нього входив лише порт GCC з Cygwin. Ян-Яп ван дер Хейден(англ. Jan-Jaap van der Heijden) створив порт GCC для Windows і також додав binutils та make. Пізніше розробкою зайнявся Маміт Хан (англ. Mumit Khan), який додав системні заголовки Windows та інші пакунки. У 2000 році проект переїхав на SourceForge.net, щоб залучити більше підтримки від громади та централізувати розробку. У вересні 2005 року MinGW був обраний проектом місяця на SourceForge.net.

Підтримка мов програмування[ред.ред. код]

Більшість мов, які підтримує GCC, також підтримуються і у MinGW. Це C, C++, Objective-C, Fortran, Ada. MinGW за замовчуванням виконує компонування з бібліотекою компонентів MSVCRT, яка є бібліотекою мови C, створену у 1998 році і тому не підтримує стандарт C99 і C89 не повністю. Відсутність підтримки C99 спричинило багато проблем у портуванні, особливо там де залучені специфікатори перетворень у printf-стилі. Ці проблеми були частково усунені імплементацією бібліотеки libmingwex сумісної з C99. MinGW-w64 усунув ці проблеми та запровадив повну POSIX-сумісну функціональність printf.

Компоненти MinGW[ред.ред. код]

Проект MinGW підтримує і поширює кілька різних ключових компонентів і додаткових пакетів, включаючи різні порти GNU toolchain, такі як GCC і Binutils, переведені в еквіваленті пакети. Ці утиліти можуть бути використані з командного рядка вікна або інтегровані в IDE.

На додаток, компонент MinGW, відомий як MSYS (Minimal SYStem) надає win32-порти легкої Unix-подібної shell оболонки, що включає rxvt і набір інструментів POSIX, достатній для запуску скриптів Autoconf.

Реалізації заголовних файлів Win32 і бібліотек імпорту Win32 для зв'язування під час виконання програми від початку до її завершення мають пермісивну ліцензію, а порти GNU доступні під GNU General Public License. Бінарні збірки повного пакету MSYS та окремих MinGW GNU утиліт доступні для завантаження на сайті MinGW .

Порівняння з Cygwin[ред.ред. код]

MinGW відокремився від Cygwin 1.3.3. Незважаючи на те, що і Cygwin, і MinGW використовуються для портування програмного забезпечення Unix під ОС Windows, вони використовують різний підхід: мета Cygwin — надати повний шар POSIX (подібний до того, який знаходиться в Linux та інших Unix-системах) над ОС Windows, жертвуючи продуктивністю там, де це необхідно для сумісності. Відповідно, такий підхід вимагає від Win32 програм, написаних з Cygwin, запуску поверх копілефтної бібліотеки сумісності, яка повинна поширюватися з програмою, а також з вихідним кодом програми. Метою MinGW є надання нативної функціональності і продуктивності за допомогою прямих викликів Windows API. На відміну від Cygwin, MinGW не потребує DLL — шару сумісності.

Внаслідок того, що MinGW використовує виклики Win32 API, він не може надати повного POSIX API; він не може скомпілювати деякі програми Unix, які можуть бути скомпільовані з Cygwin. Зокрема, це відноситься до додатків, які вимагають такої функціональності POSIX, як fork(), mmap() або ioctl() і допускають запуск в середовищі POSIX . Програми, написані з використанням багатоплатформних бібліотек, таких, як SDL, WxWidgets, Qt або GTK+, як правило, легше компілюються в MinGW, ніж в Cygwin.

Комбінація MinGW і MSYS надає невелике незалежне середовище, яке може бути завантажене на знімні носії, не вимагаючи додавання записів у файли реєстру. Cygwin, надаючи більшу функціональність, є більш складним для встановлення та підтримки.

Також можлива крос-компіляція додатків для Windows з MinGW — GCC під управлінням операційних систем сімейства POSIX . Це означає, що розробнику не потрібно встановлювати Windows, з MSYS, щоб скомпілювати програми, які будуть запускатися під Windows без Cygwin.

MinGW-w64[ред.ред. код]

У зв'язку з тим, що в рамках початкового проекту MinGW не обіцяв, що в його кодову базу будуть вноситися оновлення пов'язані з додаванням деяких нових ключових елементів Win32 API, а також найбільш необхідної підтримки 64-бітної архітектури, був створений проект MinGW-w64. Він є новою чистою реалізацією порту GNU Compiler Collection (GCC) під Microsoft Windows здійсненої спочатку компанією OneVision та переданої у 2008 році в громадське користування (Public Domain). Спочатку він був запропонований на розгляд для інтеграції з оригінальним проектом MinGW, але був відхилений у зв'язку з підозрою на використання не вільного чи патентованого коду. Через велику кількість серйозних причин етичного характеру пов'язаним з ставленням авторів MinGW провідні розробники коду MinGW-w64 вирішили більше не намагатися кооперуватися з проектом MinGW.

MinGW-w64 забезпечує більш повну реалізацію Win32 API тавключає :

  • кращу підтримку стандарту C99
  • кращу підтримку Pthreads (включаючи можливість залучити функціонал стандарту C++11 бібліотеки libstdc++ компілятора GCC)
  • GCC multilib
  • точки входу в програму з підтримкою Unicode (wmain / wWinMain)
  • DDK (з проекту ReactOS)
  • DirectX (з проекту WINE)
  • Підтримка великих файлів
  • підтримка 64-розрядних ОС Windows

Див. також[ред.ред. код]

Джерела[ред.ред. код]