Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
msys2_mingw [2022/09/28 10:57] – [Консольные полноэкранные приложения] admin | msys2_mingw [2023/11/13 13:37] – admin |
---|
==== Введение ==== | ==== Введение ==== |
| |
В целях ретрокомпьютинга иногда возникает желание "что-нибудь скомпилировать под 32-битный Windows". Ага, ага. Вот и у меня однажды возникала | В целях ретрокомпьютинга иногда возникает желание "что-нибудь скомпилировать под 32-битный Windows" с минимальными затратами. Ага, ага. Вот и у меня однажды возникала |
такая же ситуация. Когда-то давно мне довелось пользоваться компилятором **[[https://ru.wikipedia.org/wiki/MinGW|Mingw]]** и оболочкой **MSYS**, так что я попробовал снова их найти и установить. Оказалось, что там "всё не так, как раньше". | такая же ситуация. Когда-то давно я пользовался компилятором **[[https://ru.wikipedia.org/wiki/MinGW|Mingw]]** и оболочкой **MSYS**, так что я попробовал снова их найти и установить. Оказалось, что там "всё не так, как раньше". Вобщем, сейчас ситуация такая: "простой" MinGW и "классический" MSYS обновляться перестали |
Вобщем, сейчас ситуация такая: "простой" MinGW и "классический" MSYS обновляться перестали | |
и они зачахли где-то в районе 2015 года. | и они зачахли где-то в районе 2015 года. |
| |
**ПРИМЕЧАНИЕ:** Надеюсь, читатели понимают разницу между **[[https://ru.wikipedia.org/wiki/Cygwin|Cygwin]]** и **[[https://ru.wikipedia.org/wiki/MinGW|Mingw]]**. Кратко: **Cygwin** пытается воссоздать наиболее полную "среду" UNIX/POSIX на Windows, со всеми её фишками, типа //fork()//, особенностями файловой системы, сигналами, псевдотерминалами и т.д. в то время как **Mingw** - это (изначально) просто перенос компилятора **GCC** на Windows, без вот этого всего. А **MSYS** - это "оболочка", то есть набор утилит __для сборки__, главные из которых - пожалуй ''make'' и ''bash''. [[https://www.msys2.org/wiki/How-does-MSYS2-differ-from-Cygwin/|Подробности]]. | **ПРИМЕЧАНИЕ:** Надеюсь, читатели понимают разницу между **[[https://ru.wikipedia.org/wiki/Cygwin|Cygwin]]** и **[[https://ru.wikipedia.org/wiki/MinGW|Mingw]]**. Кратко: **Cygwin** пытается воссоздать наиболее полную "среду" UNIX/POSIX на Windows, со всеми её фишками, типа //fork()//, особенностями файловой системы, сигналами, псевдотерминалами и т.д. в то время как **Mingw** - это (изначально) просто перенос компилятора **GCC** на Windows, без вот этого всего. А **MSYS** - это "оболочка", то есть набор утилит __для сборки__, главные из которых - пожалуй ''make'' и ''bash''. [[https://www.msys2.org/wiki/How-does-MSYS2-differ-from-Cygwin/|Подробности]]. |
| |
Оказывается, нынче текущая версия **MSYS** - это **[[https://www.msys2.org/|MSYS2]]**. Это такой странный гибрид | Продолжим. Оказывается, нынче текущая версия **MSYS** - это **[[https://www.msys2.org/|MSYS2]]**. Это такой странный гибрид |
из **Cygwin** и старого **MSYS**. | из **Cygwin** и старого **MSYS**. Что там нового ? Подобно **Cygwin** он делает замену путей в стиле UNIX, маскирует расширение *.exe, |
Подобно **Cygwin** он делает замену путей в стиле UNIX, маскирует расширение *.exe, | |
поддерживает псевдотерминалы, UNIX-сигналы и еще много чего. Это, с одной стороны, облегчает перенос и сборку | поддерживает псевдотерминалы, UNIX-сигналы и еще много чего. Это, с одной стороны, облегчает перенос и сборку |
всяких нетривиальных UNIX программ, а с другой стороны, теперь все msys-программы, в отличии от старого **MSYS** тянут за собой | всяких нетривиальных UNIX программ, а с другой стороны, теперь все msys-программы, в отличии от старого **MSYS** тянут за собой |
ключиком. По-умолчанию запускается **Mintty**. | ключиком. По-умолчанию запускается **Mintty**. |
| |
Да, сама **MSYS2** тоже бывает 32-битная и 64-битная. К счастью на сайте **MSYS2** [[https://repo.msys2.org/distrib/|есть]] нужный инсталлятор, | Да, сама по себе **MSYS2** тоже бывает 32-битная и 64-битная. К счастью на сайте **MSYS2** [[https://repo.msys2.org/distrib/|есть]] нужный инсталлятор, |
(''msys2-x86_64'' или ''msys2-i686'') - это такой огромный файл .EXE, у которого внутри целый архив соответствующих программ. | (''msys2-x86_64'' или ''msys2-i686'') - это такой огромный файл .EXE, у которого внутри целый архив соответствующих программ. |
**MSYS2** 64-битная по умолчанию ставится в ''C:\msys64'', а 32-битная - в ''C:\msys32''. Можете попробовать поменять каталог, | **MSYS2** 64-битная по умолчанию ставится в ''C:\msys64'', а 32-битная - в ''C:\msys32''. Можете попробовать поменять каталог, |
Вы еще тут ? Я еще держусь, но с трудом... :) | Вы еще тут ? Я еще держусь, но с трудом... :) |
| |
**ПРИМЕЧАНИЕ:** С мая 2020 32-битную **MSYS2** стали [[https://www.msys2.org/news/#2020-05-17-32-bit-msys2-no-longer-actively-supported|потихоньку сворачивать]]. Она еще поддерживается, но пакеты для нее выходят крайне редко, а начальный инсталлятор для 32-битной версии **MSYS2** убрали с главной стравницы [[http://repo.msys2.org/distrib/i686/|сюда]]. Следите за [[https://www.msys2.org/news/|новостями]]. Таким образом, даже для сборки 32-битных приложений нужно использовать 64-битную ОС и 64-битную ''MSYS2''. Увы. | **ПРИМЕЧАНИЕ:** С мая 2020 32-битную **MSYS2** стали [[https://www.msys2.org/news/#2020-05-17-32-bit-msys2-no-longer-actively-supported|потихоньку сворачивать]]. Она еще поддерживается, но пакеты для нее выходят крайне редко, а начальный инсталлятор для 32-битной версии **MSYS2** убрали с главной стравницы [[http://repo.msys2.org/distrib/i686/|сюда]]. Следите за [[https://www.msys2.org/news/|новостями]]. Таким образом, даже для сборки 32-битных приложений нужно использовать 64-битную ОС и 64-битную ''MSYS2''. Этакая кросс-система. Увы. |
| |
| |
- Терминал TTY. У терминала в UNIX имеется множество функций и атрибутов. Например, имеется API управления дисциплиной линии (всякие RTS/CTS), различные режимы ввода (с эхо или без) [[https://man7.org/linux/man-pages/man3/termios.3.html|termio/termios]], возможность переключения raw/cooked режимов, а также специальные функции управления заданиями (job control, например обработка CTRL-C, CTRL-Z) и т.д. Кроме того, у каждой разновидности терминала имеется база, описывающая его систему команд, в основном через ESC-последовательности (termcap/terminfo). | - Терминал TTY. У терминала в UNIX имеется множество функций и атрибутов. Например, имеется API управления дисциплиной линии (всякие RTS/CTS), различные режимы ввода (с эхо или без) [[https://man7.org/linux/man-pages/man3/termios.3.html|termio/termios]], возможность переключения raw/cooked режимов, а также специальные функции управления заданиями (job control, например обработка CTRL-C, CTRL-Z) и т.д. Кроме того, у каждой разновидности терминала имеется база, описывающая его систему команд, в основном через ESC-последовательности (termcap/terminfo). |
| |
На Windows совершенно другая идеология управления консолью (WinAPI Console). (Пример: [[https://eax.me/winapi-console-app/|Пишем простое консольное приложение на чистом WinAPI]]). Поэтому и возникает необходимость в эмуляторе терминала и промежуточной библиотеке типа ''msys-2.0.dll'' или ''cygwin.dll'', которая имитирует (с разной степенью успешности) поведение UNIX системы. Тем или иным способом в оболочках типа **MSYS2** и **CYGWIN** эта проблема решена. Но с "автономными" консольными Windows приложениями неколько сложнее. На это накладывается взаимодействие c ''MSVCRT.DLL'', которая имитирует файловые потоки STDIN/STDOUT/STDERR и также вносит свои особенности. | На Windows - совершенно другая идеология управления консолью (WinAPI Console). (Пример: [[https://eax.me/winapi-console-app/|Пишем простое консольное приложение на чистом WinAPI]]). Поэтому и возникает необходимость в эмуляторе терминала и промежуточной библиотеке типа ''msys-2.0.dll'' или ''cygwin.dll'', которая имитирует (с разной степенью успешности) поведение UNIX системы. Тем или иным способом в оболочках типа **MSYS2** и **CYGWIN** эта проблема решена. Но с "автономными" консольными Windows приложениями неколько сложнее. На это накладывается взаимодействие c ''MSVCRT.DLL'', которая имитирует файловые потоки STDIN/STDOUT/STDERR и также вносит свои особенности. |
| |
Как же быть ? | Как же быть ? |