windows - सिगविन और मिनजीडब्ल्यू के बीच क्या अंतर है?




cygwin mingw (10)

मैं अपना सी ++ प्रोजेक्ट क्रॉस प्लेटफार्म बनाना चाहता हूं, और मैं सिगविन / मिनजीडब्ल्यू का उपयोग करने पर विचार कर रहा हूं। लेकिन उनके बीच क्या अंतर है?

एक और सवाल यह है कि क्या मैं सिगविन / मिनजीडब्ल्यू के बिना सिस्टम पर द्विआधारी चलाने में सक्षम हूं?


अन्य उत्तरों में जोड़ने के लिए, सिगविन मिनजीडब्लू पुस्तकालयों और शीर्षकों के साथ आता है और आप gcc के साथ -मोनो-सिग्विन ध्वज का उपयोग कर cygwin1.dll से लिंक किए बिना संकलित कर सकते हैं। मैं इसे सादा मिनजीडब्ल्यू और एमएसवाईएस का उपयोग करने के लिए बहुत पसंद करता हूं।


एक वाणिज्यिक / स्वामित्व / गैर-ओपन-सोर्स एप्लिकेशन में सिगविन का उपयोग करने के लिए, आपको Red Hat से " लाइसेंस खरीददारी " के लिए हजारों डॉलर का फोर्क करना होगा; यह एक मानक लागत पर मानक लाइसेंसिंग शर्तों को अवैध करता है। Google "साइगविन लाइसेंस लागत" और पहले कुछ परिणाम देखें।

मिंगव के लिए, ऐसी कोई लागत नहीं हुई है, और लाइसेंस (पीडी, बीएसडी, एमआईटी) बेहद अनुमत हैं। अधिकतर आपको अपने आवेदन के साथ लाइसेंस विवरण प्रदान करने की उम्मीद की जा सकती है, जैसे कि mingw64-tdm का उपयोग करते समय आवश्यक Winpthreads लाइसेंस।

Izzy Helianthus के लिए धन्यवाद संपादित करें: वाणिज्यिक लाइसेंस अब उपलब्ध या आवश्यक नहीं है क्योंकि सिग्विन की विजेता उपनिर्देशिका में मिली एपीआई लाइब्रेरी को अब पूर्ण जीपीएल के विपरीत एलजीपीएल के तहत वितरित किया जा रहा है।


विंडोज़ पर एक पॉज़िक्स-जैसे रनटाइम प्रदान करने के लिए सिग्विन एक डीएलएल, cygwin.dll, (या शायद डीएलएल का एक सेट) का उपयोग करता है।

MinGW एक देशी Win32 अनुप्रयोग के लिए संकलित करता है।

यदि आप सिगविन के साथ कुछ बनाते हैं, तो जिस सिस्टम को आप इंस्टॉल करते हैं उसे सिगविन डीएलएल की भी आवश्यकता होगी। एक मिनीजीडब्ल्यू एप्लिकेशन को किसी विशेष रनटाइम की आवश्यकता नहीं होती है।


विकिपीडिया here तुलना करता here

सिगविन की website :

  • सिग्विन विंडोज के लिए एक लिनक्स जैसी वातावरण है। इसमें दो भाग होते हैं: एक डीएलएल (cygwin1.dll) जो लिनक्स एपीआई इम्यूलेशन परत के रूप में कार्य करता है जो पर्याप्त लिनक्स एपीआई कार्यक्षमता प्रदान करता है।
  • लिनक्स को देखने और महसूस करने वाले टूल का संग्रह।

मिंगव की website :

मिनजीडब्लू ("विंडोज़ के लिए न्यूनतम जीएनयू") स्वतंत्र रूप से उपलब्ध और स्वतंत्र रूप से वितरित करने योग्य विंडोज विशिष्ट शीर्षलेख फाइलों और आयात पुस्तकालयों का संग्रह है जो जीएनयू टूल्ससेट के साथ संयुक्त है जो किसी को देशी विंडोज प्रोग्राम बनाने की अनुमति देता है जो कि किसी भी तृतीय-पक्ष सी रनटाइम डीएलएल पर भरोसा नहीं करता है


सिगविन विंडोज पर एक पूर्ण यूनिक्स / पॉज़िक्स वातावरण बनाने का प्रयास है। ऐसा करने के लिए यह विभिन्न डीएलएल का उपयोग करता है। हालांकि इन डीएलएल को जीपीएलवी 3 + द्वारा कवर किया गया है, उनके लाइसेंस में एक अपवाद है जो जीपीएलवी 3 + द्वारा कवर किए गए व्युत्पन्न काम को मजबूर नहीं करता है। मिनजीडब्ल्यू एक सी / सी ++ कंपाइलर सूट है जो आपको ऐसे डीएलएल पर निर्भरता के बिना विंडोज एक्जिक्यूटिव बनाने की अनुमति देता है - आपको केवल सामान्य एमएसवीसी रनटाइम की आवश्यकता होती है, जो किसी भी सामान्य माइक्रोसॉफ्ट विंडोज इंस्टॉलेशन का हिस्सा हैं।

आप MSYS नामक MSYS साथ संकलित वातावरण जैसे छोटे यूनिक्स / MSYS भी प्राप्त कर सकते हैं। यह सिगविन की सभी सुविधाओं के पास कहीं भी नहीं है, लेकिन MingW का उपयोग करने वाले प्रोग्रामर के लिए आदर्श है।


सिग्विन को विंडोज के लिए एक कम या कम पूर्ण POSIX वातावरण प्रदान करने के लिए डिज़ाइन किया गया है, जिसमें एक पूर्ण लिनक्स-जैसे प्लेटफ़ॉर्म प्रदान करने के लिए डिज़ाइन किए गए टूल का विस्तृत सेट शामिल है। इसकी तुलना में, मिनजीडब्लू और एमएसवाईएस एक हल्के, कम से कम पॉज़िक्स जैसी परत प्रदान करते हैं, जिसमें gcc और bash जैसे अधिक आवश्यक टूल उपलब्ध हैं। मिनजीडब्ल्यू के कम से कम दृष्टिकोण के कारण, यह पॉज़िक्स एपीआई कवरेज सिगविन ऑफ़र की डिग्री प्रदान नहीं करता है, और इसलिए कुछ प्रोग्राम नहीं बना सकते हैं जिन्हें अन्यथा सिगविन पर संकलित किया जा सकता है।

दोनों द्वारा उत्पन्न कोड के संदर्भ में, cygwin1.dll एक बड़ी रनटाइम लाइब्रेरी, cygwin1.dll पर डायनामिक लिंकिंग पर निर्भर करता है, जबकि cygwin1.dll बाइनरी को कोड संकलित करता है जो विंडोज मूल सी पुस्तकालय msvcrt.dll साथ गतिशील रूप से लिंक करता है। स्थिर रूप से glibc हिस्सों के लिए। सिग्विन एक्जिक्यूटिव्स इसलिए अधिक कॉम्पैक्ट हैं लेकिन एक अलग पुनर्वितरण योग्य डीएलएल की आवश्यकता है, जबकि मिनजीडब्ल्यू बाइनरी को स्टैंडअलोन भेज दिया जा सकता है लेकिन यह बड़ा होता है।

तथ्य यह है कि सिगविन-आधारित कार्यक्रमों को चलाने के लिए एक अलग डीएलएल की आवश्यकता होती है, जिससे लाइसेंसिंग प्रतिबंध भी होते हैं। सिग्विन रनटाइम लाइब्रेरी को जीपीएलवी 3 के तहत लाइसेंस प्राप्त है जिसमें ओएसआई-अनुरूप लाइसेंस वाले अनुप्रयोगों के लिए एक लिंकिंग अपवाद है, इसलिए साइगविन के आस-पास एक बंद-स्रोत एप्लिकेशन बनाने की इच्छा रखने वाले डेवलपर्स को Red Hat से वाणिज्यिक लाइसेंस प्राप्त करना होगा। दूसरी ओर, ओपनजीड कोड दोनों ओपन-सोर्स और क्लोज-सोर्स अनुप्रयोगों में इस्तेमाल किया जा सकता है, क्योंकि हेडर और पुस्तकालयों को अनुमोदित रूप से लाइसेंस प्राप्त है।


सी प्रोग्राम को पोर्ट करने के दृष्टिकोण से, इसे समझने का एक अच्छा तरीका उदाहरण लेना है:

#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 , तो हम इस प्रोग्राम को माइक्रोसॉफ्ट विजुअल सी के साथ संकलित कर सकते हैं। हम इस प्रोग्राम को _stat और _stat साथ संकलित भी कर सकते हैं।

माइक्रोसॉफ्ट विजुअल सी के तहत, प्रोग्राम एक mxvcrtnn.dll पुनर्वितरण योग्य रन-टाइम लाइब्रेरी से जुड़ा होगा: mxvcrtnn.dll , जहां nn कुछ संस्करण प्रत्यय है। इस कार्यक्रम को शिप करने के लिए हमें उस डीएलएल को शामिल करना होगा। वह डीएलएल _stat , system और printf प्रदान करता है।

MinGW के तहत, प्रोग्राम msvcrt.dll से जुड़ा होगा, जो एक आंतरिक, अनियंत्रित, अपरिवर्तित लाइब्रेरी है जो विंडोज का हिस्सा है, और एप्लिकेशन उपयोग के लिए ऑफ-सीमा है। वह लाइब्रेरी अनिवार्य रूप से विंडोज़ द्वारा उपयोग के लिए एमएस विजुअल सी से पुनर्वितरण योग्य रन-टाइम लाइब्रेरी का एक कांटा है।

इन दोनों के तहत, कार्यक्रम के समान व्यवहार होंगे:

  • stat फ़ंक्शन बहुत सीमित जानकारी लौटाएगा-उदाहरण के लिए कोई उपयोगी अनुमति या इनोड नंबर नहीं।
  • पथ c:file.txt ड्राइव c: जुड़े वर्तमान कार्यशील निर्देशिका के अनुसार हल किया गया है:।
  • बाहरी आदेश चलाने के लिए system cmd.exe /c का उपयोग करता है।

हम सिग्विन के तहत कार्यक्रम को संकलित भी कर सकते हैं। इसी प्रकार एमएस विजुअल सी द्वारा उपयोग किए जाने वाले पुनर्वितरण योग्य रन-टाइम के लिए, cygwin1.dll के रन-टाइम पुस्तकालयों से जुड़ा होगा: cygwin1.dll ( cygwin1.dll उचित) और cyggcc_s-1.dll (जीसीसी रन-टाइम समर्थन)। चूंकि सिगविन अब एलजीपीएल के अधीन है, इसलिए हम अपने कार्यक्रम के साथ पैकेज कर सकते हैं, भले ही यह जीपीएल-संगत मुक्त सॉफ्टवेयर नहीं है, और कार्यक्रम को शिप करें।

सिगविन के तहत, लाइब्रेरी फ़ंक्शन अलग-अलग व्यवहार करेंगे:

  • stat फ़ंक्शन में समृद्ध कार्यक्षमता है, जो अधिकांश क्षेत्रों में सार्थक मान लौटाती है।
  • पथ c:file.txt को ड्राइव अक्षर संदर्भ के रूप में समझा नहीं जाता है, क्योंकि c: स्लैश द्वारा पीछा नहीं किया जाता है। कोलन को नाम का हिस्सा माना जाता है और किसी भी तरह से इसमें उलझा हुआ है। सिग्विन में वॉल्यूम या ड्राइव के खिलाफ रिश्तेदार पथ की कोई अवधारणा नहीं है, कोई "वर्तमान में लॉग ड्राइव" अवधारणा नहीं है, और कोई प्रति-ड्राइव वर्तमान कार्यशील निर्देशिका नहीं है।
  • system फ़ंक्शन /bin/sh -c दुभाषिया का उपयोग करने का प्रयास करता है। sh.exe आपके निष्पादन योग्य के स्थान के अनुसार / पथ को हल करेगा, और उम्मीद है कि sh.exe प्रोग्राम आपके निष्पादन योग्य के साथ सह-स्थित होगा।

सिग्विन और मिनजीडब्ल्यू दोनों आपको Win32 फ़ंक्शंस का उपयोग करने की अनुमति देते हैं। अगर आप MessageBox या CreateProcess को कॉल करना चाहते हैं, तो आप ऐसा कर सकते हैं। आप आसानी से एक प्रोग्राम भी बना सकते हैं जिसके लिए gcc -mwindows और gcc -mwindows के तहत gcc -mwindows का उपयोग करके कंसोल विंडो की आवश्यकता नहीं होती है।

सिग्विन सख्ती से POSIX नहीं है। विंडोज एपीआई तक पहुंच प्रदान करने के अलावा, यह कुछ माइक्रोसॉफ्ट सी कार्यों ( msvcrt.dll में पाया गया सामान या पुनः वितरित करने msvcrtnn.dll रन-टाइम) के अपने कार्यान्वयन भी प्रदान करता है। इसका एक उदाहरण spawnvp जैसे कार्यों के spawn* परिवार हैं। ये exec पर fork और exec बजाय उपयोग करना एक अच्छा विचार है क्योंकि वे विंडोज़ प्रक्रिया निर्माण मॉडल के लिए बेहतर मानचित्र बनाते हैं जिसमें fork की कोई अवधारणा नहीं है।

इस प्रकार:

  • साइगविन कार्यक्रम पुस्तकालयों के संगत की आवश्यकता के आधार पर एमएस विजुअल सी कार्यक्रमों की तुलना में कम "मूल" नहीं हैं। विंडोज़ पर प्रोग्रामिंग भाषा कार्यान्वयन से उम्मीद है कि वे अपना रन-टाइम, यहां तक ​​कि सी भाषा कार्यान्वयन भी प्रदान करें। सार्वजनिक उपयोग के लिए विंडोज़ पर "libc" नहीं है।

  • तथ्य यह है कि मिनजीडब्ल्यू के लिए कोई तीसरी पार्टी डीएलएल की आवश्यकता नहीं है वास्तव में एक नुकसान है; यह विजुअल सी रन-टाइम के अनियंत्रित, विंडोज-आंतरिक कांटा के आधार पर है। MinGW ऐसा इसलिए करता है क्योंकि जीपीएल सिस्टम लाइब्रेरी अपवाद msvcrt.dll पर लागू होता है, जिसका अर्थ है कि जीपीएल-एड प्रोग्राम को संकलित और मिनीजीडब्ल्यू के साथ पुनर्वितरित किया जा सकता है।

  • msvcrt.dll की तुलना में POSIX के लिए अपने व्यापक और गहन समर्थन के कारण, msvcrt.dll POSIX प्रोग्राम पोर्ट करने के लिए अब तक बेहतर वातावरण है। चूंकि यह अब एलजीपीएल के तहत है, यह पुनर्वितरण के लिए सभी प्रकार के लाइसेंस, खुले या बंद स्रोत के साथ अनुप्रयोगों की अनुमति देता है। सिगविन में वीटी 100 इम्यूलेशन और termios भी शामिल हैं, जो माइक्रोसॉफ्ट कंसोल के साथ काम करते हैं! एक POSIX एप्लिकेशन जो tcsetattr साथ कच्चे मोड को सेट करता है और कर्सर को नियंत्रित करने के लिए VT100 कोड का उपयोग करता है, cmd.exe विंडो में सही काम करेगा। जहां तक ​​अंतिम उपयोगकर्ता का संबंध है, यह एक मूल कंसोल ऐप है जो Win32 कॉल को कंसोल को नियंत्रित करने के लिए बनाता है।

तथापि:

  • एक देशी विंडोज विकास उपकरण के रूप में, सिगविन में कुछ quirks है, जैसे विंडोज़ के लिए विदेशी हैंडलिंग, कुछ हार्ड कोड वाले पथ जैसे /bin/sh और अन्य मुद्दों पर निर्भरता। ये मतभेद हैं जो सिगविन कार्यक्रम "गैर-मूल" प्रस्तुत करते हैं। यदि कोई प्रोग्राम किसी तर्क के रूप में पथ लेता है, या एक संवाद बॉक्स से इनपुट करता है, तो Windows उपयोगकर्ता अपेक्षा करते हैं कि पथ अन्य विंडोज प्रोग्रामों में वैसे ही काम करे। अगर यह इस तरह से काम नहीं करता है, तो यह एक समस्या है।

प्लग: एलजीपीएल घोषणा के कुछ ही समय बाद, मैंने सिग्विन डीएलएल का एक कांटा प्रदान करने के लिए Cygnal (सिग्विन मूल अनुप्रयोग पुस्तकालय) परियोजना शुरू की जिसका उद्देश्य इन मुद्दों को ठीक करना है। प्रोग्राम cygwin1.dll तहत विकसित किए जा सकते हैं, और फिर बिना किसी cygwin1.dll के cygwin1.dll के cygwin1.dll संस्करण के साथ तैनात किए जा सकते हैं। चूंकि इस पुस्तकालय में सुधार होता है, यह धीरे-धीरे MinGW की आवश्यकता को खत्म कर देगा।

जब सिग्नल पथ को संभालने में समस्या हल करता है, तो एक एकल निष्पादन योग्य विकसित करना संभव होगा जो सिग्नल के साथ विंडोज अनुप्रयोग के रूप में भेजे जाने पर विंडोज पथ के साथ काम करता है, और साइगविन पथ के साथ आपके /usr/bin में स्थापित होने पर सहजता से सिग्विन पथ के साथ काम करता है। /cygdrive/c/Users/bob तहत, निष्पादन योग्य पारदर्शी रूप से पथ /cygdrive/c/Users/bob जैसे पथ के साथ काम करेगा। मूल परिनियोजन में जहां यह cygwin1.dll के cygwin1.dll संस्करण से cygwin1.dll , वह पथ कोई समझ नहीं पाएगा, जबकि यह c:foo.txt cygwin1.dll को समझ जाएगा।


Cygwin माइक्रोसॉफ्ट विंडोज के लिए एक यूनिक्स जैसी पर्यावरण और कमांड लाइन इंटरफ़ेस है।

Mingw माइक्रोसॉफ्ट विंडोज के लिए जीएनयू कंपाइलर कलेक्शन (जीसीसी) का मूल सॉफ्टवेयर पोर्ट है, साथ ही विंडोज एपीआई के लिए स्वतंत्र रूप से वितरित आयात पुस्तकालयों और हेडर फाइलों के सेट के साथ। MinGW डेवलपर्स को मूल माइक्रोसॉफ्ट विंडोज अनुप्रयोग बनाने की अनुमति देता है।

आप cygwin पर्यावरण के बिना mingw साथ उत्पन्न बाइनरी चला सकते हैं, बशर्ते कि सभी आवश्यक पुस्तकालय (डीएलएल) मौजूद हों।


विकिपीडिया कहते हैं :

MinGW Cygwin संस्करण 1.3.3 से फोर्क किया। यद्यपि Cygwin और MinGW दोनों का उपयोग UNIX सॉफ्टवेयर को Windows करने के लिए किया जा सकता है, उनके पास अलग-अलग दृष्टिकोण हैं: Cygwin उद्देश्य एक पूर्ण POSIX layer प्रदान करना है जो Linux , UNIX और BSD संस्करणों पर मौजूद कई सिस्टम कॉल और पुस्तकालयों के अनुकरण प्रदान करता है। POSIX layer Windows शीर्ष पर चलता है, जो अनुकूलता के लिए आवश्यक प्रदर्शन का त्याग करता है। तदनुसार, इस दृष्टिकोण के लिए Cygwin साथ लिखे गए Windows प्रोग्राम की आवश्यकता है जो प्रतिलिपि बनाई गई संगतता लाइब्रेरी के शीर्ष पर चलने के लिए प्रोग्राम प्रोग्राम के source code के साथ प्रोग्राम के साथ वितरित किया जाना चाहिए। MinGW उद्देश्य प्रत्यक्ष Windows API calls माध्यम से देशी कार्यक्षमता और प्रदर्शन प्रदान करना है। MinGW विपरीत, MinGW को एक संगतता परत DLL आवश्यकता नहीं है और इस प्रकार प्रोग्राम को source code साथ वितरित करने की आवश्यकता नहीं है।

चूंकि MinGW Windows API calls पर निर्भर है, यह एक पूर्ण POSIX API प्रदान नहीं कर सकता POSIX API ; यह कुछ UNIX applications को संकलित करने में असमर्थ है जिसे Cygwin साथ संकलित किया जा सकता Cygwin । विशेष रूप से, यह उन अनुप्रयोगों पर लागू होता है जिनके लिए POSIX कार्यक्षमता जैसे fork() , mmap() या ioctl() और वे जो POSIX environment में चलने की अपेक्षा करते POSIX environment । एक cross-platform library का उपयोग करके लिखे गए एप्लीकेशन जिन्हें स्वयं को SDL , wxWidgets , Qt , या GTK+ जैसे MinGW में भेज दिया गया है, आमतौर पर MinGW में जितना आसानी से MinGW उतना ही संकलित होगा।

MinGW और MSYS का संयोजन एक छोटा, स्वयं निहित वातावरण प्रदान करता है जिसे कंप्यूटर पर रजिस्ट्री या फ़ाइलों में प्रविष्टियों को छोड़ दिए बिना हटाने योग्य मीडिया पर लोड किया जा सकता है। Cygwin पोर्टेबल एक समान सुविधा प्रदान करता है। अधिक कार्यक्षमता प्रदान करके, Cygwin स्थापित और बनाए रखने के लिए और अधिक जटिल हो जाता है।

MinGW-GCC under POSIX systems साथ cross-compile Windows applications को cross-compile Windows applications करना भी संभव है। इसका अर्थ यह है कि डेवलपर्स को सॉफ़्टवेयर को संकलित करने के लिए MSYS साथ Windows स्थापना की आवश्यकता नहीं है जो बिना MSYS Windows पर चलेंगे।


एटी एंड टी के U/Win सॉफ़्टवेयर को अनदेखा न करें, जो आपको विंडोज़ पर यूनिक्स अनुप्रयोगों को संकलित करने में मदद के लिए डिज़ाइन किया गया है (अंतिम संस्करण - 2012-08-06; ग्रहण सार्वजनिक लाइसेंस, संस्करण 1.0 का उपयोग करता है)।

सिगविन की तरह उन्हें पुस्तकालय के खिलाफ भागना है; उनके मामले में POSIX.DLL । एटी एंड टी लोग भयानक इंजीनियरों (एक ही समूह जो आपको ksh और dot लाए हैं) और उनकी सामग्री जांचने लायक है।





mingw