User Tools

Site Tools


msys2_mingw

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
msys2_mingw [2026/06/03 09:48] – [Интеграция MSYS2 и VSCode] adminmsys2_mingw [2026/06/26 15:54] (current) – [Компилятор и его запуск] admin
Line 9: Line 9:
 Дак вот, оказывается, нынче текущая версия **MSYS** - это **[[https://www.msys2.org/|MSYS2]]**. Это такой странный гибрид Дак вот, оказывается, нынче текущая версия **MSYS** - это **[[https://www.msys2.org/|MSYS2]]**. Это такой странный гибрид
 из **Cygwin** и старого **MSYS**. Что там нового ? Подобно **Cygwin** он делает замену путей в стиле UNIX, маскирует расширение *.exe, из **Cygwin** и старого **MSYS**. Что там нового ? Подобно **Cygwin** он делает замену путей в стиле UNIX, маскирует расширение *.exe,
-поддерживает псевдотерминалы, UNIX-сигналы и еще много чего. Это, с одной стороны, облегчает процесс сборки+поддерживает псевдотерминалы, UNIX-сигналы, файловую систему ''/proc'' и еще много чего. Это, с одной стороны, облегчает процесс сборки
 всяких нетривиальных UNIX программ, а с другой стороны, теперь все MSYS2-программы, в отличии от старого **MSYS** тянут за собой всяких нетривиальных UNIX программ, а с другой стороны, теперь все MSYS2-программы, в отличии от старого **MSYS** тянут за собой
 DLL-ку: ''msys-2.0.dll'' . DLL-ку: ''msys-2.0.dll'' .
Line 48: Line 48:
  
 Ну вот например поставили мы **MSYS2** (без разницы, 64-битную или 32-битную) и обновились. Давайте попробуем, наконец, скомпилить HelloWorld Ну вот например поставили мы **MSYS2** (без разницы, 64-битную или 32-битную) и обновились. Давайте попробуем, наконец, скомпилить HelloWorld
-под Windows-консоль. А вот хрен вам! Оказывается, теперь есть НЕ ОДИН компилятор, точнее не одна build-система (среда, namespace e.t.c.), а несколько.+под Windows-консоль. А вот хрен вам! Оказывается, теперь есть НЕ ОДИН компилятор, точнее не одна build-система (среда сборки, namespace e.t.c.), а несколько.
 Из них первая - для компиляции программ под __САМУ__ **MSYS2** (вы же помните, что она тащит за собой теперь как Из них первая - для компиляции программ под __САМУ__ **MSYS2** (вы же помните, что она тащит за собой теперь как
 минимум DLL ''msys-2.0.dll'' и работает с UNIX-путями?), а остальные build-системы - для обычных "голых" Windows программ, минимум DLL ''msys-2.0.dll'' и работает с UNIX-путями?), а остальные build-системы - для обычных "голых" Windows программ,
Line 77: Line 77:
 "MSYS2 MSYS", "MSYS2 MinGW 32bit" и "MSYS2 MinGW 64bit" (а в новых добавились еще clang и [[https://learn.microsoft.com/en-us/cpp/porting/upgrade-your-code-to-the-universal-crt/|ucrt]]). По крайней мере, на Windows7 так. "MSYS2 MSYS", "MSYS2 MinGW 32bit" и "MSYS2 MinGW 64bit" (а в новых добавились еще clang и [[https://learn.microsoft.com/en-us/cpp/porting/upgrade-your-code-to-the-universal-crt/|ucrt]]). По крайней мере, на Windows7 так.
 На Windows10 эти программы расположены в главном меню под буквой "M". Вот эти __три разные режима запуска__ и делают всю магию. На Windows10 эти программы расположены в главном меню под буквой "M". Вот эти __три разные режима запуска__ и делают всю магию.
-Альтернативный путь - запускать напрямую программы из папки ''C:\msys64\......exe'' или скрипт ''C:\msys64\msys2_shell.cmd''  с ключами ''-mingw32'', ''-mingw64''+Альтернативный путь - запускать напрямую программы-"оболочки" из папки ''C:\msys64\......exe'' или скрипт ''C:\msys64\msys2_shell.cmd''  с ключами ''-mingw32'', ''-mingw64''
 или ''-msys2''. Это точно то же самое. или ''-msys2''. Это точно то же самое.
  
Line 85: Line 85:
 настроен, с указанием папки ''include'', линкера и пути к библиотекам. Ура! настроен, с указанием папки ''include'', линкера и пути к библиотекам. Ура!
  
-Если нам надо понять, какое у нас сейчас окружение, то можно посмотреть переменную ''MSYSTEM'', например там будет ''MSYSTEM=MINGW32'' .+Если нам надо понять, какое у нас сейчас окружение, то можно посмотреть переменную ''MSYSTEM'', например там будет ''MSYSTEM=MINGW32'' . А чтобы понять, какой у нас компилятор, можно набрать ''which gcc''. Для **Mingw64** создающего 32-битные программы это будет ''/mingw32/bin/gcc'' .
  
 ==== Пишем программы ==== ==== Пишем программы ====
Line 139: Line 139:
 то даже ''-mwindows'' указывать не обязательно, компилятор сам понимает, но на всякий случай укажем. то даже ''-mwindows'' указывать не обязательно, компилятор сам понимает, но на всякий случай укажем.
  
-**ПРИМЕЧАНИЕ1:** Обратите внимание, что наша программа собирается со штатной библиотекой MSVCRT.DLL. Не стоит ждать многого от нее. В MSVCRT.DLL реализован далеко не полный набор функций ''libc''+**ПРИМЕЧАНИЕ1:** Обратите внимание, что наша программа собирается со штатной библиотекой MSVCRT.DLL. Не стоит ждать многого от нее. MSVCRT.DLL остановилась на уровне C89/C90 и в ней реализован далеко не полный набор функций ''libc''
-Кроме явного отсутствия "юниксовых" возможностей типа //fork()//, вида слешей в путях к файлам и т.д. расхождения могут быть совсем неожиданные (и в разных версиях Windows - разные).+Кроме явного отсутствия "юниксовых" возможностей типа //fork()//, //kill()//, //execvp()//, //waitpid()//, направления слешей в путях к файлам и т.д. расхождения могут быть совсем неожиданные (и в разных версиях Windows - разные).
 Например, //printf()// не поддерживает формат ''%zd'' для типа ''size_t'', поддержка UTF-8 довольно странная и другие неожиданные вещи. Компилятор Например, //printf()// не поддерживает формат ''%zd'' для типа ''size_t'', поддержка UTF-8 довольно странная и другие неожиданные вещи. Компилятор
 **Mingw-w64** знает много таких особенностей и по мере возможностей дает предупреждения. [[https://www.msys2.org/wiki/Porting/|Подробности]]. Несколько больше возможностей предоставляет новомодная [[https://learn.microsoft.com/en-us/cpp/porting/upgrade-your-code-to-the-universal-crt?view=msvc-170|UCRT]]. Если же нужны юниксовые фишки и не пугает зависимости от DLL - всегда можно собрать программу под оболочку **MSYS2**. **Mingw-w64** знает много таких особенностей и по мере возможностей дает предупреждения. [[https://www.msys2.org/wiki/Porting/|Подробности]]. Несколько больше возможностей предоставляет новомодная [[https://learn.microsoft.com/en-us/cpp/porting/upgrade-your-code-to-the-universal-crt?view=msvc-170|UCRT]]. Если же нужны юниксовые фишки и не пугает зависимости от DLL - всегда можно собрать программу под оболочку **MSYS2**.
Line 160: Line 160:
   - Терминал 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 приложениями неколько сложнее. На это накладывается взаимодействие программы через ''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 приложениями несколько сложнее. На это накладывается взаимодействие программы через ''MSVCRT.DLL'', которая имитирует файловые потоки STDIN/STDOUT/STDERR и также вносит свои особенности.
  
 Как же быть ? Как же быть ?
Line 214: Line 214:
 Полная документация по [[https://web.mit.edu/gnu/doc/html/rlman_toc.html|GNU Readline Library]]. Полная документация по [[https://web.mit.edu/gnu/doc/html/rlman_toc.html|GNU Readline Library]].
  
-Библиотекой readline можно управлять с помощью файла''.inputrc'' (под Windows ??)+Библиотекой readline можно управлять с помощью файла''.inputrc'' (как это сделать под Windows ??)
  
 Конец недописанного параграфа. Конец недописанного параграфа.
Line 375: Line 375:
 https://wiki.qt.io/MSYS2 https://wiki.qt.io/MSYS2
  
 +Или почитайте книжки
 +  * Секунов Николай Юрьевич. Программирование на C++ в Linux, БХВ-Петербург, 2004
 +  * Е.Р.Алексеев, Г.Г.Злобин, Д.А.Костюк, О.В.Чеснокова, А.С.Чмыхало Программирование на языке С++ в среде Qt Creator 
  
 ==== Интеграция MSYS2 и VSCode ==== ==== Интеграция MSYS2 и VSCode ====
msys2_mingw.1780480103.txt.gz · Last modified: by admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki