LibreBay
Статьи про ОС Ubuntu. Языки программирования Си и C++.
Инструменты разработки и многое другое.
суббота, 1 декабря 2018 г.
Установка и настройка Msys2 для программирования на C и С++ в Windows
Есть замечательный проект MSYS2, который предоставляет для Windows пакетный менеджер Pacman, портированный из Arch Linux. С помощью данного пакетного менеджера можно легко устанавливать необходимые компиляторы для программирования, библиотеки для разработчиков, например, GTK+ или Qt5, и различные инструменты разработки.
В данной статье рассмотрим, как установить набор компиляторов GCC для C/C++, и напишем простые программы на этих языках.
Установщик MSYS2 скачивается с сайта http://www.msys2.org/. MSYS2 не может быть установлен на диск с разметкой FAT* и на Windows XP или более старую Windows. Такие компьютеры уже редкость, и ограничения не создают проблем.
Установка и настройка Msys2
Скачиваем и запускаем установщик: для 64-битной системы x86_64 , для 32-битной — i686 .
Нажимаем на «Далее»:
![]() |
| Рис. 1. Начало установки MSYS2 |
Указываем директорию установки. Путь должен быть коротким, содержать только латиницу с цифрами (ASCII). В пути не должно быть знаков ударений, пробелов и символических ссылок. Лучше оставить путь по умолчанию:
![]() |
| Рис. 2. Выбор каталога установки MSYS2 |
Указываем называние папки в меню «Пуск»:
![]() |
| Рис. 3. Выбор папки в меню «Пуск» |
Ждем завершения процесса установки:
![]() |
| Рис. 4. Процесс установки MSYS2 |
Оставляем отмеченной галочку «Запустить Msys2 сейчас» и нажимаем завершить:
![]() |
| Рис. 5. Завершение установки MSYS2 |
В начале необходимо обновить основные системные пакеты MSYS2 и базу данных с информацией об доступных пакетах. Для этого вводим команду:
pacman -Syu
И соглашаемся на обновление, вводом y :
![]() |
| Рис. 6. Обновление баз данных пакетов MSYS2 |
Для завершения установки возможно потребуется вручную закрыть окно с терминалом MSYS2. И заново его запустить через ярлык в меню «Пуск»:
![]() |
| Рис. 7. Требуется перезапуск терминала MSYS2 |
После перезапуска терминала Msys2, выполняем команду для обновления остальных пакетов:
pacman -Su
![]() |
| Рис. 8. Обновление остальных пакетов MSYS2 |
После всех обновлений, пакетный менеджер Pacman готов к применению.
Установка набора компиляторов GCC для C/C++ и легковесной IDE Geany
У пакетного менеджера pacman имеется группа mingw-w64-x86_64-toolchain , в которой собраны компиляторы GCC, стандартные библиотеки и инструменты разработки:
![]() |
| Рис. 9. Установка пакетов из группы mingw-w64-x86_64-toolchain |
В моем случае в группе mingw-w64-x86_64-toolchain имеется 17 пакетов. При необходимости вы можете установить все пакеты. Для программирования на C/C++ достаточно пакета mingw-w64-x86_64-gcc , с которым по зависимостям установятся еще несколько необходимых пакетов:
pacman -S mingw-w64-x86_64-gcc
В качестве редактора кода воспользуемся программой Geany, в которой легко писать простые программы на C/C++, компилировать и запускать.
pacman -S mingw-w64-x86_64-geany
Hello World на C/C++
Запускаем geany в виде фоновой задачи в терминале Msys2:
geany &
Пока работает geany, можно продолжать пользоваться терминалом Msys2, но нельзя его закрывать, так как geany закроется вместе с ним. В одной из следующих статей я расскажу про другой вариант запуска программ, установленных в Msys2.
![]() |
| Рис. 10. IDE Geany |
В Genay создаем новый файл. Можно создать файл с помощью шаблона: Файл -> Создать из шаблона.
Начнем с языка Си и напишем программу, выводящее сообщение Hello, World!:
#include int main(int argc, char **argv)
И сохраним в файл, например, hello.c .
Скомпилировать программу можно:
- нажав на кнопку «Собрать текущий файл» на панели инструментов;
- через главное меню: Сборка -> Build ;
- или с помощью горячей клавиши F9.
Запускается программа, аналогично сборке, также просто:
- нажатием кнопки «выполнить» на панели инструментов;
- через главное меню: Сборка -> Execute ;
- Или с помощью горячей клавиши F5.
![]() |
| Рис. 11. Запуск программы Hello World |
Для языка C++ программа Hello, World! будет:
#include int main(int argc, char **argv)
Сохранив файл, например, как hello.cpp , абсолютно также производим сборку и запускаем.
Заключение
Для простоты программирования на C/C++ в Windows можно использовать Msys2. Так в составе Msys2 идет пакетный менеджер pacman, с помощью которого устанавливаются необходимые компиляторы и инструменты разработки. И установив нужные пакеты за пару десятков минут, можно спокойно программировать далее.
MSYS2: What’s the difference between UCRT 64 and x64?
What is the difference between the regular MINGW64 shell and the UCRT64 shell?
asked Jan 28, 2022 at 17:40
BugHunterUK BugHunterUK
8,426 16 16 gold badges 66 66 silver badges 125 125 bronze badges
1 Answer 1
Please take a look at the following guide: https://www.msys2.org/docs/environments/
The default MINGW32 and MINGW64 environments build binaries using the older MSVCRT library that should be present on all Windows systems.
The MINGW UCRT environments build binaries using the newer UCRT library that is only known to be present on Windows 10. It should produce binaries more compatible with MSVC-compiled binaries, but not with the MSVCRT environment.
MSYS2-Introduction
MSYS2 is software distribution and a building platform for Windows. It provides a Unix-like environment, a command-line interface and a software repository making it easier to install, use, build and port software on Windows. That means Bash, Autotools, Make, Git, GCC, GDB. all easily installable through Pacman, a fully-featured package manager.
It is an independent rewrite of MSys, based on modern Cygwin (POSIX compatibility layer) and MinGW-w64 with the aim of better interoperability with native Windows software.
Both 32-bit and 64-bit variants exist and receive mostly the same level of support.
Subsystems
MSYS2 consists of three subsystems and their corresponding package repositories, msys2 , mingw32 , and mingw64 .
The mingw subsystems provide native Windows programs and are the main focus of the project. These programs are built to co-operate well with other Windows programs, independently of the other subsystems. This part builds on the MinGW-w64 project.
The msys2 subsystem provides an emulated mostly-POSIX-compliant environment for building software, package management, and shell scripting. These programs live in a virtual single-root filesystem (the root is the MSYS2 installation directory). Some effort is made to have the programs work well with native Windows programs, but it’s not seamless. This part builds on the Cygwin project.
Each of the subsystems provides its own native (i.e. target=host) compiler toolchain, in mingw-w64-i686-toolchain , and mingw-w64-x86_64-toolchain . There are also cross compiler toolchains with host=-pc-msys and target=-w64-mingw32 in mingw-w64-cross-toolchain , but these are of limited use because there are no library packages for them.
Shells
Every subsystem has an associated «shell», which is essentially a set of environment variables that allow the subsystems to co-operate properly. These shells can be invoked using launchers in the MSYS2 installation directory or using the shortcuts in the Windows Start menu. The launchers set the MSYSTEM variable and open a terminal window (mintty) with a proper shell (bash). Bash in turn sources /etc/profile which sets the environment depending on the value of MSYSTEM .
Without the correct environment, various things may and will (sometimes silently) break. The exception is using mingw subsystems from pure Windows, which shouldn’t require any special environment apart from an entry in PATH . Do not set MSYSTEM outside of the shells, because that will also break things.
PATH
For optimal usage, MSYS2 automatically strips your PATH environment variable, essentially only leaving C:\Windows\System32 and few others. This behavior can be controlled by setting the variable MSYS2_PATH_TYPE before starting a shell or using a correct argument when executing the launcher script. Beware that mixing in programs from other MSYS2 installations, Cygwin installations, compiler toolchains or even various other programs is not supported and will probably break things in unexpected ways. Do not have these things in PATH when running MSYS2 unless you know what you’re doing.
Use msys2 shell for running pacman , makepkg , makepkg-mingw and for building POSIX-dependent software that you don’t intend to distribute. Use mingw shells for building native Windows software and other tasks.
Packages
MSYS2 uses a port of pacman (known from Arch Linux) for package management. This brings many powerful features such as dependency resolution and simple complete system upgrades, as well as providing the build system ( makepkg-mingw ) — which is used to make these packages.
Packages for msys2 are built from recipes in the msys2-packages Git repository, packages for mingw are in mingw-packages . Official repositories are on GitHub under user the msys2 organization. When looking for msys2 packages or deciding to create a new one, keep in mind that MSYS2 doesn’t intend to compete with Cygwin or duplicate their efforts. The set of things that belong to the msys2 subsystem is pretty small and needs to stay that way.
You might be wondering why there appears to be only one architecture variant of the msys2 repository. In reality there are two, but the decision about which one to use is made at the time you install it, depending on whether you installed the i686 or the x86_64 version. It is possible to install both if you wish. Actually, you can have multiple installations of each on your computer, but you should never run programs from two different MSYS2 XXbit variants at the same time due to DLL address space and version conflicts. Also note that the uninstaller will only remove the most recently installed one of each variant).
File system
The virtual filesystem contains:
| Paths | Contents |
|---|---|
| /bin , /dev , /home , /opt , /proc , /tmp , /var | essential POSIX stuff |
| /etc , /usr | msys2 subsystem |
| /mingw32 , /mingw64 | mingw subsystems |
| /c , /d , . | mount points for Windows drives |
| /*.xml , /maintenancetool.* , InstallationLog.txt | (un)installer |
| /autorebase.bat , /msys2_shell.cmd , /msys2.ico | shell entry points |
Установка и использование MSYS2 и Mingw-w64 под Windows
Текст был первоначально написан для сайта “Железные призраки прошлого”, но затем невозбранно перенесен на эту Wiki и теперь живет тут.
Введение
В целях ретрокомпьютинга иногда возникает желание “что-нибудь скомпилировать под 32-битный Windows” с минимальными затратами. Ага, ага. Вот и у меня однажды возникала такая же ситуация. Когда-то давно я пользовался компилятором Mingw и оболочкой MSYS, так что я попробовал снова их найти и установить. Оказалось, что там “всё не так, как раньше”. Вобщем, сейчас ситуация такая: “простой” MinGW и “классический” MSYS обновляться перестали и они зачахли где-то в районе 2015 года.
ПРИМЕЧАНИЕ: Надеюсь, читатели понимают разницу между Cygwin и Mingw. Кратко: Cygwin пытается воссоздать наиболее полную “среду” UNIX/POSIX на Windows, со всеми её фишками, типа fork(), особенностями файловой системы, сигналами, псевдотерминалами и т.д. в то время как Mingw — это (изначально) просто перенос компилятора GCC на Windows, без вот этого всего. А MSYS — это “оболочка”, то есть набор утилит для сборки, главные из которых — пожалуй make и bash . Подробности.
Продолжим. Оказывается, нынче текущая версия MSYS — это MSYS2. Это такой странный гибрид из Cygwin и старого MSYS. Что там нового ? Подобно Cygwin он делает замену путей в стиле UNIX, маскирует расширение *.exe, поддерживает псевдотерминалы, UNIX-сигналы и еще много чего. Это, с одной стороны, облегчает перенос и сборку всяких нетривиальных UNIX программ, а с другой стороны, теперь все msys-программы, в отличии от старого MSYS тянут за собой DLL-ку: msys-2.0.dll .
А компилятор с тулзами нынче называется Mingw-w64. Это вовсе не значит, что он 64-битный, это просто такое имя. Он существует во всех возможных комбинациях: 32-битный (т.е. работающий на 32-бит Windows) для билда 32-битных программ, 64-битный для билдинга 64-битных программ, и все промежуточные варианты, то есть 32-битный для построения 64-битных и наоборот, 64-битный для 32-бит.
Вы еще не запутались ? Держитесь, это только начало… 🙂
MSYS2 теперь поддерживает несколько видов терминалов (т.е. программ для отрисовки “текстового” экрана) — один новомодный Mintty, утащенный с того же Cygwin, который типа лучше поддерживает механизмы терминала UNIX, но опять же, тянет за собой всякое… Другой — почти классическая Windows-консоль почти без обвеса (ConEmu) но зато с закладками (Tabs). На самом деле, есть еще третий вид терминала (defterm), но он не совсем поддерживается… Подробности. Чтобы запустить MSYS2 c нужным терминалом, надо стартовый msys2_shell.cmd запустить с нужным ключиком. По-умолчанию запускается Mintty.
Да, сама по себе MSYS2 тоже бывает 32-битная и 64-битная. К счастью на сайте MSYS2 есть нужный инсталлятор, ( msys2-x86_64 или msys2-i686 ) — это такой огромный файл .EXE, у которого внутри целый архив соответствующих программ. MSYS2 64-битная по умолчанию ставится в C:\msys64 , а 32-битная — в C:\msys32 . Можете попробовать поменять каталог, но тогда никто ничего не гарантирует… Но вот беда — инсталлятор старый и первое, что нужно сделать — это обновиться: pacman -Syuu Этот pacman первым делом обновит сам себя, так что ОБЯЗАТЕЛЬНО надо прибить всё окно! НЕ выходя. И запустить pacman -Syuu еще раз.
Вы еще тут ? Я еще держусь, но с трудом… 🙂
ПРИМЕЧАНИЕ: С мая 2020 32-битную MSYS2 стали потихоньку сворачивать. Она еще поддерживается, но пакеты для нее выходят крайне редко, а начальный инсталлятор для 32-битной версии MSYS2 убрали с главной стравницы сюда. Следите за новостями. Таким образом, даже для сборки 32-битных приложений нужно использовать 64-битную ОС и 64-битную MSYS2 . Этакая кросс-система. Увы.
Компилятор и его запуск
Ну вот например поставили мы MSYS2 (без разницы, 64-битную или 32-битную) и обновились. Давайте попробуем, наконец, скомпилить HelloWorld под Windows консоль. А вот хрен вам! Оказывается, теперь есть НЕ ОДИН компилятор, точнее не одна build-система, а несколько. Из них первая — для компиляции программ под САМУ MSYS2 (вы же помните, что она тащит за собой теперь как минимум DLL msys-2.0.dll и работает с UNIX-путями), а остальные build-системы — для обычных “голых” Windows программ, как в старом добром Mingw. Компилятор и там и там — знакомый Mingw-w64, но по-разному настроенный. Да, не забываем что всё это может существовать в 32-бит, 64-бит и все комбинации между ними! Так что на самом деле у нас бывает (как минимум!) ТРИ build системы: msys2 , mingw32 и mingw64 . Все три ставить не обязательно. Например, если нам надо только собирать “чистые” 32-битные программы на 64-битной винде то можно поставить 64-битную MSYS2 без её собственных компиляторов и build-систему mingw32 . (как понимаете, на самом деле это будет 64-битный компилятор по имени Mingw-w64 работающий под 64-битной MSYS2 и который умеет делать 32-битные “чистые” программы под Windows. Надеюсь крыша у вас еще не поехала…)
Итак, давайте сначала установим тулзы для сборки: pacman —needed -S base-devel Это установит всякие полезные для сборки утилиты в нашу MSYS2 (любой битности). Установщик pacman знает про себя, 32-бита он или 64, берёт правильные пакеты и ставит в правильный каталог. Репозиторий для любой MSYS2 всегда называется просто msys2 🙂 Компилятор для самой MSYS2 в base-devel не входит, да он нам и не нужен.

А вот теперь аккуратнее! Чтобы установить build-систему, которая делает 32-бит программы надо установить группу mingw-w64-i686-toolchain . То есть компилятор называется Mingw-w64 (помним, что это просто название такое). Ставится он на нашу текущую MSYS2 и будет генерить 32-битные программы (хвостик -i686 ). Делаем pacman -S —needed mingw-w64-i686-toolchain . Пакеты компилятора скачаются (из репозитория mingw32 ) и будут установлены. Вот только никакого компилятора не появится!
Чтобы воспользоваться нужным компилятором, надо запустить нашу MSYS2 особым образом. Если вы откроете кнопку Пуск –> Все программы –> “MSYS2 32bit” то увидите три разных “среды”: “MSYS2 MSYS”, “MSYS2 MinGW 32bit” и “MSYS2 MinGW 64bit” (а в новых добавились еще clang и ucrt). По крайней мере, на Windows7 так. На Windows10 эти программы расположены в главном меню под буквой “M”. Вот эти три разные режима запуска и делают всю магию. Альтернативный путь — запускать напрямую программы из папки C:\msys64\……exe или скрипт C:\msys64\msys2_shell.cmd с ключами -mingw32 , -mingw64 или -msys2 . Это точно то же самое.
Давайте запустим “MSYS2 MinGW 32bit”. Вот теперь у нас доступен компилятор gcc, причем он полностью настроен, с указанием папки include , линкера и пути к библиотекам. Ура!
Пишем программы
Создадим Си-шный файлик hello.c со стандартным библиотечным вызовом printf():











