В чем разница между Cygwin и MinGW? - PullRequest
594 голосов
/ 21 апреля 2009

Я хочу сделать свой проект C ++ кроссплатформенным, и я рассматриваю возможность использования Cygwin / MinGW. Но в чем разница между ними?

Другой вопрос: смогу ли я запустить бинарный файл в системе без Cygwin / MinGW?

Ответы [ 16 ]

9 голосов
/ 18 сентября 2015

Чтобы использовать Cygwin в коммерческом / проприетарном / не с открытым исходным кодом приложении, вам нужно раскошелиться на десятки тысяч долларов для " выкупа лицензии " у Red Hat; это делает недействительными стандартные условия лицензирования при значительных затратах. Google "стоимость лицензии Cygwin" и увидеть первые результаты.

Для mingw такие затраты не производятся, а лицензии (PD, BSD, MIT) чрезвычайно разрешительные. Самое большее, от вас можно ожидать, что предоставит сведения о лицензии вместе с вашим приложением, например, лицензию winpthreads, требуемую при использовании mingw64-tdm.

РЕДАКТИРОВАТЬ благодаря Иззи Хелиантусу: Коммерческая лицензия больше не доступна или не нужна, поскольку библиотека API, найденная в подкаталоге winsup Cygwin , теперь распространяется под LGPL, так как против полной GPL.

8 голосов
/ 21 апреля 2009

Обратите внимание, что поведение утилиты может действительно отличаться между двумя.

Например, Cygwin tar может форкнуть - потому что fork () поддерживается в DLL - там, где версия mingw не может. Это проблема при попытке компиляции MySQL из исходного кода.

6 голосов
/ 06 марта 2014

Cygwin разработан для обеспечения более или менее полной среды POSIX для Windows, включая обширный набор инструментов, предназначенных для обеспечения полноценной Linux-подобной платформы. Для сравнения, MinGW и MSYS обеспечивают легкий, минималистичный POSIX-подобный слой с доступными только более важными инструментами, такими как gcc и bash. Из-за более минималистского подхода MinGW он не обеспечивает степень охвата API POSIX, которую предлагает Cygwin, и поэтому не может создавать определенные программы, которые в противном случае могут быть скомпилированы на Cygwin.

С точки зрения кода, сгенерированного двумя, цепочка инструментов Cygwin опирается на динамическое связывание с большой библиотекой времени выполнения, cygwin1.dll, в то время как цепочка инструментов MinGW компилирует код в двоичные файлы, которые динамически связываются с собственной библиотекой C Windows * msvcrt.dll а также статически на части glibc. Таким образом, исполняемые файлы Cygwin более компактны, но требуют отдельной распространяемой библиотеки DLL, тогда как двоичные файлы MinGW могут поставляться автономно, но, как правило, они больше.

Тот факт, что программам на основе Cygwin для запуска требуется отдельная DLL, также приводит к лицензионным ограничениям. Библиотека времени выполнения Cygwin лицензируется по GPLv3, за исключением связывания для приложений с лицензиями, совместимыми с OSI, поэтому разработчики, желающие создать приложение с закрытым исходным кодом на основе Cygwin, должны приобрести коммерческую лицензию в Red Hat. С другой стороны, код MinGW можно использовать как в приложениях с открытым исходным кодом, так и в приложениях с закрытым исходным кодом, поскольку заголовочные файлы и библиотеки разрешительно лицензированы.

3 голосов
/ 19 апреля 2019

Другие ответы уже попали в цель. Я просто хочу добавить иллюстрацию для быстрого улова.

enter image description here

3 голосов
/ 21 апреля 2009

Cygwin - это Unix-подобная среда и интерфейс командной строки для Microsoft Windows.

Mingw - это собственный программный порт из коллекции компиляторов GNU (GCC) для Microsoft Windows вместе с набором свободно распространяемых библиотек импорта и заголовочных файлов для Windows API. MinGW позволяет разработчикам создавать собственные приложения Microsoft Windows.

Вы можете запускать двоичные файлы, сгенерированные с помощью mingw без среды cygwin, при условии наличия всех необходимых библиотек (DLL).

2 голосов
/ 28 февраля 2014

Cygwin использует слой совместимости, в то время как MinGW является нативным. Это одно из главных отличий.

...