MinGW
MinGW — это программный набор инструментов для создания дополнений, ранее известный как mingw32. С помощью ПО можно разрабатывать приложения под Виндовс. Программа состоит из компилятора порта ССС (GNUCompilerCollection) и набора библиотек под свободной лицензией для Виндовс API. На этой странице можно скачать последнюю версию МinGW.
Лицензия | Бесплатная |
ОС | Windows 7 и выше |
Язык интерфейса | Русский, английский |
Разработка | Colin Peters |
Разновидность программы | Для компиляции |
Обзор программы
Команда проекта предоставляет пользователям следующие компоненты:
- доппакеты — порты GNUtoolchain, которые управляются из командной строки Виндовс или интегрируются в IDE;
- MSYS (MinimalSYStem) — порты win32, представляющие собой лёгкую оболочку Unix с rxvt и инструментами POSIX для работы со скриптами autoconf;
- заголовочные файлы Win32 и одноименные для библиотек импорта.
Для установки ПО первым шагом надо бесплатно скачать МinGW на ПК, выбрав путь без пробелов. Рекомендуется назначить корень диска, например С:\ХХХ\MinGW. Ярлык в пусковом меню создавайте по желанию или отмените операцию, выставив галочку рядом с Don’tcreate a StartMenu folder.
Вам понадобятся пакеты:
- MSYS BasicSystem;
- C Compiler;
- MinGW DeveloperToolKit;
- C++Compiler.
После подтверждения установки появится окно с отображением прогресса скачивания. Нужно следить, чтобы не было ошибок — при недоступности тех или иных ресурсов установку придётся повторить позже.
Теперь добавьте путь до директории C:\ХХХ\MinGW\bin в переменную PATH:
- кликните правой клавишей мышки ярлык Компьютер;
- нажмите «Свойства»;
- далее «Доппараметры системы» и «Переменные среды»;
- найдите Path, дважды нажмите, чтобы вызвать окно редактирования.
Добавьте путь до директории \bin, в нашем условном случае это будет C:\ХХХ\MinGW\bin с разделением путей через «;». На этом этапе завершается установка MinGW и оболочки. Для дополнительных пакетов рекомендуется назначить ярлычки.
Используйте набор команд mingw-get install+msys-man/msys-wget/msys-zip/msys-unzip/msys-bzip2/msys-perl, где базовая команда mingw-get install относится к аналогу вида apt-get install под дистрибутивы Linux.
Перечень других дополнительных пакетов вызывается mingw-get show, удаление ненужного пакета mingw-get remove+удаляемые файлы. Для удобной работы рекомендуются утилиты консольного редактора vim или более привычного многим юзерам Notepad++. Архивацию и распаковку проводите с 7-zip.
Подробную инструкцию вы можете получить из справочного раздела о программе или посетив официальный сайт МinGW.
Cygwin или MinGW? Собираем программы для Windows без Windows
Большая часть разработчиков свободного софта работает на Linux или Mac, а вот поддержка Windows обычно реализована по остаточному принципу. Заработало — хорошо, не заработало — пускай портирует тот, кому это нужно. Я покажу, как создавать нативные исполняемые файлы для Windows, не имея этой системы под рукой.
В общем-то, даже в Microsoft уже признали проблему и сделали WSL (Windows Subsystem for Linux), чтобы запускать те приложения, у которых нативных версий под Windows нет. Однако если ты хочешь сделать свою программу доступной для широкой аудитории, то WSL вовсе не панацея, поскольку у среднего пользователя эта система вряд ли установлена и у нативных приложений возможностей для интеграции с Windows все равно больше.
Во многих случаях камень преткновения — не сам код программы, а система сборки. Если ты используешь кросс-платформенные библиотеки и не вызываешь специфичные функции POSIX, портирование может вообще не требоваться. Главное — собрать исполняемые файлы.
Сборка-то обычно и зависит от окружения POSIX. Если ты используешь GNU autotools, то скрипт ./configure у тебя на Bourne shell. CMake и ряд других систем сборки умеют генерировать скрипты под целевую ОС, но остается последняя «маленькая» проблема — нужна проприетарная и не бесплатная ОС. Есть вариант переложить задачу ее развертывания и лицензирования на кого-то другого и обратиться к сервису вроде Appveyor. Но можно вместо этого воспользоваться способностью GCC к кросс-компиляции и собирать программы на хосте с Linux (или macOS).
GNU и Windows
Для сборки программ с помощью GNU toolchain на Windows часто используют два проекта: Cygwin и MinGW + MSYS. У них схожие цели, но разные детали реализации. Давай разбираться.
Cygwin
Cygwin — самая полная реализация окружения GNU для Windows. Он предоставляет большую часть POSIX API в виде библиотеки, что позволяет собирать программы из UNIX без портирования, если только им не требуется семантика UNIX. Яркий пример — демоны, им нужен fork() и сигналы, которых нет в Windows, да и службы Windows устроены совсем иначе.
Кроме библиотеки, дистрибутив содержит набор классических команд UNIX и терминал. Реализации команд используют эту библиотеку и поддерживают некоторые возможности UNIX, такие как регистрозависимые имена файлов.
Целевой способ использования: если нет желания или возможности портировать программу на Windows или использовать только платформенно независимые API, ее можно собрать «под Cygwin», ценой зависимости от cygwin1.dll и относительной изоляции от всей остальной системы.
Многие люди ставили и продолжают ставить окружение Cygwin, чтобы иметь возможность использовать классические команды UNIX на Windows. Некоторые разработчики также включают Cygwin в инструкции для сборки своих программ под Windows, хотя сама программа не связывается с cygwin1.dll . Для этой цели может быть более правильно использовать MSYS.
MinGW и MSYS
Если цель Cygwin — сделать возможной сборку немодифицированных приложений на Windows ценой внешней зависимости, то цель MinGW + MSYS — производить приложения без внешних зависимостей.
MinGW и MSYS — это независимые пакеты, но их часто путают и смешивают друг с другом (а часто путают и с Cygwin). Можно сказать, что MinGW — это эквивалент GCC и binutils, а MSYS — расширенный эквивалент coreutils.
Начнем с MSYS. MSYS — это более «нативная» и легковесная альтернатива Cygwin. Этот пакет включает библиотеку с реализациями функций POSIX, но она предназначена для внутреннего пользования, и авторы категорически не рекомендуют связывать с ней свои приложения.
Библиотека MSYS не реализует UNIX поверх Windows, а следует соглашениям Windows — к примеру, сознательно не учитывает регистр букв в путях к файлам. Главная цель MSYS — предоставить нужные для скриптов сборки программы вроде Bourne shell, make и прочее, что обычно требуется для autotools.
MinGW содержит версии GCC и binutils (ассемблер as, компоновщик ld и так далее), которые производят исполняемые файлы для Windows в формате PE/COFF. Здесь мы и подходим к ключевому моменту: MinGW, как и все остальные части GNU toolchain, такой же платформенно независимый проект.
Кросс-компиляция в GNU toolchain уже давно обычное дело, и в GCC целевая платформа и хост независимы друг от друга. Можно запускать GCC на Linux для x86 и собирать программы для Linux на ARM, или наоборот. Совпадать не обязаны не только рабочая и целевая архитектуры процессора. Точно так же не обязаны совпадать даже ОС и формат исполняемого файла.
Ставим MinGW
Авторы многих дистрибутивов GNU/Linux уже постарались за нас, так что многие кросс-версии GCC, включая MinGW, можно поставить из репозиториев.
Например, в Fedora:
$ sudo dnf install mingw32-gcc $ sudo dnf install mingw64-gcc
$ sudo apt-get install gcc-mingw-w64-i686 $ sudo apt-get install gcc-mingw-w64-x86-64
Если ты используешь macOS, то MinGW можно поставить из Homebrew: brew install mingw-w64 .
INFO
MinGW-w64, несмотря на название, поддерживает и Win32, и Win64. Это форк MinGW, который создали в первую очередь для реализации недостающей в оригинальном проекте поддержки Win64, отсюда и название.
В Fedora также присутствует ряд готовых кросс-версий популярных библиотек, например mingw32-qt .
Hello World
Для демонстрации соберем традиционный hello world. У кросс-версий GCC всегда есть префикс, для MinGW используются префиксы i686-w64-mingw32 и x86_64-w64-mingw32 .
$ cat ./hello.c #include int main(void) < printf("hello world\n"); >$ i686-w64-mingw32-gcc -o hello32 ./hello.c $ file ./hello32.exe ./hello32.exe: PE32 executable (console) Intel 80386, for MS Windows
Тестирование кросс-компилированных программ для других архитектур — непростая задача, но, поскольку наша целевая платформа — Windows на x86, мы легко можем протестировать их в Wine:
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Установка MinGW/MSYS и настройка окружения для разработчика
Наверное, многие разработчики сталкивались с проблемой выбора или создания окружения для программирования. На мой взгляд, бесплатное окружение на основе порта компилятора gcc (MinGW) и какая-нибудь IDE, совместимая с ним — наиболее приемлемый выбор.
В этой статье я рассмотрю установку компилятора, его интеграцию с интегрированной средой разработки, его настройку, установку и компиляцию сторонних библиотек. Рассмотрю некоторые полезные утилиты для облегчения сборки исходного кода и системы контроля версий файлов.
Статья со временем будет обновляться и дополняться.
Данный мануал создавался с целью быть пособием и заметкой для разработчиков, помочь им собрать и настроить собственное окружение для разработки нативных приложений в семействе OS Windows.
Содержание:
1. Установка и настройка тулчейна MinGW/MSYS и дополнительного ПО
Давайте разберемся, что такое MinGW, а что такое MSYS и для чего они нужны.
MinGW — сокращение от «Minimalist GNU for Windows», по своей сути MinGW является небольшой и лаконичной средой разработки нативных приложений для семейства OS Microsoft Windows.
MinGW предоставляет полный набор Open Source инструментов для программирования, который подходит для разработки нативного Windows приложения, которое не будет зависеть от C-Runtime библиотек каких-либо третьих сторон.
MinGW поддерживает идею минимализма, поэтому он никогда не будет полностью поддерживать среду исполнения POSIX, для развертывания POSIX приложений на Windows, для их полной поддержки существует Cygwin. В первую очередь MinGW предназначен для использования разработчиками, которые привыкли работать с компилятором gcc.
MinGW включает в себя:
- Порт GNU Compiler Collection (GCC), который включает в себя компиляторы таких языков, как: C, C++, ADA и Fortran.
- Порт GNU Binutils для Windows (as, ld, ar)
- Консольный установщик (mingw-get) для MinGW и MSYS
- Графический установщик (mingw-get-inst)
MSYS — сокращение от «Minimal SYStem», это порт командной оболочки Bourne Shell (sh) для Windows. Он предлагается в качестве альтернативы «cmd.exe» от Microsoft’а. Оболочка хорошо подходит для портирования существующих приложений и библиотек, которые есть в *nix системах и включает в себя небольшой выбор портов инструментов Unix, облегчающих задачу портирования.
Комбинация MinGW и MSYS предоставляет разработчикам небольшую независимую среду, которая может быть легко загружена на съемные носители, не требуя добавления записей в файлы реестра.
Полезные ссылки:
Официальный сайт MinGW
Вики по MinGW [ENG]
Жмем «Next» и соглашаемся с лицензией, снова «Next», и теперь выбираем путь для установки:
Рекомендуется выбирать путь без пробелов, лучше всего устанавливать MinGW в корень диска, т.е в «C:\MinGW». Я выбрал «C:\Qt\MinGW», так удобнее будет подключить MinGW к IDE QtCreator. Если вы планируете дальше интегрировать свой тулчейн в какую-нибуть IDE, сделайте аналогично и нажмите «Next». Необходимость наличия группы ярлыков в меню «Пуск» — по вашему желанию. Но можно не создавать (отметив галочкой «Don’t create a Start Menu folder) и нажать «Next».
Выбираем следующие пакеты:
- C Compiler
- C++ Compiler
- MSYS Basic System
- MinGW Developer ToolKit
затем подтверждаем установку выбранных пакетов кнопкой «Install».
Откроется консольное окно, в котором будет отображаться процесс скачивания и установки пакетов. Проследите, чтобы процесс выполнялся без ошибок (например, если будут недоступны сервера репозитория, необходимо повторить попытку установки с этими же параметрами позже) и дождитесь завершения процесса.
Теперь необходимо добавить в переменную окружения PATH путь до директории «C:\Qt\MinGW\bin». Делается это следующим образом (для Win7, для остальных систем по аналогии):
1.1.1.1. Нажмите правой клавишей мышки на ярлык «Компьютер» и кликните на пункт меню «Свойства».
1.1.1.2. Кликните слева на пункт «Дополнительные параметры системы», в появившемся окне нажмите кнопку «Переменные среды».
1.1.1.3. В верхнем списке переменных найдите переменную «Path», кликните на нее два раза для редактирования.
1.1.1.4. Добавьте путь до директории «\bin». В моем случае это будет «C:\Qt\MinGW\bin», разделение путей выполняется символом «;».
1.1.1.5. Подробнее можно прочесть здесь.
Все, тулчейн MinGW и его оболочка MSYS установлены. Теперь можно перейти к установке дополнительных программ, которые помогут облегчить нам жизнь.
1.1.2. Установка дополнительных пакетов и полезные команды и утилиты.
Сразу после установки MinGW и MSYS будет полезно установить некоторые пакеты.
Для этого запускаем файл «C:\Qt\MinGW\msys\1.0\msys.bat», для которого, кстати, полезно будет создать ярлык, и набираем там такие команды (переход на новую строку аналогичен нажатию клавиши «Enter»):
mingw — get install msys — man
mingw — get install msys — wget
mingw — get install msys — zip
mingw — get install msys — unzip
mingw — get install msys — bzip2
mingw — get install msys — perl
Команда «mingw-get install» аналогична популярной на разных Linux-дистрибутивах, наверное, знакомой многим, команде «apt-get install». Обе эти команды скачают и установят вам нужный пакет из репозиториев.
Список доступных пакетов для установки можно посмотреть по команде «mingw-get show», для лучшего восприятия его можно отсортировать следующим образом:
mingw — get show | grep «Package: »
Удалить установленный пакет можно командой «mingw-get remove выбранный_вами_пакет»
Обновить пакет можно командой «mingw-get upgrade выбранный_вами_пакет», команда «mingw-get upgrade» обновит все пакеты вашего тулчейна полностью.
На этом базовая настройка тулчейна закончена, можно приступить к сборке/переносу проектов или более тонкой настройке.
1.1.3. Какие утилиты будет полезно использовать вместе с MinGW?
Для редактирования исходников и других файлов можно использовать консольный редактор «vim», который идет в комплекте с MinGW’ом.
Но если вы привыкли к оконному интерфейсу, воспользуйтесь отличнейшим редактором — Notepad++.
Для распаковки содержимого архивов можно использовать консольные команды или архиваторы с GUI, такие как WinRar, например.
Лично я рекомендую использовать 7-zip.
1.1.4. Что можно почитать?
Список литературы можно найти здесь: http://www.linuxcenter.ru/
Основы работы в консоли
Интерпретатор командного языка shell
Самые необходимые команды *nix для обработки ввода/вывода
Совет по поводу определения fstab
Еще бы, работать в такой консоли достаточно неудобно, хотя бы из-за отсутствия нормального копипаста.
Но к счастью, есть такой проект как ConEmu от Maximus5‘а, являющийся продвинутым форком ConEmu by Zoin.
ConEmu — это очень удобный и симпатичный терминал, поддерживающий вкладки. Его подробнейшее описание, написанное самим автором этой программы, можно прочитать здесь. Самым главным преимуществом для меня является нормальный копипаст. Здесь он реализован просто замечательно, с помощью левой кнопки мышки или сочетания «Alt + Левая кнопка мышки» можно выделить блок или строку в консоли соответственно. После выделения строка сразу автоматом скопируется в буфер. Сочетание клавиш «Ctrl + V» или клик левой клавишей мышки вставляет первую строку из буфера, а «Shift + Insert + Enter» вставляет сразу все строки.
Для связки ConEmu и MinGW, нам необходимо скачать специально подготовленные пакеты ConEmu для MinGW. Установка весьма проста и тривиальна — нужно лишь распаковать «-mingw32» и «-mingw64» пакеты в корневую папку компилятора (в моем случае это «C:\Qt\MinGW»).
Если вы не хотите настраивать консоль, можете скачать уже настроенную мной:
Скачать ConEmu.zip, 1.7 MB
Выглядит она следующим образом (изображение кликабельно):
И устанавливается абсолютно аналогично.
На мой взгляд панелька в стиле терминала Quake, выезжающая сверху экрана по нажатию «Ctrl + ~», не только эффектно выглядит, но и очень удобна в использовании.
При желании, конечно, можно все очень и очень гибко настраивать под себя, программа ConEmu имеет множество настроек и совместима со всеми последними OS семейства Windows.
При подготовке материала использовались источники:
https://mingw.ru/
https://xakep.ru/2020/02/07/windows-cygwin-mingw/