Почему нужны Cygwin и MinGW?

Я пытался понять, что такое Cygwin и MinGW, и найти его очень запутанным. Если вы хотите программировать на С++, вам не нужен компилятор С++? Из того, что я прочитал, похоже, что они стремятся предоставить Unix как операционную систему в Windows, но я не вижу значения этого. Я имею в виду, есть ли причина, по которой С++ не может быть скомпилирован в Windows? Я также читал, что они содержат библиотеки, это потому, что основной язык С++ не поддерживает многие функции, поэтому очень часто встречаются такие библиотеки, как math.h?

Ответы

Ответ 1

Это объяснение обязательно будет записано в другом месте, но здесь все равно...

Cygwin - совместимая среда, совместимая с POSIX, построенная поверх API Win32. Он предоставляет в значительной степени совместимую библиотеку POSIX C, и вокруг нее есть своего рода "Cygwin Distro" с менеджером пакетов, который позволяет вам установить тонну программ Unix, портированных под Cygwin. К ним относятся оболочка Unix, GCC (для Cygwin), X, куча кросс-компиляторов и т.д.

MinGW (-w64) - это проекты, предоставляющие Free (как в общедоступном домене) заголовки и библиотеки Win32. Вы можете видеть это как бесплатную замену заголовков и библиотек в SDK Windows (старых). Они могут использоваться совместно с GCC. Оба проекта и другие третьи стороны предоставляют встроенные сборки GCC для Windows, которые вообще не нуждаются в Cygwin. Эти пакеты можно рассматривать как "полные" (в объеме полноты замены MinGW (-w64)) для Windows SDK.

Обратите внимание, что Cygwin также предоставляет кросс-компиляторы Cygwin для Win32: они запускаются на платформе Cygwin, но производят собственные исполняемые файлы Win32.

Другой игрок, MSYS, представляет собой легкую вилку Cygwin, которая предоставляет только минимальное количество инструментов для запуска скриптов сборки autotools в Windows. MSYS должен использоваться в сочетании с встроенными инструментами MinGW (-w64), это не Cygwin, и вы не можете легко расширить MSYS.

Так что "MinGW (-w64)" часто относится ко всей свободной Windows GNU Toolchain (родной или кросс-компилятор, работающий поверх Cygwin), хотя, строго говоря, это только заголовки и библиотеки.

Чтобы использовать компилятор GCC С++, я предлагаю вам использовать либо мои пакеты (для создания 32-бит и 64-разрядные исполняемые файлы) или mingw-builds. Кроме того, вы можете установить Cygwin и использовать файл setup.exe для установки кросс-компилятора MinGW-w64 и использовать его оттуда, но если вам не нужна почти идеальная эмуляция Unix для скриптов сборки, я бы предложил против нее.

РЕДАКТИРОВАТЬ. Вы можете или не знать, что существует другая альтернатива - старый Interix, который обойден подсистему Win32 и строит непосредственно поверх ядра NT. Это предоставляется как Windows Services for Unix или Subsystem for Unix Applications (доступно для Windows 7 и Windows 8 и более старые версии Windows). Это решение доступно для клиентов Windows Pro/Ultimate и предоставляет вам самую близкую к родной поддержке Unix, которую вы собираетесь получить. Heck, вы даже можете использовать Visual Studio для отладки вашего программного обеспечения Unix:)

Ответ 2

ПРИМЕЧАНИЕ: этот ответ не претендует на полноту, он просто хочет представить простое понимание концепции из идеологических определений. Использование неточного языка является преднамеренным. Итак, гуру OS, пожалуйста, не ожидайте совершенных определений.

Разница заключается в корнях POSIX/UNIX и окон.

POSIX - это программный интерфейс C для операционных систем (в том числе Shell и утилиты).

Unix и более поздние версии Linux реализуют такие интерфейсы сами по себе, Windows изначально - нет. Он имеет собственный способ управления объектами операционной системы (Win32). Mac OS также не работает.

GCC - это набор компиляторов, общий для систем, которые предлагают интерфейс POSIX.

Чтобы использовать его в Windows, у вас есть - эта точка - две альтернативы:

  • Добавьте к окну библиотеку (код и заголовки), которые добавляют интерфейс POSIX к окнам (перевод POSIX-вызовов в вызовы Windows) и порт всех программ GNU (на основе Linux), компилируя их для использования этой библиотеки: это то, что делает Cygwin.

  • Перепишите программы POSIX, чтобы они включали в себя все, что связано с сопоставлением POSIX-Windows, создавая исполняемый файл Windows: это то, о чем говорят MinGW и MSYS.

Бот-методы имеют преимущества и недостатки. Короче говоря, в Cygwin, если что-то компилируется под POSIX, оно компилируется под Cygwin (по крайней мере теоретически). Но результатом является UNIX-выглядящая программа, работающая под окнами.

В MinGW вы можете писать собственные программы для Windows (вызывая собственный интерфейс Win32 C), но вы не можете скомпилировать все, что использует функции POSIX, отсутствующие в окнах. Наиболее очевидным случаем является отсутствие стандартного интерфейса <thread> MinGW и ограниченная поддержка <locale>.