Яка різниця між Cygwin та MinGW?


657

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

Інше питання - чи зможу я запускати двійковий файл у системі без Cygwin / MinGW?

Відповіді:


629

Як спрощення, це так:

  • Складіть щось у Cygwin, і ви збираєте це для Cygwin .

  • Складіть щось у MinGW, і ви збираєте це для Windows .

Про Сігвіна

Мета Cygwin - значно полегшити перенесення додатків на базі Unix до Windows, емулюючи багато дрібних деталей, які надають операційні системи на базі Unix, і документуються стандартами POSIX . Ваша програма може використовувати функцію Unix, таку як труби, доступ до файлів та каталогів у стилі Unix тощо, і вона може бути компільована за допомогою Cygwin, який буде виконувати функцію сумісності навколо вашої програми, так що багато з цих специфічних для Unix парадигм можуть продовжують використовувати.

Під час розповсюдження програмного забезпечення отримувач повинен запустити його разом із середовищем виконання програми Cygwin (надається файлом cygwin1.dll). Ви можете розповсюджувати це разом зі своїм програмним забезпеченням, але це програмне забезпечення повинно відповідати його ліцензії з відкритим кодом. Можливо, навіть так, що навіть просто зв’язування програмного забезпечення з ним, але розповсюдження dll окремо, все ж може знадобитися, щоб ви поважали ліцензію з відкритим кодом.

Про MinGW

MinGW має на меті просто бути портом Windows інструментів компілятора GNU, таких як GCC, Make, Bash тощо. Він не намагається наслідувати або забезпечити всебічну сумісність з Unix, але натомість забезпечує мінімально необхідне середовище для використання GCC (компілятор GNU) та невелику кількість інших інструментів у Windows. У нього немає рівня емуляції Unix, як Cygwin, але, як результат, ваша програма повинна бути спеціально запрограмована для запуску в Windows, що може означати значну зміну, якщо вона створена для того, щоб розраховувати на запуск у стандартному середовищі Unix та використовує функції, характерні для Unix, такі, як зазначені раніше. За замовчуванням код, скомпільований у GCC MinGW, буде компілюватися в нативну ціль Windows X86, включаючи файли .exe та .dll, хоча ви також можете перехрестити компіляцію з правильними налаштуваннями, оскільки ви в основному використовуєте набір інструментів компілятора GNU.

MinGW по суті є альтернативою компілятору Microsoft Visual C ++ та пов'язаним з ним інструментам для зв’язування / створення. У деяких випадках можливо використовувати MinGW для компіляції того, що було призначено для компіляції з Microsoft Visual C ++, з потрібними бібліотеками, а в деяких випадках і з іншими модифікаціями.

MinGW включає деякі базові стандартні бібліотеки для взаємодії з операційною системою Windows, але як і у звичайних стандартних бібліотеках, включених до колекції компілятора GNU, вони не встановлюють ліцензійних обмежень на створене вами програмне забезпечення.

Для нетривіальних програмних програм, перетворення їх на кросплатформне може бути суттєвим завданням, якщо ви не використовуєте всеосяжну платформу міжплатформ. У той час, коли я писав це, рамка Qt була однією з найпопулярніших для цієї мети, дозволяючи створювати графічні програми, які працюють в операційних системах, включаючи Windows, але є й інші варіанти. Якщо ви використовуєте таку структуру з самого початку, ви можете не тільки зменшити головні болі, коли настає час перенести порт на іншу платформу, але ви можете використовувати ті самі графічні віджети - вікна, меню та елементи керування - на всіх платформах, якщо ви пишете GUI-додаток, і вони можуть з’являтися рідними для користувача.


43
Баш, який поставляється з MinGW, не є рідною програмою Windows. Це залежить від MSYS DLL, що є вилкою DLL Cygwin. Те саме для багатьох інших утиліт Unix, які постачаються з MinGW / MSYS. MinGW gcc справді є рідною програмою. Зробити доступно як у рідній версії, так і в MSYS.
ak2

6
якісь різниці в швидкості?
EKanadily

6
Різниця в швидкості буде ігноруватися в більшості ситуацій. Будь-яка різниця зводиться до того, наскільки додатковий рівень абстракції, який надає шар сумісності cygwin, сповільнює ситуацію. Це може мати вимірний вплив на такі речі, як I / O. Наприклад, давно назад, Git працював лише на Windows у cygwin, і через це він був трохи повільніше. Знову ж таки, якщо ви кодуєте за допомогою фреймворку, це також шар абстракції з потенціалом у будь-якому разі сповільнити деякі речі.
thomasrutter

28
Слід зазначити, що код, скомпільований для cygwin, все ще є власним кодом - його не потрібно запускати через інтерпретатора, як, наприклад, Java. Просто коли йому потрібно взаємодіяти з певними функціями ОС, такими як диск / файл, він проходить через інший шар.
thomasrutter

4
Узагальнено ви не зможете порівнювати, оскільки вам доведеться писати свій код по-різному, залежно від того, чи це cygwin чи ні. Хоча для будь-якого невеликого, простого програмного забезпечення, такого як "привіт світ", еквівалент cygwin буде більшим лише завдяки бібліотеці виконання cygwin. Якщо ви не враховуєте розмір бібліотеки виконання cygwin, версія cygwin зазвичай буде меншою, але я думаю, що це помилкова цифра, оскільки бібліотеку практично завжди потрібно постачати з програмним забезпеченням. Однак, якщо ви використовуєте будь-які нетривіальні бібліотеки / рамки, то це буде більше залежати від цього.
thomasrutter

311

Cygwin - це спроба створити повне середовище UNIX / POSIX у Windows. Для цього використовується різні DLL-файли. Хоча ці DLL охоплені GPLv3 +, їх ліцензія містить виняток , який не змушує похідну роботу покриватися GPLv3 +. MinGW - це набір компіляторів C / C ++, який дозволяє створювати виконувані файли Windows без залежності від таких DLL-файлів - вам потрібні лише звичайні версії MSVC, які є частиною звичайної установки Microsoft Windows.

Ви також можете отримати невелике середовище схоже на UNIX / POSIX, складене з MinGW під назвою MSYS . У ній немає всіх можливостей Cygwin, але ідеально підходить для програмістів, які хочуть використовувати MinGW.


59
Але якщо я хочу випустити безкоштовне програмне забезпечення, яке не є GPL? Вибачте, я не фанат GPL.

19
@Dan Вам не потрібно перерозподіляти час виконання, який використовує MinGW - це частина Windows.

14
@ ak2: це правда, але оманливо. cygwyn gcc + cygwin за умовчанням створює двійкові файли, пов'язані з (GPL) cygwin dll. mingw + msys за замовчуванням створює бінарні файли, пов'язані з платформою C lib.
Шон Макміллан

4
@DanMoulding Якщо ви не фанат Microsoft, вам доведеться ігнорувати в першу чергу ті почуття, які розвиваються для Windows. ;-)
Арда Сі

14
@anon "Але якщо я хочу випустити безкоштовне програмне забезпечення, яке не є GPL?" .. cygwin має особливий виняток у своїх ліцензійних умовах, що дозволяє поширювати вільне програмне забезпечення, пов'язане з ним, під іншими (не-GPL) відкритими ліцензіями. Дивіться "Виняток з ліцензування з відкритим кодом" тут: cygwin.com/licensing.html
кухар

138

Щоб додати до інших відповідей, Cygwin поставляється з бібліотеками та заголовками MinGW, і ви можете компілювати без посилання на cygwin1.dll, використовуючи прапор -mno-cygwin з gcc. Я дуже вважаю за краще це використовувати звичайні MinGW та MSYS.


31
Це більше не працює з cygwin 1.7.6. gcc: прапор -mno-cygwin видалено; використовувати крос-компілятор, орієнтований на mingw.
sigjuice

2
@sigjuice: правда, але старий прапор -mno-cygwin як і раніше працює для GCC 3.x:gcc-3 -mno-cygwin
Amro

1
Так це означає, що мені потрібно завантажити бібліотеки mingw з офіційного сайту mingw, щоб компілювати до цілі mingw від хоста cygwin? Або ці бібліотеки можна завантажити з пакетної системи Cygwin?
CMCDragonkai

5
@CMCDragonkai Ви можете придбати компілятори, сумісні з mingw, з веб-сайту Cygwin, запустивши утиліту налаштування, знайшовши та позначте їх. Тож навіть незважаючи на те, що gcc більше не генерує код, сумісний з mingw, ви можете в Cygwin запустити "mingw-gcc" (це не повне ім'я), щоб зробити такий же виконуваний файл, що і компілятор mingw під msys.
космічний чоловік Кардіф

9
Щоб змінити корисну відповідь Cardiff, пакети та команди MinGW Cygwin мають дещо незрозумілі назви. Щоб встановити MinGW-64 ( майже все, що ви завжди хочете, в ці дні ), встановіть mingw64-x86_64-gcc-coreпакет Cygwin. MinGW-64 буде доступний як незручно названа x86_64-w64-mingw32-gccкоманда. Будь ласка, Бог (и), хтось уже уніфікує назви цих кривавих речей.
Сесіль Карі

60

Вікіпедія робить порівняння тут .

З веб-сайту Cygwin :

  • Cygwin - це середовище, схоже на Linux, для Windows. Він складається з двох частин: DLL (cygwin1.dll), який виступає як емуляційний рівень Linux API, що забезпечує значну функціональність Linux API.
  • Колекція інструментів, які забезпечують зовнішній вигляд Linux.

З веб- сайту Mingw :

MinGW ("Мінімалістичний GNU для Windows") - це сукупність вільно доступних та вільно розповсюджуваних файлів заголовків Windows та бібліотек імпорту в поєднанні з наборами інструментів GNU, які дозволяють виробляти нативну програму Windows, яка не покладається на будь-які сторонні DLL програми C


47

Cygwin використовує DLL, cygwin.dll (або, можливо, набір DLL) для забезпечення POSIX-подібного часу виконання в Windows.

MinGW компілюється в рідну програму Win32.

Якщо ви будуєте щось із Cygwin, будь-яка система, на яку ви встановите, також потребуватиме DLL-файлів Cygwin. Програма MinGW не потребує особливих режимів виконання.


42

Прочитайте ці відповіді на запитання, щоб зрозуміти різницю між Cygwin та MinGW.


Запитання №1: Я хочу створити додаток, який пишу вихідний код один раз, скомпілювати його один раз і запустити його на будь-яких платформах (наприклад, Windows, Linux та Mac OS X…).

Відповідь №1: Введіть свій вихідний код у JAVA. Складіть один раз вихідний код і запустіть його будь-де.


Запитання №2: Я хочу створити додаток, який пишу вихідний код один раз, але немає жодної проблеми, що я компілюю вихідний код для будь-яких платформ окремо (наприклад, Windows, Linux та Mac OS X…).

Відповідь №2: Запишіть свій вихідний код на C або C ++. Використовуйте лише стандартні файли заголовків. Використовуйте відповідний компілятор для будь-якої платформи (наприклад, Visual Studio для Windows, GCC для Linux та XCode для Mac). Зауважте, що для успішного складання вихідного коду на всіх платформах не слід використовувати жодних розширених функцій програмування. Якщо ви не використовуєте стандартних класів або функцій C або C ++, ваш вихідний код не збирається на інших платформах.


Запитання №3: Відповідаючи на запитання №2, важко використовувати різні компілятори для кожної платформи, чи є компілятор крос-платформи?

Відповідь №3: Так, використовуйте компілятор GCC. Це компілятор крос-платформ. Для компіляції вихідного коду в Windows використовуйте MinGW, який забезпечує компілятор GCC для Windows і компілює ваш вихідний код у рідну програму Windows. Не використовуйте жодних розширених функцій програмування (наприклад, API Windows) для успішного складання вихідного коду на всіх платформах. Якщо ви використовуєте функції API Windows, ваш вихідний код не збирається на інших платформах.


Питання №4: Стандартні файли заголовків C або C ++ не надають жодних розширених функцій програмування, таких як багатопотоковість. Що я можу зробити?

Відповідь №4: Ви повинні використовувати стандарт POSIX (Портативний інтерфейс операційної системи [для UNIX]). Він надає багато передових функцій та інструментів програмування. Багато операційних систем повністю або частково сумісні з POSIX (наприклад, Mac OS X, Solaris, BSD / OS і ...). Деякі операційні системи, хоча офіційно не сертифіковані як сумісні з POSIX, значною мірою відповідають (наприклад, Linux, FreeBSD, OpenSolaris та ...). Cygwin забезпечує в значній мірі POSIX-сумісну розробку та час роботи для Microsoft Windows.


Таким чином:

Щоб скористатися перевагами компілятора крос-платформ GCC в Windows, використовуйте MinGW.

Для використання переваг стандартних розширених функцій та інструментів програмування POSIX у Windows, використовуйте Cygwin.


4
Про ваш маленький faq: 1) Ваше право, якщо вам потрібно щось, що працює де завгодно і не потрібно складати, виберіть щось на кшталт java (також не забувайте python, perl, ruby ​​та інші мови скриптів) 2) Це дещо неправильно для випадку C, оскільки всі компілятори C дуже добре підтримують його. 3) Ви все ще можете скористатися програмою win32 api, але вам доведеться загортати її в шар переносимості, так що це лише проблема дизайну.
Coyote21

1
4) Це абсолютно неправильно через причини, які я навожу вище, оскільки POSIX - це лише інші api, також якщо ви захищаєте стільки POSIX, ви повинні знати, що навіть Unices не потребує впровадження того ж набору POSIX, так як ти з цим маєш справу? На розум приходить POSIX api в реальному часі. І це робить вас висновком абсолютно неправдивим і неправильним, оскільки POSIX вам не потрібен ні для чого у Windows, ви можете просто скористатися API Win32. Або як ви вважаєте, що Qt, GTK та WxWidgets знайшли спосіб бути кросплатформенним, я думаю, що всі вони повинні використовувати cygwin у Windows. -1 голос за вашу відповідь.
Coyote21

4
Я не розумію вашого аргументу, @ Coyote21. Ви хочете сказати, що POSIX не підходить для розробки платформ? Ви хочете сказати, що єдиним підходящим способом написання коду на C / C ++ для декількох платформ є написання власного рівня сумісності для кожної платформи, яку ви хочете підтримати? Я не бачу нічого поганого в пропозиції почати з POSIX. Вам потрібно побачити, наскільки далеко ви можете дістати вас та чи знадобиться розгалужене рішення рівня сумісності. Великі шари сумісності не є нормою. Сказати інше - це стверджувати, що POSIX - це повна невдача.
Девід Гладфелтер

Багатопотоковість реалізується через шар POSIX навіть у MinGW.
Олександр Шишенко

1
"не слід використовувати будь-які розширені функції програмування для успішного збирання вихідного коду на всіх платформах." Вам дійсно потрібно уточнити, що ви мали на увазі під «розширеними функціями програмування». На основі більш пізнього рядка, я здогадуюсь, чи ви насправді маєте на увазі особливості платформи . Якщо ви мали на увазі особливості сучасної мови, то ні, тому що компетентні компілятори існують для "всіх [основних] платформ", і ми не повинні позбавляти себе можливостей лише для того, щоб підтримувати тих, чиї компілятори чи бібліотеки все ще відстають. Завдяки гідному компілятору, стандартним C / ++ та міжплатформованим бібліотекам, ми можемо бути дуже вдосконаленими.
підкреслюйте_d

34

З точки зору перенесення програми на 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до _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.

У обох випадках програма матиме подібну поведінку:

  • statфункція буде повертати дуже обмеженої інформації немає корисних дозволів або номер індексного дескриптора, наприклад.
  • шлях c:file.txtвирішується відповідно до поточного робочого каталогу, пов'язаного з диском c:.
  • systemвикористовує cmd.exe /cдля запуску зовнішньої команди.

Ми також можемо скласти програму під Cygwin. Аналогічно до перерозподілюваного часу виконання, використовуваного MS Visual C, програма Cygwin буде пов'язана з бібліотеками циклу виконання циклу: cygwin1.dll(Cygwin належним чином) та cyggcc_s-1.dll(підтримка часу виконання GCC). Оскільки Cygwin зараз належить до LGPL, ми можемо постачати програму, навіть якщо це не безкоштовне програмне забезпечення, сумісне з GPL, та відправляти програму.

Під Cygwin функції бібліотеки будуть вести себе по-різному:

  • statфункція має багату функціональність, повертаючи значимі значення в більшості областей.
  • шлях c:file.txtвзагалі не розуміється як такий, що містить посилання на букву диска, оскільки c:не супроводжується косою рисою. Товста кишка вважається частиною назви і якось перетворюється на неї. У Cygwin відсутня концепція відносного шляху проти об'єму чи диска, немає концепції "приводу в даний час" та немає поточного робочого каталогу на один привід.
  • systemфункція намагається використовувати /bin/sh -cінтерпретатор. Cygwin вирішить /шлях відповідно до місця розташування вашого виконуваного файлу та очікує, що sh.exeпрограма буде розташована спільно з вашим виконуваним файлом.

І Cygwin, і MinGW дозволяють використовувати функції Win32. Якщо ви хочете зателефонувати MessageBoxабо CreateProcess, ви можете це зробити. Ви також можете легко створити програму, яка не потребує вікна консолі, використовуючи gcc -mwindowsпід MinGW та Cygwin.

Cygwin не є строго POSIX. Окрім надання доступу до API Windows, він також забезпечує власну реалізацію деяких функцій Microsoft C (речі, знайдені в msvcrt.dllабо повторно розповсюджувані msvcrtnn.dllперіоди виконання). Прикладом цього є spawn*сімейство таких функцій spawnvp. Це хороша ідея використовувати замість Cygwin forkта execна них, оскільки вони краще відображають модель створення системи Windows, яка не має концепції fork.

Таким чином:

  • Програми Cygwin не менш "рідні", ніж програми MS Visual C на підставі необхідності супроводу бібліотек. Очікується, що реалізація мови програмування у Windows забезпечує власний час роботи, навіть реалізацію мови C. У Windows немає "libc" для громадського використання.

  • Те, що MinGW не потребує сторонніх DLL, насправді є недоліком; це залежить від незадокументованої роздрібної вилки для Windows Visual C. MinGW робить це тому, що виняток із бібліотеки системної системи GPL стосується msvcrt.dll, а це означає, що програми GPL-ed можна компілювати та перерозподіляти за допомогою MinGW.

  • Завдяки значно ширшій та глибшій підтримці POSIX порівняно з msvcrt.dll, Cygwin є далеко не найкращим середовищем для перенесення програм POSIX. Оскільки він зараз знаходиться під LGPL, він дозволяє перерозподіляти програми з усіма видами ліцензій, відкритого чи закритого джерела. Cygwin навіть містить емуляцію VT100 і termios, яка працює з консоллю Microsoft! Програма POSIX, яка встановлює необроблений режим з tcsetattrта використовує коди VT100 для управління курсором, працюватиме прямо у cmd.exeвікні. Що стосується кінцевого користувача, це нативна програма консолі, яка робить виклики Win32 для управління консоллю.

Однак:

  • Як рідний інструмент розробки Windows, Cygwin має деякі химерності, наприклад, обробка траєкторій, яка є чужою для Windows, залежність від деяких жорстко закодованих шляхів, таких як /bin/sh та інші проблеми. Ці відмінності - це те, що робить програми Cygwin "неродними". Якщо програма приймає шлях як аргумент або вхід з діалогового вікна, користувачі Windows очікують, що цей шлях буде працювати так само, як і в інших програмах Windows. Якщо це не працює таким чином, це проблема.

Підключення : Незабаром після оголошення 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. У нативному розгортанні, де він посилається на версію Cygnal cygwin1.dll, цей шлях не матиме сенсу, тоді як він зрозуміє c:foo.txt.


2
Відмінна відповідь. Показати, що відбувається, коли один і той же фрагмент коду складається, пов'язаний і виконується в кожному з трьох середовищ, є ключовим і пояснює відмінності.
drlolly

@Kaz Як розвивається така розробка? Звучить ітераційний, але здається мертвим, щонайменше, рік тому. Чому ви не використовуєте GitHub, щоб люди могли допомагати та брати участь?
not2qubit

2
@ not2qubit Я вважаю, що я краще контролюю свої проекти, коли вони розміщуються на моєму власному сервері, який я контролюю сам. Я використовую git; сховище можна витягнути. Я можу приймати запити на виклик електронною поштою (як розробив їх Лінус Торвальдс). Я також можу надати рахунок з привілеями на виконання зобов’язань тому, хто стає учасником рівня підтримки. Cygnal прекрасно працює; Я регулярно вкладаю його у версії Windows нових версій мови TXR. Я перейду Cygnal на нову базову лінію Cygwin десь на початку 2019 року.
Каз

@ not2qubit Зауважте, що всі 17 питань циганального порядку денного вирішені. Ніхто не запропонував жодних нових вимог і не скаржився на те, як поводитися з цими 17. тому не потрібна інша розробка, крім перезавантаження на новіші Cygwin, що не є надзвичайно актуальним.
Каз

27

Вікіпедія говорить :

MinGWроздвоєні з версії 1.3.3 від Cygwin. Хоча обидва 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()тих, які очікуються на запуск у POSIX 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.


2
Це точно не "складніше встановити та обслуговувати" ! Використовувати, apt-cygяк це, можливо, навіть простіше, ніж використовувати apt під WSL.
not2qubit

14

Не забувайте про те, що AT / T не перемагає програмне забезпечення , яке створене для того, щоб допомогти вам складати програми Unix на Windows (остання версія - 2012-08-06; використовує публічну ліцензію Eclipse, версія 1.0).

Як і Cygwin, їм доводиться бігати проти бібліотеки; у їхньому випадку POSIX.DLL. Хлопці AT&T - надзвичайні інженери (та сама група, яка принесла вам ksh і dot ), і їх речі варто перевірити.


4
Нічого собі, це якісь погані веб-сторінки. Нарешті я зміг знайти посилання для завантаження на веб- сайті www2.research.att.com/sw/download , але немає онлайн-документації та інформації про проект.
Фантюс

1
Хоча інформація корисна, я вважаю, що це може бути відповіддю на запитання про альтернативи для MingW або Cygwin, а не на це питання.
Вівек

12

Інші відповіді вже потрапили в ціль. Я просто хочу додати ілюстрацію для швидкого вилову.

введіть тут опис зображення


11

Cygwin імітує все середовище POSIX, тоді як MinGW - це мінімальний набір інструментів лише для компіляції (збирає нативну програму Win.) Отже, якщо ви хочете зробити ваш проект міжплатформенним, вибір між ними є очевидним, MinGW.

Хоча ви можете розглянути можливість використання VS для Windows, GCC для Linux / Unices. Більшість проектів з відкритим кодом роблять це (наприклад, Firefox або Python).


"Більшість" видається тут безглуздим словом, особливо з лише 2-ма прикладами та відсутністю статистики. Багато проектів FOSS кидають у файл проекту VS як жест жетону, я вважаю, це більш точно. Але якщо минулий досвід є чим пройти, GCC або Clang зазвичай безпечніші, оскільки VS, як правило, значно відстають у міру розвитку мовних стандартів.
підкреслити_

Це відповідь з 2009 року. Зараз GCC виглядає ще більш похмурим. Що стосується "більшості", якщо вимірювати вплив, то лише Firefox та Chrome мають більше користувачів, ніж будь-що інше.
vartec

2
Що змінилося з моменту, коли я відповів, це те, що зараз clangце життєздатне кросплатформене рішення.
vartec

9

Зауважте, що поведінка утиліти може по-справжньому відрізнятися між ними.

Наприклад, Cygwin tar може розщедритися - тому що fork () підтримується в DLL - там, де версія mingw не може. Це проблема при спробі компілювати mysql з джерела.


Ось чому повноцінні середовища, що підтримують MinGW, наприклад MSYS2, пропонують Cygwin або інший повністю сумісний з POSIX шар для низькорівневих гайок та болтів ланцюжків інструментів, необхідних під час будівництва. Тоді фактична компіляція та зв'язування залишається повністю повноцінним компілятором MinGW. MSYS2 дійсно акуратний.
підкреслюй_d

9

Щоб використовувати Cygwin в комерційній / фірмовій / невідкритій програмі, вам потрібно буде роздрібнити десятки тисяч доларів за " викуп ліцензії " від Red Hat; це скасовує стандартні умови ліцензування значною вартістю. "Вартість ліцензії на cygwin" від Google і подивіться перші кілька результатів.

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

EDIT завдяки Іззі Геліантусу: комерційна ліцензія більше не доступна та не потрібна, оскільки бібліотека API, знайдена у підкаталозі winup Cygwin , зараз поширюється під LGPL, на відміну від повного GPL.


2
Оновлення з веб-сайту Redhat (посилання від "викуп ліцензії" - "З 1 березня 2016 року Red Hat більше не продає комерційну ліцензію викупу Cygwin. Комерційна ліцензія більше не потрібна, оскільки Cygwin зараз розповсюджується під GNU Меншою GPL (LGPL). '> З веб-сайту Cygwin. Бібліотека API Cygwin ™, знайдена у підкаталозі winup вихідного коду, охоплюється ГНУ Меншою загальною публічною ліцензією (LGPL) версії 3 або пізнішої інформації. Детальніше про вимоги LGPLv3, будь ласка, прочитайте меншу загальну публічну ліцензію GNU (LGPL).
Izzy Helianthus

6

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

Що стосується коду, сформованого двома, ланцюжок інструментів Cygwin покладається на динамічне посилання на велику бібліотеку виконання cygwin1.dll, тоді як ланцюжок інструментів MinGW збирає код у бінарні файли, які динамічно посилаються на рідну бібліотеку Windows msvcrt.dll, а також статично на частиниglibc . Таким чином, виконувані файли Cygwin є більш компактними, але вимагають окремої DLL-версії, що перерозподіляється, тоді як бінарні файли MinGW можна відправляти окремо, але мають тенденцію бути більшими.

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


3

Cygwin - це інтерфейс, подібний середовищу та командному рядку для Microsoft Windows.

Mingw - це нативний програмний порт колекції GNU Compiler Collection (GCC) для Microsoft Windows, а також набір вільно розповсюджуваних бібліотек імпорту та файлів заголовків для API Windows. MinGW дозволяє розробникам створювати вбудовані програми Microsoft Windows.

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.