В чем разница между Cygwin и MinGW?
Я хочу сделать свой проект c++ кросс-платформенным, и я рассматриваю возможность использования Cygwin/MinGW. Но в чем же разница между ними ?
другой вопрос, Смогу ли я запустить двоичный файл в системе без Cygwin/MinGW ?
15 ответов:
в качестве упрощения, это выглядит так:
скомпилировать что-то в Cygwin и вы компилируете его под Cygwin.
скомпилировать что-то в MinGW и вы компилируете его для Windows.
О Cygwin
цель Cygwin заключается в том, чтобы сделать перенос *nix-приложений в Windows намного проще, эмулируя многие из небольших сведения, которые предоставляют операционные системы на базе Unix, и задокументированы POSIX стандартов. Если ваше приложение предполагает, что оно может использовать функцию Unix, такую как каналы, доступ к файлам и каталогам в стиле Unix и т. д., то вы можете скомпилировать его в Cygwin, а сам Cygwin будет действовать как совместимость слое вокруг вашего приложения, так что многие из этих Unix-специфических парадигм могут по-прежнему использоваться с небольшими изменениями или без них приложение.
Если вы хотите скомпилировать что-то для Cygwin и распространить это результирующее приложение, вы также должны распространять среду выполнения Cygwin (предоставленную
cygwin1.dll
) вместе с и это имеет последствия для того, какие типы лицензий на программное обеспечение вы можете использовать.О MinGW
MinGW-это порт Windows инструментов компилятора GNU, таких как GCC, Make, Bash и так далее. Он не пытается эмулировать или предоставлять полная совместимость с Unix, но вместо этого он обеспечивает минимально необходимую среду для использования GCC (компилятор GNU) и небольшое количество других инструментов на Windows. Он не имеет уровня эмуляции Unix, такого как Cygwin, но в результате ваше приложение должно быть специально запрограммировано для работы в Windows, что может означать значительные изменения, если оно было создано для работы в стандартной среде Unix и использует специфические для Unix функции, такие как упомянутый ранее. По умолчанию код, скомпилированный в GCC MinGW, будет компилироваться в собственный целевой объект Windows X86, в том числе .exe и .dll файлы, хотя вы также можете скомпилировать с правильными настройками. MinGW является альтернативой с открытым исходным кодом Microsoft Visual C++ компилятор и связанные с ним инструменты связывания / создания.
существуют достаточно сложные кросс-платформенные фреймворки, которые позволяют легко переносить приложения в различные операционные системы - например Qt framework - это популярный фреймворк для кросс-платформенных приложений. Если вы используете такую структуру с самого начала, вы можете не только уменьшить свои головные боли, когда приходит время для переноса на другую платформу, но вы можете использовать одни и те же графические виджеты - окна, меню и элементы управления - на всех платформах, если вы пишете приложение с графическим интерфейсом.
Cygwin-это попытка создать полную среду UNIX / POSIX в Windows. Для этого он использует различные библиотеки DLL. Хотя эти библиотеки DLL покрываются GPLv3+, их лицензия содержит исключение, который не заставит производного произведения должны быть охвачены лицензией GPLv3+. MinGW-это набор компиляторов C/C++, который позволяет создавать исполняемые файлы Windows без зависимости от таких DLL - вам нужны только обычные среды выполнения MSVC, которые являются частью любой нормальной Microsoft Windows установка.
вы также можете получить небольшую среду UNIX / POSIX, скомпилированную с помощью MinGW под названием MSYS. Он не имеет практически всех функций Cygwin, но идеально подходит для программистов, желающих использовать MinGW.
чтобы добавить к другим ответам, Cygwin поставляется с библиотеками и заголовками MinGW, и вы можете компилировать без ссылки на cygwin1.dll с помощью флага-mno-cygwin с gcc. Я очень предпочитаю это использовать простые MinGW и MSYS.
Wikipedia делает сравнение здесь.
из Cygwin это сайт:
- Cygwin-это Linux-подобная среда для Windows. Он состоит из двух частей: DLL (cygwin1.dll), который действует как уровень эмуляции API Linux, обеспечивающий существенную функциональность API Linux.
- коллекция инструментов, которые обеспечивают внешний вид Linux.
из MinGW это сайт:
MinGW ("Minimalistic GNU for Windows")-это коллекция свободно доступных и свободно распространяемых файлов заголовков Windows и библиотек импорта в сочетании с наборами инструментов GNU, которые позволяют создавать собственные программы Windows, которые не полагаются на какие-либо сторонние библиотеки DLL C runtime
программа использует библиотеку DLL, с Cygwin.dll, (или, возможно, набор DLL), чтобы обеспечить POSIX-подобную среду выполнения в Windows.
MinGW компилируется в собственное приложение Win32.
Если вы создадите что-то с Cygwin, любая система, в которую вы его установите, также будет нуждаться в библиотеке DLL Cygwin. Приложение MinGW не нуждается в какой-либо специальной среде выполнения.
прочитайте эти ответы на вопросы, чтобы понять разницу между Cygwin и MinGW.
Вопрос #1: я хочу создать приложение, которое я пишу исходный код один раз, скомпилировать его один раз и запустить его на любых платформах (например, Windows, Linux и Mac OS X...).
ответ #1: напишите свой исходный код в ЯВА. Скомпилируйте исходный код один раз и запустите его в любом месте.
Вопрос #2: я хочу создать приложение, которое я пишу исходный код один раз, но нет никаких проблем, что я компилирую исходный код для любых платформ отдельно (например, Windows, Linux и Mac OS X ...).
ответ #2: Напишите свой исходный код на C или C++. Использование стандартных заголовочных файлов только. Используйте подходящий компилятор для любого платформы (например, Visual Studio для Windows, GCC для Linux и XCode для Мак.) Обратите внимание, что вы не должны использовать любые расширенные возможности программирования скомпилируйте исходный код в платформы успешно работают. Если вы используете нет стандартных классов C или C++ или функции, ваш исходный код не компиляции на других платформах.
Вопрос №3: в ответ на вопрос №2, трудно использовать разные компиляторы для каждой платформы, есть ли кросс-платформенный компилятор?
ответ #3: Да, используйте компилятор GCC. Оно является кросс-платформенным компилятором. К скомпилируйте исходный код в Windows используйте MinGW что обеспечивает компилятор GCC для Windows и компилирует ваш источник код для собственной программы Windows. Не используйте любые расширенные функции программирования (например, Windows API) для компиляции исходный код на всех платформах успешно. Если вы используете Windows API функции, ваш исходный код не компиляции на других платформах.
Вопрос #4: Стандартные заголовочные файлы C или C++ не предоставляют никаких дополнительных функций программирования, таких как многопоточность. Что я могу сделать?
Ответ #4: Вы должны использовать POSIX (Переносимый Интерфейс Операционной Системы [для UNIX]) стандарт. Он обеспечивает много расширенные возможности программирования и инструменты. Многие операционные системы полностью или частично совместимый с POSIX (например, Mac OS X, Solaris, BSD/OS И...). Некоторые операционные системы пока не официально сертифицирован как POSIX совместимый, соответствует в значительной степени (как Linux, FreeBSD, Опенсолярис И...). программа обеспечивает в значительной степени POSIX-совместимая разработка и среда выполнения для Microsoft Окна.
таким образом:
чтобы использовать преимущества кросс-платформенного компилятора GCC в Windows, используйте MinGW.
чтобы использовать преимущества стандартных расширенных программных функций и инструментов POSIX в Windows, используйте Cygwin.
MinGW
раздвоенный из версии 1.3.3Cygwin
. Хотя обаCygwin
иMinGW
может использоваться для портаUNIX
программыWindows
, они есть разные подходы:Cygwin
стремится обеспечить полныйPOSIX layer
это обеспечивает эмуляцию нескольких системных вызовов и библиотек которые существуют наLinux
,UNIX
иBSD
вариантов. ЭлементPOSIX layer
работает на вершинеWindows
, жертвуя спектакль, где необходимо для совместимости. Соответственно, такой подход требуетWindows
программы, написанные сCygwin
для запуска поверх копилефта библиотека совместимости, которая должна распространяться вместе с программой с помощью программыsource code
.MinGW
стремится обеспечить родной функциональность и производительность через прямыеWindows API calls
. В отличие отCygwin
,MinGW
не требует уровня совместимостиDLL
и таким образом, программы не нужно распространять с помощьюsource code
., потому что
MinGW
зависит отWindows API calls
, он не может обеспечьте полныйPOSIX API
; он не может скомпилировать некоторыеUNIX applications
это может быть скомпилировано сCygwin
. В частности, это применяется к приложениям, которые требуютPOSIX
функции какfork()
,mmap()
илиioctl()
и те, которые ожидают запуска в aPOSIX environment
. Приложения, написанные с помощьюcross-platform library
который сам был портирован наMinGW
, напримерSDL
,wxWidgets
,Qt
, илиGTK+
, обычно компилируется так же легко вMinGW
как и вCygwin
.сочетание
MinGW
иMSYS
обеспечивает небольшой, сдержанный среда, которая может быть загружена на съемный носитель без выхода записи в реестре или файлы на компьютере.Cygwin
портативное предоставляет аналогичную функцию. Обеспечивая дополнительные функциональные возможности,Cygwin
становится более сложным в установке и обслуживании.также возможно
cross-compile Windows applications
сMinGW-GCC under POSIX systems
. Это означает, что разработчики не нужна установка Windows сMSYS
для компиляции программного обеспечения, которое будет бежать наWindows
безCygwin
.
с точки зрения переноса программы на C, хороший способ понять это - взять пример:
#include <sys/stat.h> #include <stdlib.h> int main(void) { struct stat stbuf; stat("c:foo.txt", &stbuf); system("command"); printf("Hello, World\n"); return 0; }
если мы изменим
stat
to_stat
, мы можем скомпилировать эту программу с Microsoft Visual C. Мы также можем скомпилировать эту программу с MinGW и с Cygwin.в Microsoft Visual C программа будет связана с распространяемой библиотекой времени выполнения MSVC:
mxvcrtnn.dll
, гдеnn
это какой-то суффикс версии. Чтобы отправить эту программу нам придется включите эту DLL. Что DLL предоставляет_stat
,system
иprintf
.в разделе MinGW программа будет связана с
msvcrt.dll
, которая является внутренней, недокументированной, неверсионной библиотекой, которая является частью Windows и недоступна для использования в приложениях. Эта библиотека по существу является вилкой распространяемой библиотеки времени выполнения из MS Visual C для использования самой Windows.в обоих случаях программа будет иметь схожее поведение:
- the
stat
функция будет возвращать очень ограниченную информацию - например, никаких полезных разрешений или номера индекса.- путь
c:file.txt
решается в соответствии с текущим рабочим каталогом, связанным с дискомc:
.system
используетcmd.exe /c
для выполнения внешней команды.мы также можем скомпилировать программу под Cygwin. Аналогично распространяемому времени выполнения, используемому MS Visual C, программа Cygwin будет связана с временем выполнения Cygwin библиотеки:
cygwin1.dll
(собственно Cygwin) иcyggcc_s-1.dll
(поддержка времени выполнения GCC). Поскольку Cygwin теперь находится под LGPL, мы можем упаковать нашу программу, даже если она не совместима с GPL, и отправить программу.в Cygwin библиотечные функции будут вести себя по-разному:
- the
stat
функция имеет богатую функциональность, возвращая значимые значения в большинстве полей.- путь
c:file.txt
вообще не понимается как содержащее a ссылка на букву диска, так какc:
не сопровождается косой чертой. Двоеточие считается частью имени и каким-то образом искажается в нем. В Cygwin нет понятия относительного пути к тому или диску, нет понятия "текущий зарегистрированный диск" и нет текущего рабочего каталога для каждого диска.- the :
- как собственный инструмент разработки Windows, Cygwin имеет некоторые причуды, такие как обработка пути, которая чужда Windows, зависимость от некоторых жестко закодированных путей, таких как
/bin/sh
и другие вопросы. Эти различия, что оказывает Программы Cygwin "неродные". Если программа принимает путь в качестве аргумента или ввода из диалогового окна, пользователи Windows ожидают, что этот путь будет работать так же, как и в других программах Windows. Если это не работает таким образом, это проблема.Plug: вскоре после объявления LGPL, я начал Cygnal (Cygwin Native Application Library) проект, чтобы обеспечить вилку библиотеки DLL Cygwin, которая направлена на устранение этих проблем. Программы могут быть разработан под Cygwin, а затем развернут с версией Cygnal
cygwin1.dll
без перекомпиляции. По мере улучшения этой библиотеки она будет постепенно устранять необходимость в MinGW.когда Cygnal решает проблему обработки пути, можно будет разработать один исполняемый файл, который работает с путями Windows при поставке в качестве приложения Windows с Cygnal и легко работает с путями Cygwin при установке в вашем
/usr/bin
под Cygwin. В Cygwin исполняемый файл будет прозрачно работать с таким путем, как/cygdrive/c/Users/bob
. В собственном развертывании, где он связывается с версией Cygnalcygwin1.dll
, этот путь не будет иметь никакого смысла, тогда как он пойметc:foo.txt
.
Не забывайте и U / Win программное обеспечение, которое предназначено для компиляции приложений Unix на windows (последняя версия - 2012-08-06; использует Eclipse Public License, версия 1.0).
Как Cygwin они должны работать против библиотеки; в их случае
POSIX.DLL
. Ребята AT&T-потрясающие инженеры (та же группа, которая принесла вам ksh и точка) и их вещи стоит проверить.
Cygwin эмулирует всю среду POSIX, в то время как MinGW-это минимальный набор инструментов только для компиляции (компилирует собственное приложение Win.) Поэтому, если вы хотите сделать свой проект кросс-платформенным, выбор между ними очевиден, MinGW.
хотя вы можете рассмотреть возможность использования VS на Windows, GCC на Linux / Unices. Большинство проектов с открытым исходным кодом делают это (например, Firefox или Python).
чтобы использовать Cygwin в коммерческом / проприетарном / не-открытом приложении, вам нужно будет раскошелиться на десятки тысяч долларов за "лицензия котрые " от Красной шляпы; это делает недействительным стандартные условия лицензирования при значительных затратах. Google "стоимость лицензии cygwin" и посмотреть первые несколько результатов.
для mingw такие затраты не производятся, а лицензии (PD, BSD, MIT) чрезвычайно разрешительны. Самое большее ты мая ожидается поставка сведения о лицензии с вашим приложением, такие как лицензия winpthreads, необходимая при использовании mingw64-tdm.
редактировать благодаря Иззи Helianthus: коммерческая лицензия больше не доступна или не нужна, потому что библиотека API находится в подкаталоге winsup Cygwin сейчас распространяется под LGPL, в отличие от полного GPL.
обратите внимание, что поведение утилиты может действительно варьироваться между ними.
например, Cygwin tar может fork-потому что fork () поддерживается в DLL - где версия mingw не может. Это проблема при попытке скомпилировать mysql из исходного кода.
Cygwin предназначен для обеспечения более или менее полной среды POSIX для Windows, включая обширный набор инструментов, предназначенных для обеспечения полноценной Linux-подобной платформы. Для сравнения, MinGW и MSYS обеспечивают легкий, минималистский POSIX-подобный слой, используя только более важные инструменты, такие как
gcc
иbash
доступен. Из-за более минималистского подхода MinGW он не обеспечивает степень покрытия POSIX API, которую предлагает Cygwin, и поэтому не может создавать определенные программы который в противном случае может быть скомпилирован на Cygwin.С точки зрения кода, сгенерированного этими двумя, цепочка инструментов Cygwin опирается на динамическое связывание с большой библиотекой времени выполнения,
cygwin1.dll
, в то время как инструментальная цепочка MinGW компилирует код в двоичные файлы, которые динамически связываются с собственной библиотекой Windows Cmsvcrt.dll
а также статически частиglibc
. Исполняемые файлы Cygwin поэтому более компактны, но требуют отдельной распространяемой DLL, в то время как двоичные файлы MinGW могут поставляться автономно, но, как правило, больше.тот факт, что для запуска программ на базе Cygwin требуется отдельная библиотека DLL, также приводит к ограничениям лицензирования. Библиотека времени выполнения Cygwin лицензирована под GPLv3 с исключением связывания для приложений с OSI-совместимыми лицензиями, поэтому разработчики, желающие построить приложение с закрытым исходным кодом вокруг Cygwin, должны получить коммерческую лицензию от Red Hat. С другой стороны, код MinGW может использоваться как в приложениях с открытым, так и в приложениях с закрытым исходным кодом, так как заголовки и библиотеки разрешительная лицензия.
программа is-это Unix-подобная среда и интерфейс командной строки для Microsoft Windows.
Mingw является родным программным портом GNU Compiler Collection (GCC) для Microsoft Windows, а также набором свободно распространяемых библиотек импорта и заголовочных файлов для Windows API. MinGW позволяет разработчикам создавать собственные приложения Microsoft Windows.
вы можете запускать двоичные файлы, созданные с помощью
mingw
безcygwin
среда, при условии, что все необходимые библиотеки (DLL) присутствуют.