Введение
Свободное программное обеспечение с открытым исходным кодом для разработки приложений в Microsoft Windows.
MinGW ("Минималистичное GNU для Windows"), ранее известная как mingw32, — это свободная и открытая среда разработки программного обеспечения для создания приложений Microsoft Windows. MinGW включает в себя порт GNU Compiler Collection (GCC), GNU Binutils для Windows (ассемблер, компоновщик, менеджер архивов), набор свободно распространяемых заголовочных файлов Windows и статических библиотек импорта, обеспечивающих использование Windows API, собственную для Windows сборку отладчика GNU Debugger проекта GNU и различные утилиты. MinGW не зависит от сторонних DLL-библиотек времени выполнения C, и поскольку библиотеки времени выполнения не распространяются под лицензией GNU General Public License (GPL), распространение исходного кода вместе с созданными программами не требуется, если только в программе не используется библиотека GPL. MinGW может работать как на платформе Microsoft Windows, так и в среде Linux (или другой Unix), или "кросс-нативно" в Cygwin. Хотя программы, созданные с помощью MinGW, являются 32-битными исполняемыми файлами, они могут использоваться как в 32-битных, так и в 64-битных версиях Windows. Разработка проекта MinGW привела к созданию в 2005–2008 годах альтернативного проекта под названием Mingw-w64.
История
MinGW первоначально назывался mingw32 ("Минималистичный GNU для W32"), следуя соглашению GNU, в котором Windows сокращается до "W32". Цифры были удалены, чтобы избежать впечатления, что он будет ограничен созданием 32-битных исполняемых файлов. Колин Петерс создал первый релиз в 1998 году, состоящий исключительно из порта GCC для Cygwin. MSYS (сокращение от "Minimal System") был представлен как система интерпретатора командной строки Bourne shell с целью улучшения взаимодействия с нативным программным обеспечением Windows. В 2018 году, после разногласий с SourceForge относительно управления списками рассылки, MinGW перешёл на OSDN.
Вилка
В 2007 году появился форк оригинального MinGW под названием Mingw w64 для обеспечения поддержки 64-битных систем и новых API. С тех пор он получил широкое распространение и используется повсеместно. MSYS2 ("минимальная система 2") — это дистрибутив программного обеспечения и платформа разработки для Microsoft Windows, основанная на Mingw w64 и Cygwin, предназначенная для упрощения переноса кода из Unix-подобных систем в Windows.
Поддержка языков программирования
Большинство языков, поддерживаемых GCC, также поддерживаются в MinGW. К ним относятся C, C++, Objective C, Objective C++, Fortran и Ada. Используются библиотеки времени выполнения GCC (libstdc++ для C++, libgfortran для Fortran и т. д.). MinGW по умолчанию связывается с библиотекой компонентов операционной системы Windows MSVCRT, которая является библиотекой C, к которой была привязана Visual C++ версии 6.0 (первоначально планировалось использовать CRTDLL), выпущенной в 1998 году и, следовательно, не поддерживающей возможности C99 и даже не все возможности C89. Хотя использование MSVCRT позволяет создавать программы, не требующие установки дополнительных распространяемых компонентов, отсутствие поддержки C99 привело к проблемам при портировании, особенно в отношении спецификаторов формата printf. Эти проблемы были частично решены благодаря реализации библиотеки совместимости с C99, libmingwex, но требуемый объем работы огромен, далек от завершения и, возможно, никогда не будет полностью выполнен. MinGW-w64 решила эти проблемы и предоставляет полностью совместимую с POSIX функциональность printf.
Совместимость ссылок
Двоичные файлы (исполняемые файлы или DLL), сгенерированные разными компиляторами C++ (например, MinGW и Visual Studio), как правило, несовместимы при линковке. Однако, скомпилированный код на C совместим при линковке.
Компоненты
Проект MinGW поддерживает и распространяет ряд различных основных компонентов и дополнительных пакетов, включая различные порты инструментария GNU, такие как GCC и binutils, преобразованные в эквивалентные пакеты. Эти утилиты могут использоваться из командной строки Windows или интегрироваться в IDE. Пакеты можно устанавливать с помощью командной строки через mingw get. MinGW поддерживает динамические библиотеки, именованные в соответствии с соглашениями <name>.lib и <name>.dll, а также статические библиотеки, соответствующие соглашению lib<name>.a, распространенному в Unix и Unix-подобных системах. Кроме того, компонент MinGW, известный как MSYS (минимальная система), предоставляет порты Windows легковесной Unix-подобной оболочки, включая rxvt и набор инструментов POSIX, достаточный для запуска скриптов autoconf, но он не предоставляет компилятор C и файловую систему с учетом регистра. mingwPORTs – это дополнения, предоставляемые пользователями, к программному обеспечению MinGW. Вместо предоставления этих "дополнений" в виде предварительно скомпилированных двоичных пакетов, они поставляются в виде интерактивных скриптов оболочки Bourne, которые проводят конечного пользователя через процесс автоматической загрузки и применения патчей к исходному коду, а затем его компиляции и установки. Пользователи, желающие собрать какое-либо приложение из mingwPORT, должны сначала установить MinGW и MSYS. Реализация системных заголовков Windows и статических библиотек импорта распространяется под разрешительной лицензией, в то время как порты GNU предоставляются под лицензией GNU General Public License. Бинарные загрузки как полного пакета MSYS, так и отдельных утилит MinGW GNU доступны на сайте MinGW.
Сравнение с Cygwin
Хотя Cygwin и MinGW могут использоваться для переноса Unix-программ в Windows, они используют разные подходы: Cygwin стремится предоставить полноценный POSIX-слой, включающий полную реализацию всех основных системных вызовов и библиотек Unix. Совместимость считается более приоритетной, чем производительность. С другой стороны, MinGW ориентирован на простоту и производительность. Поэтому он не предоставляет некоторые POSIX API, которые сложно реализовать с помощью Windows API, такие как fork, mmap и ioctl. Приложения, написанные с использованием кроссплатформенной библиотеки, портированной на MinGW, например SDL, wxWidgets, Qt или GTK, обычно компилируются в MinGW так же легко, как и в Cygwin. Windows-программы, написанные с использованием Cygwin, работают поверх совместимой DLL, распространяемой вместе с программой, если она не скомпилирована статически. В случае динамической компоновки программа также должна предоставлять информацию о том, где можно получить исходный код Cygwin. MinGW не требует слоя совместимости, поскольку программы, основанные на MinGW, компилируются с прямыми вызовами Windows API. Комбинация MinGW и MSYS предоставляет небольшую, самодостаточную среду, которую можно загрузить на съемные носители без внесения записей в реестр или файлов на компьютер. Также возможно перекрестное компилирование Windows-приложений с помощью MinGW GCC в POSIX-системах. Это означает, что разработчикам не требуется установка Windows с MSYS для компиляции программного обеспечения, которое будет работать в Windows с Cygwin или без него.