2013-04-29 9 views
15

मैं समझने की कोशिश कर रहा हूं कि वास्तव में सिगविन और मिनजीडब्ल्यू क्या हैं और इसे बहुत भ्रमित कर रहे हैं। यदि आप सी ++ में प्रोग्राम करना चाहते हैं तो क्या आपको बस एक सी ++ कंपाइलर की आवश्यकता नहीं है? मैंने जो पढ़ा है, उससे ऐसा लगता है कि वे विंडोज पर ऑपरेटिंग सिस्टम की तरह यूनिक्स प्रदान करने का प्रयास करते हैं लेकिन मुझे इसका महत्व नहीं दिखता है। मेरा मतलब है कि क्या कोई कारण है कि सी ++ को मूल रूप से विंडोज़ पर संकलित नहीं किया जा सकता है? मैंने यह भी पढ़ा कि उनमें पुस्तकालय शामिल हैं, ऐसा इसलिए है क्योंकि सी ++ कोर भाषा कई कार्यों का समर्थन नहीं करती है, इसलिए math.h जैसे बहुत आम पुस्तकालय इसके साथ आते हैं?साइगविन और मिनजीडब्ल्यू क्यों आवश्यक हैं?

+0

आपको विंडोज़ पर सी ++ संकलित करने की आवश्यकता नहीं है। वे सिर्फ आपको जीसीसी प्रदान करते हैं। – Blender

+0

@ ब्लेंडर तो आप जो कह रहे हैं वह है कि वे विंडो पर जीसीसी चलाने के लिए अनुमति देते हैं और चूंकि जीसीसी इतना लोकप्रिय है कि यह वांछनीय है? – Celeritas

+2

जीसीसी वहां से कई सी/सी ++ कंपाइलरों में से एक है। – Blender

उत्तर

8

इस विवरण पहले से ही कहीं नीचे लिखा जा के लिए बाध्य है, लेकिन यहाँ वैसे भी जाता है ...

Cygwin एक POSIX संगत Win32 एपीआई के ऊपर एक बने क्रम है। यह एक बड़े पैमाने पर अनुपालन POSIX सी लाइब्रेरी प्रदान करता है, और उसके आस-पास, पैकेज प्रबंधक के साथ "सिग्विन डिस्ट्रो" का एक प्रकार है जो आपको सिगविन के तहत चलाने के लिए पोर्ट किए गए यूनिक्स प्रोग्रामों का एक टन स्थापित करने की अनुमति देता है। इनमें यूनिक्स शैल, जीसीसी (सिग्विन के लिए), एक्स, क्रॉस-कंपाइलर्स का एक गुच्छा इत्यादि शामिल है ...

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

ध्यान दें कि सिगविन Win32 क्रॉस-कंपाइलर्स को सिगविन भी प्रदान करता है: ये सिग्विन प्लेटफ़ॉर्म पर चलते हैं लेकिन मूल Win32 निष्पादन योग्य उत्पन्न करते हैं।

एक और खिलाड़ी, एमएसवाईएस, सिगविन का हल्का कांटा है, जो विंडोज पर ऑटोोटूल बिल्ड स्क्रिप्ट चलाने के लिए केवल न्यूनतम मात्रा में टूल प्रदान करता है। एमएसवाईएस का इस्तेमाल देशी मिनजीडब्ल्यू (-w64) उपकरणों के संयोजन के साथ किया जाना चाहिए, यह सिगविन नहीं है और आप आसानी से एमएसवाईएस का विस्तार नहीं कर सकते हैं।

तो "मिनजीडब्ल्यू (-w64)" अक्सर पूरे फ्री विंडोज जीएनयू टूलचेन (देशी या सिगविन के शीर्ष पर चलने वाला एक क्रॉस-कंपाइलर) को संदर्भित करता है, हालांकि सख्ती से यह केवल हेडर और पुस्तकालय है।

जीसीसी के सी ++ संकलक का उपयोग करने के लिए, मैं आप या तो मेरी संकुल या mingw-builds (32-bit और 64-bit निष्पादनयोग्य बनाने के लिए) का उपयोग सुझाव देते हैं। वैकल्पिक रूप से, आप सिग्विन स्थापित कर सकते हैं और MinGW-w64 क्रॉस-कंपाइलर को स्थापित करने के लिए setup.exe का उपयोग कर सकते हैं और इसे वहां से उपयोग कर सकते हैं, लेकिन यदि आपको स्क्रिप्ट बनाने के लिए निकट-परिपूर्ण यूनिक्स अनुकरण की आवश्यकता नहीं है, तो मैं इसके खिलाफ सुझाव दूंगा।

संपादित करें आप जानते हैं कि एक और विकल्प है, पुराना इंटरिक्स, जो Win32 सबसिस्टम को हटा देता है और सीधे एनटी कर्नेल के शीर्ष पर बनाता है। यह Windows Services for Unix या Subsystem for Unix Applications (Windows 7 और Windows 8 और older versions of Windows के लिए उपलब्ध) के रूप में प्रदान किया जाता है। यह समाधान विंडोज प्रो/अल्टीमेट संस्करण ग्राहकों के लिए उपलब्ध है और आपको मूल यूनिक्स समर्थन के निकटतम प्रदान करता है जिसे आप प्राप्त करने जा रहे हैं। ओह, तुम भी अपने यूनिक्स सॉफ्टवेयर :)

+0

क्या आप कृपया बता सकते हैं कि क्या इसका मतलब है "एक पॉज़िक्स संगत रनटाइम"? मैंने पॉज़िक्स पर विकिपीडिया लेख लाल कर दिया है लेकिन यह अभी भी मुझे स्पष्ट नहीं है। – Celeritas

+0

POSIX एक ओएस इंटरफेस को परिभाषित करता है जिसमें सी कार्यों का एक गुच्छा शामिल है। इनमें सी 99 (सी 11?) मानक लाइब्रेरी और विस्तृत अतिरिक्त कार्य शामिल हैं [यहां] (http://pubs.opengroup.org/onlinepubs/9699919799/)। उदाहरण 'फोर्क', 'एक्सेस', सभी पथ्रेड हैं (हालांकि मिनजीडब्ल्यू (-w64) में Win32 API: pthreads-win32 और winpthreads), आदि के उस भाग को लपेटने वाले पुस्तकालय हैं ... POSIX एक शेल और उपयोगिताओं को भी परिभाषित करता है, जो सिगविन द्वारा प्रदान किया जाता है (और कम सही तरीके से, एमएसवाईएस)। यह सब सामान है जो अनुकरण की आवश्यकता है, और इस प्रकार देशी Win32 एपीआई के खिलाफ कोडिंग की तुलना में निष्पादन में धीमा है। – rubenvb

+0

तो मूल रूप से सी ++ में कुछ फ़ंक्शन शामिल हैं, जैसे कि 'फोर्क()' जो यूनिक्स ऑपरेटिंग सिस्टम पर मौजूद है लेकिन विंडोज ऑपरेटिंग सिस्टम नहीं है? चूंकि ये तकनीकी रूप से भाषा का हिस्सा हैं, फिर भी उन्हें ऑपरेटिंग सिस्टम के बावजूद समर्थित होना चाहिए, इसलिए सिगविन/मिनजीडब्लू का एक बिंदु विंडोज जानता है कि सी ++ प्रोग्राम के साथ क्या करना है जो कोड 'फोर्क() 'निष्पादित करता है? यह अजीब लगता है कि और ओएस आश्रित कार्यों को कोर सी ++ भाषा का हिस्सा बनाया जाता है, ऐसा इसलिए है क्योंकि सी/सी ++ मूल रूप से यूनिक्स के लिए डिज़ाइन किया गया था? उदाहरण के लिए 'सिस्टम (कांटा()) लिखने की आवश्यकता के बारे में अधिक समझदारी नहीं होगी? – Celeritas

8

नोट डिबग करने के लिए दृश्य स्टूडियो का उपयोग कर सकते हैं: इस उत्तर के संपूर्ण होने का नाटक नहीं है, यह सिर्फ एक अवधारणा के एक साधारण समझ पेश करने के लिए, वैचारिक परिभाषाओं से बाहर करना चाहते हैं। अपर्याप्त भाषा का उपयोग जानबूझकर है। तो ओएस गुरु, कृपया सही परिभाषा की उम्मीद न करें।

अंतर पॉज़िक्स/यूनिक्स और विंडोज़ की जड़ों में रहता है।

पीओएसईक्स ऑपरेटिंग सिस्टम के लिए एक प्रोग्रामिंग सी इंटरफ़ेस है (अन्य चीजों के साथ, शैल और उपयोगिताओं के साथ)।

यूनिक्स और बाद में लिनक्स स्वयं में ऐसे इंटरफेस लागू करता है, विंडोज मूल रूप से - नहीं करता है। ऑपरेटिंग सिस्टम इकाइयों (Win32) को प्रबंधित करने के लिए इसका अपना तरीका है। मैक ओएस भी नहीं करता है।

जीसीसी एक कंपाइलर सूट सिस्टम पर आम है जो एक पॉज़िक्स इंटरफ़ेस प्रदान करता है।

विंडोज पर इसका इस्तेमाल करने के लिए आपको कम से इस point- दो विकल्प हैं:

  • खिड़कियों में जोड़े एक पुस्तकालय (कोड और हेडर) कि (विंडोज़ के लिए POSIX इंटरफ़ेस जोड़ने अनुवाद POSIX में कॉल विंडोज कॉल) और पुस्तकालय का उपयोग करने के लिए उन्हें संकलित करके सभी जीएनयू प्रोग्राम (लिनक्स आधारित) पोर्ट करें: यही वह है जो सिगविन करता है।

  • पीओएसईक्स प्रोग्राम को पुनर्लेखित करें ताकि वे खुद को पीओएसईक्स-विंडोज मैपिंग से संबंधित सब कुछ शामिल कर सकें, मूल विंडोज निष्पादन योग्य उत्पन्न कर सकें: यही वह है जो मिनजीडब्ल्यू और एमएसवाईएस के बारे में है।

बॉट तरीकों फायदे और कमियां हैं। संक्षेप में, सिगविन में, यदि कुछ POSIX के तहत संकलित होता है, तो यह सिगविन (कम से कम सिद्धांत में) के तहत संकलित करता है। लेकिन परिणाम विंडोज़ के तहत चल रहे एक यूनिक्स-दिखने वाला प्रोग्राम है।

मिनजीडब्ल्यू में, आप मूल विंडोज प्रोग्राम (देशी Win32 सी इंटरफ़ेस को कॉल करके) लिख सकते हैं, लेकिन आप Windows में मौजूद POSIX कार्यक्षमता का उपयोग करने वाली सभी चीज़ों को संकलित नहीं कर सकते हैं। सबसे स्पष्ट मामला MinGW के मानक <thread> इंटरफ़ेस और सीमित <locale> समर्थन की अनुपलब्धता है।

+0

धन्यवाद मैं एक सरलीकरण की तलाश में हूं। "पीओएसईक्स ऑपरेटिंग सिस्टम के लिए एक प्रोग्रामिंग सी इंटरफ़ेस है" प्रोग्रामिंग इंटरफ़ेस का क्या अर्थ है * आपका मतलब है कि प्रोग्राम ओएस के साथ किस तरह से इंटरैक्ट करता है? – Celeritas

+2

@Celeritas: बिल्कुल। POSIX ओएस को एक होस्टेड प्रोग्राम में कॉल करने योग्य सी कार्यों के सेट के रूप में प्रस्तुत करता है। ध्यान दें कि विंडोज एक ही काम करता है, लेकिन कार्यों के दूसरे सेट के साथ। –

+0

जीसीसी वास्तव में एक POSIX इंटरफेस उम्मीद नहीं है: यह (विंडोज सहित) विभिन्न प्रणालियों के एक नंबर के लिए/पर संकलन कर सकते हैं और उन सभी को पूरा नहीं POSIX सी इंटरफेस है। और ध्यान दें कि, MinGW-W64 के winpthreads का उपयोग कर libstdC++ '', '' , और '' कार्यक्षमता प्रदान कर सकते हैं, यह अभी भी कुछ quirks हो सकता है, हालांकि। – rubenvb

संबंधित मुद्दे