मैं अपना C ++ प्रोजेक्ट क्रॉस प्लेटफॉर्म बनाना चाहता हूं, और मैं Cygwin / MinGW का उपयोग करने पर विचार कर रहा हूं। लेकिन उनमें क्या अंतर है?
एक और सवाल यह है कि क्या मैं सिग्विन / मिनगव के बिना सिस्टम पर बाइनरी चला पाऊंगा?
मैं अपना C ++ प्रोजेक्ट क्रॉस प्लेटफॉर्म बनाना चाहता हूं, और मैं Cygwin / MinGW का उपयोग करने पर विचार कर रहा हूं। लेकिन उनमें क्या अंतर है?
एक और सवाल यह है कि क्या मैं सिग्विन / मिनगव के बिना सिस्टम पर बाइनरी चला पाऊंगा?
जवाबों:
सरलीकरण के रूप में, यह इस तरह है:
Cygwin में कुछ संकलित करें और आप इसे Cygwin के लिए संकलित कर रहे हैं ।
MinGW में कुछ संकलित करें और आप इसे विंडोज के लिए संकलित कर रहे हैं ।
साइगविन के बारे में
सिग्विन का उद्देश्य यूनिक्स-आधारित अनुप्रयोगों को विंडोज के लिए अधिक आसान बनाना है, यूनिक्स-आधारित ऑपरेटिंग सिस्टम प्रदान करने वाले कई छोटे विवरणों का अनुकरण करके और पोसिक्स मानकों द्वारा प्रलेखित हैं । आपका एप्लिकेशन यूनिक्स फीचर का उपयोग कर सकता है जैसे कि पाइप, यूनिक्स-स्टाइल फाइल और डायरेक्ट्री एक्सेस, और इसके आगे, और यह साइगविन के साथ संकलित किया जा सकता है जो आपके आवेदन के चारों ओर एक अनुकूलता परत के रूप में कार्य करेगा , ताकि उन यूनिक्स-विशिष्ट प्रतिमानों में से कई का उपयोग किया जा सके। इस्तेमाल किया जाना जारी है।
जब आप अपने सॉफ़्टवेयर को वितरित करते हैं, तो प्राप्तकर्ता को इसे सिगविन रन-टाइम वातावरण (फ़ाइल द्वारा प्रदान cygwin1.dll
) के साथ चलाने की आवश्यकता होगी । आप इसे अपने सॉफ़्टवेयर के साथ वितरित कर सकते हैं, लेकिन आपके सॉफ़्टवेयर को इसके ओपन सोर्स लाइसेंस का पालन करना होगा। यह मामला भी हो सकता है कि यहां तक कि अपने सॉफ़्टवेयर को इसके साथ लिंक करना, लेकिन डीएल को अलग से वितरित करना, फिर भी आपको ओपन सोर्स लाइसेंस का सम्मान करने की आवश्यकता हो सकती है।
MinGW के बारे में
MinGW का उद्देश्य केवल जीएनयू संकलक उपकरण का एक विंडोज पोर्ट होना चाहिए, जैसे कि जीसीसी, मेक, बैश, और इसी तरह। यह यूनिक्स के साथ व्यापक संगतता का अनुकरण या प्रदान करने का प्रयास नहीं करता है, बल्कि यह जीसीसी (जीएनयू कंपाइलर) और विंडोज पर अन्य उपकरणों की एक छोटी संख्या का उपयोग करने के लिए न्यूनतम आवश्यक वातावरण प्रदान करता है ।। इसमें साइग्विन की तरह एक यूनिक्स एमुलेशन लेयर नहीं है, लेकिन परिणामस्वरूप आपके एप्लिकेशन को विशेष रूप से विंडोज में चलने में सक्षम होने के लिए प्रोग्राम करने की आवश्यकता है, जिसका मतलब है कि अगर यह एक मानक यूनिक्स वातावरण में चलाने पर भरोसा करने के लिए बनाया गया था, तो यह महत्वपूर्ण परिवर्तन हो सकता है और यूनिक्स-विशिष्ट सुविधाओं का उपयोग करता है जैसे कि पहले उल्लेख किया गया है। डिफ़ॉल्ट रूप से, MinGW के GCC में संकलित कोड एक देशी विंडोज X86 लक्ष्य को संकलित करेगा, जिसमें .exe और .dll फाइलें शामिल हैं, हालांकि आप सही सेटिंग्स के साथ क्रॉस-संकलन भी कर सकते हैं, क्योंकि आप मूल रूप से GNU कंपाइलर स्क्रीन सूट का उपयोग कर रहे हैं।
MinGW अनिवार्य रूप से Microsoft Visual C ++ कंपाइलर और उससे जुड़े लिंकिंग / उपकरण बनाने का एक विकल्प है । कुछ मामलों में न्यूनतम दृश्य पुस्तकालयों के साथ और अन्य संशोधनों के साथ कुछ मामलों में Microsoft Visual C ++ के संकलन के लिए इच्छित कुछ संकलन करने के लिए MinGW का उपयोग करना संभव हो सकता है।
MinGW में विंडोज ऑपरेटिंग सिस्टम के साथ बातचीत के लिए कुछ बुनियादी मानक लाइब्रेरी शामिल हैं, लेकिन GNU कंपाइलर संग्रह में शामिल सामान्य मानक पुस्तकालयों के साथ ये आपके द्वारा बनाए गए सॉफ़्टवेयर पर लाइसेंस प्रतिबंध नहीं लगाते हैं।
गैर-तुच्छ सॉफ़्टवेयर अनुप्रयोगों के लिए, जब तक आप एक व्यापक क्रॉस-प्लेटफ़ॉर्म फ्रेमवर्क का उपयोग नहीं करते हैं, तब तक उन्हें क्रॉस-प्लेटफ़ॉर्म बनाना एक बड़ी चुनौती हो सकती है। जिस समय मैंने इसे लिखा था Qt फ्रेमवर्क इस उद्देश्य के लिए सबसे लोकप्रिय में से एक था, जिससे आलेखीय अनुप्रयोगों के निर्माण की अनुमति मिलती है जो विंडोज सहित ऑपरेटिंग सिस्टम पर काम करते हैं, लेकिन अन्य विकल्प भी हैं। यदि आप शुरू से ही इस तरह के ढांचे का उपयोग करते हैं, तो आप न केवल अपने सिरदर्द को कम कर सकते हैं, जब किसी अन्य प्लेटफ़ॉर्म पर पोर्ट करने का समय आता है, लेकिन आप एक ही ग्राफिकल विजेट का उपयोग कर सकते हैं - विंडोज़, मेनू और नियंत्रण - यदि आप लिख रहे हैं तो सभी प्लेटफार्मों पर जीयूआई एप्लिकेशन, और उन्हें उपयोगकर्ता के लिए मूल दिखाई देते हैं।
Cygwin विंडोज पर एक पूर्ण UNIX / POSIX वातावरण बनाने का प्रयास है। ऐसा करने के लिए यह विभिन्न DLL का उपयोग करता है। हालांकि इन DLL को GPLv3 + द्वारा कवर किया गया है, लेकिन उनके लाइसेंस में एक अपवाद है जो GPLv3 + द्वारा कवर किए जाने के लिए व्युत्पन्न कार्य को बाध्य नहीं करता है। MinGW एक C / C ++ कंपाइलर सूट है जो आपको ऐसे DLL पर निर्भरता के बिना Windows निष्पादक बनाने की अनुमति देता है - आपको केवल सामान्य MSVC रनटाइम की आवश्यकता है, जो कि किसी भी सामान्य Microsoft Windows स्थापना का हिस्सा हैं।
आप एक छोटा सा UNIX / POSIX पर्यावरण की तरह भी प्राप्त कर सकते हैं, जिसे MSYS नाम के MinGW के साथ संकलित किया गया है । यह Cygwin की सभी विशेषताओं के पास कहीं भी नहीं है, लेकिन प्रोग्रामर जो MinGW का उपयोग करना चाहते हैं, उनके लिए आदर्श है।
अन्य उत्तरों में जोड़ने के लिए, साइगविन मिनगॉव पुस्तकालयों और हेडर के साथ आता है और आप gg के साथ -mno-cygwin ध्वज का उपयोग करके cygwin1.dll से लिंक किए बिना संकलन कर सकते हैं। मैं बहुत सादा MinGW और MSYS का उपयोग करना पसंद करता हूं।
gcc-3 -mno-cygwin
mingw64-x86_64-gcc-core
सिगविन पैकेज स्थापित करें । MinGW-64 तब अजीब रूप से नामित x86_64-w64-mingw32-gcc
कमांड के रूप में उपलब्ध होगा । कृपया भगवान (ओं), किसी ने पहले से ही इन खूनी चीजों के नामों को एकजुट किया।
विकिपीडिया यहाँ तुलना करता है ।
साइगविन की वेबसाइट से :
- Cygwin विंडोज के लिए लिनक्स जैसा वातावरण है। इसमें दो भाग होते हैं: एक DLL (cygwin1.dll) जो लिनक्स एपीआई इम्यूलेशन लेयर के रूप में कार्य करता है जो पर्याप्त लिनक्स एपीआई कार्यक्षमता प्रदान करता है।
- औज़ारों का एक संग्रह जो लिनक्स लुक और फील प्रदान करता है।
मिंगव की वेबसाइट से :
MinGW ("विंडोज के लिए मिनिमलिस्टिक GNU) स्वतंत्र रूप से उपलब्ध और स्वतंत्र रूप से वितरण योग्य विंडोज विशिष्ट हेडर फ़ाइलों और आयात पुस्तकालयों का एक संग्रह है, जो GNU टूलसेट के साथ संयुक्त है, जो किसी को भी किसी भी 3-पार्टी सीटाइम डीएलएल पर भरोसा नहीं करने वाले देशी विंडोज कार्यक्रमों का उत्पादन करने की अनुमति देता है
Cygwin Windows पर POSIX जैसा रनटाइम प्रदान करने के लिए DLL, cygwin.dll, (या शायद DLL का एक सेट) का उपयोग करता है।
MinGW एक देशी Win32 अनुप्रयोग के लिए संकलित करता है।
यदि आप Cygwin के साथ कुछ बनाते हैं, तो आप इसे स्थापित करने वाली किसी भी प्रणाली को Cygwin DLL (s) की आवश्यकता होगी। एक MinGW एप्लिकेशन को किसी विशेष रनटाइम की आवश्यकता नहीं है।
Cygwin और MinGW के बीच अंतर को समझने के लिए इन सवालों के जवाब पढ़ें।
प्रश्न # 1: मैं एक एप्लिकेशन बनाना चाहता हूं जिसे मैं एक बार स्रोत कोड लिखता हूं, इसे एक बार संकलित करता हूं और इसे किसी भी प्लेटफॉर्म (जैसे विंडोज, लिनक्स और मैक ओएस एक्स…) में चलाता हूं।
उत्तर # 1: जावा में अपना स्रोत कोड लिखें। स्रोत कोड को एक बार संकलित करें और इसे कहीं भी चलाएं।
प्रश्न # 2: मैं एक एप्लिकेशन बनाना चाहता हूं जिसे मैं एक बार सोर्स कोड लिखता हूं लेकिन कोई समस्या नहीं है कि मैं किसी भी प्लेटफॉर्म के लिए स्रोत कोड को अलग से संकलित करता हूं (जैसे विंडोज, लिनक्स और मैक ओएस एक्स…)।
उत्तर # 2: C या C ++ में अपना सोर्स कोड लिखें। मानक हेडर फ़ाइलों का ही उपयोग करें। किसी भी प्लेटफ़ॉर्म के लिए उपयुक्त कंपाइलर का उपयोग करें (उदाहरण के लिए विंडोज के लिए विजुअल स्टूडियो, लिनक्स के लिए जीसीसी और मैक के लिए एक्सकोड)। ध्यान दें कि आपको किसी भी उन्नत प्रोग्रामिंग सुविधाओं का उपयोग सभी प्लेटफार्मों में अपने स्रोत कोड को सफलतापूर्वक संकलित करने के लिए नहीं करना चाहिए। यदि आप कोई भी C या C ++ मानक कक्षाएं या फ़ंक्शंस का उपयोग नहीं करते हैं, तो आपका स्रोत कोड अन्य प्लेटफार्मों में संकलित नहीं होता है।
प्रश्न # 3: प्रश्न # 2 के उत्तर में, प्रत्येक प्लेटफ़ॉर्म के लिए अलग-अलग संकलक का उपयोग करना मुश्किल है, क्या कोई क्रॉस प्लेटफ़ॉर्म संकलक है?
उत्तर # 3: हाँ, GCC कंपाइलर का उपयोग करें। यह एक क्रॉस प्लेटफॉर्म कंपाइलर है। Windows में अपने स्रोत कोड को संकलित करने के लिए MinGW का उपयोग करें जो Windows के लिए GCC संकलक प्रदान करता है और आपके स्रोत कोड को मूल Windows प्रोग्राम में संकलित करता है। सभी प्लेटफार्मों में अपने स्रोत कोड को सफलतापूर्वक संकलित करने के लिए किसी भी उन्नत प्रोग्रामिंग सुविधाओं (जैसे विंडोज एपीआई) का उपयोग न करें। यदि आप Windows API फ़ंक्शन का उपयोग करते हैं, तो आपका स्रोत कोड अन्य प्लेटफार्मों में संकलित नहीं होता है।
प्रश्न # 4: C या C ++ मानक हेडर फाइलें मल्टी-थ्रेडिंग जैसी कोई उन्नत प्रोग्रामिंग सुविधाएँ प्रदान नहीं करती हैं। मैं क्या कर सकता हूँ?
उत्तर # 4: आपको POSIX (पोर्टेबल ऑपरेटिंग सिस्टम इंटरफ़ेस [UNIX के लिए)) मानक का उपयोग करना चाहिए। यह कई उन्नत प्रोग्रामिंग सुविधाएँ और उपकरण प्रदान करता है। कई ऑपरेटिंग सिस्टम पूरी तरह या आंशिक रूप से POSIX संगत (जैसे मैक ओएस एक्स, सोलारिस, बीएसडी / ओएस और ...)। कुछ ऑपरेटिंग सिस्टम जबकि आधिकारिक तौर पर POSIX के रूप में प्रमाणित नहीं हैं, बड़े हिस्से (जैसे लिनक्स, फ्रीबीएसडी, ओपनसोलारिस और ...) में अनुरूप हैं। Cygwin Microsoft Windows के लिए एक बड़े पैमाने पर POSIX- संगत विकास और रन-टाइम वातावरण प्रदान करता है।
इस प्रकार:
सी प्रोग्राम को पोर्ट करने के दृष्टिकोण से, इसे समझने का एक अच्छा तरीका एक उदाहरण लेना है:
#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
, जो कि एक आंतरिक, अविभाजित, बिना लाइसेंस की लाइब्रेरी है जो विंडोज का हिस्सा है, और एप्लिकेशन उपयोग के लिए ऑफ-लिमिट है। वह लाइब्रेरी मूल रूप से विंडोज द्वारा उपयोग के लिए MS Visual C से पुनर्वितरण योग्य रन-टाइम लाइब्रेरी का एक कांटा है।
इन दोनों के तहत, कार्यक्रम में समान व्यवहार होंगे:
stat
समारोह उदाहरण के लिए बहुत सीमित जानकारी-कोई उपयोगी अनुमतियों या आइनोड संख्या वापस आ जाएगी।c:file.txt
को ड्राइव के साथ जुड़े वर्तमान कार्यशील निर्देशिका के अनुसार हल किया गया है c:
।system
cmd.exe /c
बाहरी कमांड चलाने के लिए उपयोग करता है ।हम Cygwin के तहत भी कार्यक्रम संकलित कर सकते हैं। एमएस विज़ुअल सी द्वारा उपयोग किए जाने वाले पुनर्वितरण योग्य रन-टाइम के समान, सिग्विन कार्यक्रम को सिग्विन की रन-टाइम लाइब्रेरी से जोड़ा जाएगा: cygwin1.dll
(साइगविन उचित) और cyggcc_s-1.dll
(जीसीसी रन-टाइम समर्थन)। चूंकि Cygwin अब LGPL के अधीन है, हम अपने प्रोग्राम के साथ पैकेज कर सकते हैं, भले ही यह GPL- संगत फ्री सॉफ्टवेयर न हो, और प्रोग्राम को शिप करें।
साइगविन के तहत, पुस्तकालय के कार्य अलग तरह से व्यवहार करेंगे:
stat
समारोह क्षेत्रों के अधिकांश में सार्थक मूल्यों लौटने, अमीर कार्यक्षमता है।c:file.txt
को ड्राइव अक्षर के संदर्भ के रूप में बिल्कुल भी नहीं समझा जाता है, क्योंकि c:
स्लैश का पालन नहीं किया जाता है। बृहदान्त्र को नाम का हिस्सा माना जाता है और किसी भी तरह से इसे उखाड़ दिया जाता है। साइग्विन में वॉल्यूम या ड्राइव के विरुद्ध एक सापेक्ष पथ की कोई अवधारणा नहीं है, कोई "वर्तमान में लॉग ड्राइव" अवधारणा नहीं है, और प्रति-ड्राइव वर्तमान कार्यशील निर्देशिका नहीं है।system
समारोह का उपयोग करने की कोशिश करता /bin/sh -c
दुभाषिया। Cygwin /
आपके निष्पादन योग्य स्थान के अनुसार पथ को हल करेगा , और एक sh.exe
प्रोग्राम को आपके निष्पादन योग्य के साथ सह-स्थित होने की उम्मीद करेगा ।Cygwin और MinGW दोनों आपको Win32 फ़ंक्शन का उपयोग करने की अनुमति देते हैं। यदि आप कॉल करना चाहते हैं MessageBox
या CreateProcess
, आप ऐसा कर सकते हैं। आप आसानी से एक प्रोग्राम भी बना सकते हैं, जिसमें gcc -mwindows
मिनॉग और साइगविन के तहत , कंसोल विंडो का उपयोग करने की आवश्यकता नहीं है।
Cygwin कड़ाई से POSIX नहीं है। विंडोज एपीआई तक पहुंच प्रदान करने के अलावा, यह कुछ माइक्रोसॉफ्ट सी फ़ंक्शन ( msvcrt.dll
फिर से वितरण योग्य msvcrtnn.dll
रन-टाइम में पाया जाने वाला सामान) या अपने स्वयं के कार्यान्वयन भी प्रदान करता है । इसका एक उदाहरण इस spawn*
तरह के कार्यों का परिवार है spawnvp
। ये एक अच्छा विचार है कि सिग्विन पर fork
और इसके बजाय उपयोग करने के लिए एक अच्छा विचार exec
है क्योंकि वे विंडोज प्रक्रिया निर्माण मॉडल के लिए बेहतर मैप करते हैं जिसकी कोई अवधारणा नहीं है fork
।
इस प्रकार:
पुस्तकालयों की संगत की आवश्यकता के आधार पर एमएस विजुअल सी कार्यक्रमों की तुलना में सिग्विन कार्यक्रम "देशी" कम नहीं हैं। विंडोज पर प्रोग्रामिंग भाषा कार्यान्वयन को अपने स्वयं के रन-टाइम, यहां तक कि सी भाषा कार्यान्वयन प्रदान करने की उम्मीद है। सार्वजनिक उपयोग के लिए विंडोज पर कोई "libc" नहीं है।
तथ्य यह है कि मिनगवे को किसी तीसरे पक्ष के डीएलएल की आवश्यकता नहीं है, वास्तव में नुकसान है; यह दृश्य सी रन-टाइम के एक अनिर्दिष्ट, विंडोज-आंतरिक कांटे पर निर्भर करता है। MinGW ऐसा इसलिए करता है क्योंकि GPL सिस्टम लाइब्रेरी अपवाद पर लागू होता है msvcrt.dll
, जिसका अर्थ है कि GPL-ed प्रोग्रामों को संकलित करके MinGW के साथ पुनर्वितरित किया जा सकता है।
POSIX की तुलना में इसके व्यापक और गहरे समर्थन के कारण msvcrt.dll
, Cygwin, POSIX कार्यक्रमों को पोर्ट करने के लिए बेहतर वातावरण है। चूंकि यह अब LGPL के अधीन है, इसलिए यह सभी प्रकार के लाइसेंस, ओपन या क्लोज्ड सोर्स के साथ एप्लिकेशन को पुनर्वितरित करने की अनुमति देता है। Cygwin में VT100 इम्यूलेशन भी होता है और termios
जो Microsoft कंसोल के साथ काम करता है! एक POSIX एप्लिकेशन जो tcsetattr
कर्सर को नियंत्रित करने के लिए VT100 कोड का उपयोग करता है और cmd.exe
विंडो में सही काम करेगा । जहां तक एंड-यूज़र का सवाल है, यह कंसोल को नियंत्रित करने के लिए Win32 कॉल करने वाला एक देशी कंसोल ऐप है।
तथापि:
/bin/sh
और अन्य मुद्दों पर निर्भरता । ये अंतर हैं जो Cygwin कार्यक्रमों को "गैर-देशी" प्रदान करते हैं। यदि कोई प्रोग्राम एक तर्क के रूप में एक पथ लेता है, या एक संवाद बॉक्स से इनपुट करता है, तो विंडोज उपयोगकर्ता उस पथ को उसी तरह से काम करने की अपेक्षा करते हैं जैसे कि अन्य विंडोज कार्यक्रमों में करता है। अगर यह उस तरह से काम नहीं करता है, तो यह एक समस्या है।प्लग: LGPL की घोषणा के तुरंत बाद, मैंने Cygwin DLL का एक कांटा प्रदान करने के लिए Cygnal (Cygwin Native Application Library) परियोजना शुरू की जिसका उद्देश्य इन मुद्दों को ठीक करना है। प्रोग्राम्स को सिग्विन के तहत विकसित किया जा सकता है, और फिर cygwin1.dll
बिना पुनर्नवीनीकरण के सिग्नल संस्करण के साथ तैनात किया जा सकता है । जैसे-जैसे यह पुस्तकालय सुधरता है, यह धीरे-धीरे मिनगीड की आवश्यकता को समाप्त कर देगा।
जब सिग्नल पथ से निपटने की समस्या का हल करता है, तो एकल निष्पादन योग्य विकसित करना संभव होगा जो कि साइग्नल के साथ विंडोज एप्लिकेशन के रूप में भेजे जाने पर विंडोज पथों के साथ काम करता है, और साइगविन के साथ आपके /usr/bin
अंडर में स्थापित होने पर साइगविन पथों के साथ काम करता है। साइगविन के तहत, निष्पादन योग्य पारदर्शी रूप से एक पथ के साथ काम करेगा /cygdrive/c/Users/bob
। देशी परिनियोजन में, जहां यह सिग्नल संस्करण के विरुद्ध लिंक कर रहा है cygwin1.dll
, उस पथ का कोई अर्थ नहीं होगा, जबकि यह समझ में आएगा c:foo.txt
।
MinGW
संस्करण 1.3.3 से कांटा गयाCygwin
। दोनों हालांकिCygwin
औरMinGW
बंदरगाह के लिए इस्तेमाल किया जा सकताUNIX
करने के लिए सॉफ्टवेयरWindows
, वे अलग अलग दृष्टिकोण है:Cygwin
एक पूर्ण प्रदान करना हैPOSIX layer
कि कई सिस्टम कॉल और पुस्तकालयों कि पर मौजूद emulations प्रदान करता हैLinux
,UNIX
औरBSD
वेरिएंट।POSIX layer
के शीर्ष पर चलता हैWindows
, जहां आवश्यक संगतता के लिए प्रदर्शन का त्याग। तदनुसार, इस दृष्टिकोण कोWindows
प्रोग्राम के साथCygwin
वितरित किया जाना चाहिए, जो एक copylefted संगतता पुस्तकालय के शीर्ष पर चलने के लिए लिखे गए कार्यक्रमों की आवश्यकता होती है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
। इसका मतलब यह है कि डेवलपर्सMSYS
को सॉफ़्टवेयर संकलित करने के लिए एक विंडोज इंस्टॉलेशन की आवश्यकता नहीं है जोWindows
बिना चलेगाCygwin
।
एटी एंड टी के यू / विन सॉफ्टवेयर को अनदेखा न करें , जो विंडोज़ पर यूनिक्स अनुप्रयोगों को संकलित करने में आपकी सहायता के लिए बनाया गया है (अंतिम संस्करण 2012-08-06; एक्लिप्स पब्लिक लाइसेंस, संस्करण 1.0 का उपयोग करता है)।
साइगविन की तरह उन्हें एक पुस्तकालय के खिलाफ दौड़ना होगा; उनके मामले में POSIX.DLL
। AT & T लोग भयानक इंजीनियर हैं (वही समूह जो आपके लिए ksh और dot लाया है ) और उनके सामान की जाँच करने लायक है।
Cygwin पूरे POSIX वातावरण का अनुकरण करता है, जबकि MinGW केवल संकलन के लिए न्यूनतम उपकरण सेट है (देशी विन एप्लिकेशन को संकलित करता है।) इसलिए यदि आप अपने प्रोजेक्ट को क्रॉस-प्लेटफ़ॉर्म बनाना चाहते हैं तो दोनों के बीच का विकल्प स्पष्ट है, MinGW।
हालाँकि आप विन्डोज़, जीसीसी पर लिनक्स / यूनिक्स पर वीएस का उपयोग करने पर विचार कर सकते हैं। अधिकांश ओपन सोर्स प्रोजेक्ट्स (जैसे फ़ायरफ़ॉक्स या पायथन) करते हैं।
clang
एक व्यवहार्य क्रॉस-प्लेटफ़ॉर्म समाधान है।
ध्यान दें कि उपयोगिता व्यवहार वास्तव में दोनों के बीच भिन्न हो सकते हैं।
उदाहरण के लिए, साइगविन टार्क कांटा - क्योंकि फोर्क () डीएलएल में समर्थित है - जहां मिंगव वर्जन नहीं कर सकता है। यह एक समस्या है जब स्रोत से mysql को संकलित करने की कोशिश की जाती है।
एक वाणिज्यिक / मालिकाना / गैर-ओपन-सोर्स एप्लिकेशन में सिगविन का उपयोग करने के लिए, आपको Red Hat से " लाइसेंस बायआउट " के लिए दसियों हज़ार डॉलर निकालने होंगे ; यह मानक लाइसेंस शर्तों को काफी लागत पर अमान्य करता है । Google "साइबर लाइसेंस की लागत" और पहले कुछ परिणाम देखें।
मिंगव के लिए, इस तरह की कोई लागत नहीं है, और लाइसेंस (पीडी, बीएसडी, एमआईटी) बेहद अनुमत हैं। अधिकांश से आपको अपने आवेदन के साथ लाइसेंस विवरण की आपूर्ति करने की उम्मीद की जा सकती है, जैसे कि mww64-tdm का उपयोग करते समय आवश्यक winpthreads लाइसेंस।
ईजीआईटी का धन्यवाद इज़ी हेलियनथस के लिए: वाणिज्यिक लाइसेंस अब उपलब्ध नहीं है या आवश्यक नहीं है क्योंकि सिग्विन के विंडस उपनिर्देशिका में पाया गया एपीआई पुस्तकालय अब एलजीपीएल के तहत वितरित किया जा रहा है, पूर्ण जीपीएल के विपरीत।
Cygwin को Windows के लिए अधिक या कम पूर्ण POSIX वातावरण प्रदान करने के लिए डिज़ाइन किया गया है, जिसमें पूर्ण-लिनक्स लिनक्स जैसे प्लेटफ़ॉर्म प्रदान करने के लिए डिज़ाइन किए गए टूल का एक व्यापक सेट शामिल है। इसकी तुलना में, मिनगीडब्ल्यू और एमएसवाईएस एक हल्के, न्यूनतम पॉसिक्स जैसी परत प्रदान करते हैं, जिसमें केवल अधिक आवश्यक उपकरण जैसे उपलब्ध gcc
और bash
उपलब्ध हैं। मिनगॉव के अधिक न्यूनतम दृष्टिकोण के कारण, यह पोसिक्स एपीआई कवरेज साइग्विन ऑफ़र की डिग्री प्रदान नहीं करता है, और इसलिए कुछ निश्चित कार्यक्रमों का निर्माण नहीं कर सकता है जो अन्यथा सिग्विन पर संकलित किए जा सकते हैं।
दोनों द्वारा उत्पन्न कोड के संदर्भ में, सिग्विन टूलचैन एक बड़े रनटाइम लाइब्रेरी के लिए डायनेमिक लिंकिंग पर निर्भर करता है cygwin1.dll
, जबकि मिनगव टूलकैन बायनेरिज़ के लिए कोड संकलित करता है जो गतिशील रूप से विंडोज देशी सी लाइब्रेरी के msvcrt.dll
साथ-साथ भागों के लिए सांख्यिकीय रूप से लिंक करता है glibc
। Cygwin निष्पादक इसलिए अधिक कॉम्पैक्ट होते हैं, लेकिन एक अलग पुनर्वितरण DLL की आवश्यकता होती है, जबकि MinGW बायनेरिज़ को स्टैंडअलोन भेज दिया जा सकता है लेकिन बड़ा हो सकता है।
तथ्य यह है कि साइग्विन-आधारित कार्यक्रमों को चलाने के लिए एक अलग डीएलएल की आवश्यकता होती है जो लाइसेंसिंग प्रतिबंधों की ओर जाता है। Cygwin रनटाइम लाइब्रेरी को GPLv3 के तहत लाइसेंस प्राप्त किया गया है, जिसमें OSI- अनुरूप लाइसेंस के साथ आवेदन के लिए एक अपवाद है, इसलिए Cygwin के चारों ओर एक बंद स्रोत एप्लिकेशन बनाने के इच्छुक डेवलपर्स को Red Hat से व्यावसायिक लाइसेंस प्राप्त करना होगा। दूसरी ओर, मिनगडब्ल्यू कोड का उपयोग ओपन-सोर्स और क्लोज-सोर्स दोनों अनुप्रयोगों में किया जा सकता है, क्योंकि हेडर और लाइब्रेरीज़ को लाइसेंस प्राप्त है।
साइगविन माइक्रोसॉफ्ट विंडोज के लिए यूनिक्स जैसा वातावरण और कमांड-लाइन इंटरफेस है।
मिंगव माइक्रोसॉफ्ट विंडोज के लिए जीएनयू कंपाइलर कलेक्शन (जीसीसी) का एक देशी सॉफ्टवेयर पोर्ट है, साथ ही विंडोज एपीआई के लिए स्वतंत्र रूप से वितरण योग्य आयात पुस्तकालयों और हेडर फ़ाइलों का एक सेट है। MinGW डेवलपर्स को मूल Microsoft Windows अनुप्रयोग बनाने की अनुमति देता है।
आप पर्यावरण के mingw
बिना उत्पन्न बायनेरिज़ को चला सकते हैं cygwin
, बशर्ते कि सभी आवश्यक पुस्तकालय (DLL) मौजूद हों।
Cygwin
जबकि अनुकूलता परत का उपयोग करता है MinGW
देशी है है। यह मुख्य अंतरों में से एक है।