2015-09-22 8 views
12

किसी को भी सी पर कुछ प्रकाश ++ पुस्तकालय संस्करण औरबनाम माइक्रोसॉफ्ट विज़ुअल सी ++ क्रम जीसीसी क्रम पुस्तकालयों redistributables

  • जीसीसी पुस्तकालय के वितरण बहाया जा सका (libgcc, libstdC++, ..?)
  • माइक्रोसॉफ्ट विज़ुअल सी ++ क्रम पुस्तकालयों (6.0, 2005, 2008, 2010, 2012, 2013, 2015, ....)

जीसीसी प्रोग्रामिंग के सीमित संपर्क के साथ, मैंने कार्यक्रम के साथ सी ++ रनटाइम पुस्तकालयों को कभी भी वितरित नहीं किया है। यह अक्सर एमएस विंडोज प्रोग्राम के साथ मामला है।

क्या अपेक्षाकृत पुरानी लिनक्स प्रणाली एक नया सी ++ 14 प्रोग्राम चला सकती है (जिसे एक नई प्रणाली पर संकलित किया गया है और फिर पुराने सिस्टम पर कॉपी किया गया है)?

क्या जीसीसी प्रोग्रामर प्रोग्राम के साथ रनटाइम पुस्तकालयों को वितरित करते हैं? यदि नहीं, तो विंडोज प्रोग्राम उन्हें वितरित क्यों करते हैं? जीसीसी वितरण कैसे सुनिश्चित करते हैं कि एक सी ++ प्रोग्राम हमेशा स्थापित होने पर काम करता है?

क्यूटी जैसे ढांचे के बारे में क्या, लिनक्स और विंडोज़ पर क्यूटी संभाल संस्करण और वितरण कैसे करता है? क्या क्यूटी विभिन्न संस्करणों के लिए रनटाइम भी वितरित करता है?

इसे प्लेटफ़ॉर्म के साथ करना होगा, कैसे लिनक्स डिज़ाइन किया गया है बनाम विंडोज़ कैसे डिज़ाइन किया गया है।

जीसीसी & एमएस विंडोज़ दृष्टिकोण में मूल रूप से अलग क्या है?

+0

"मौलिक अंतर" यह है कि जीसीसी रिलीज के बीच बाइनरी इंटरफ़ेस को संरक्षित करने का प्रयास करता है। माइक्रोसॉफ्ट प्रत्येक रिलीज के साथ पुस्तकालयों का एक नया नया सेट प्रदान करता है।दोनों दृष्टिकोणों के उनके फायदे और सीमाएं हैं। उदाहरण के लिए, इंटरफ़ेस को तोड़ने वाले परिवर्तनों को पेश करना कितना मुश्किल है? उपयोगकर्ताओं को कितनी बार नए संस्करण स्थापित करना होगा? –

+0

जीसीसी में कई कीड़े थीं, मुझे यकीन है कि उनमें से कई इंटरफ़ेस स्तर पर होंगे और अक्सर उन्हें संबोधित करने के लिए इंटरफ़ेस को बदलने की आवश्यकता होती है, आप रिलीज़ के बीच बाइनरी इंटरफेस को "संरक्षित" कैसे करेंगे। – user1

+0

@ बॉपरसन अगर मुझे गलत नहीं लगता है, तो माइक्रोसॉफ्ट और लिनक्स दृष्टिकोण उससे भी ज्यादा समान हैं। एमएसवीसी रनटाइम डीएलएल में एक ही इंटरफ़ेस के साथ अलग-अलग संस्करण होते हैं और उसी "रिलीज़" के भीतर, जिन्हें पैच के साथ वितरित किया जाता है। और लिनक्स में "रिलीज" संस्करण भी है जो सिस्टम में एकाधिक एसओ फाइलों के साथ इंटरफ़ेस को तोड़ सकता है। – ElderBug

उत्तर

9

जीएनयू की सी लाइब्रेरी की तरह जीसीसी की रनटाइम लाइब्रेरी, एक स्थिर बाइनरी इंटरफ़ेस प्रदान करती है (छोटे फुटनोट: जीसीसी 5.1 इस तरह की ब्लीव, नई सी ++ सुविधाओं को लागू करने के कारण)। माइक्रोसॉफ्ट के पुस्तकालय नहीं करते हैं, और प्रत्येक छोटे संस्करण अंतर और शायद एबीआई (एप्लिकेशन बाइनरी इंटरफेस) तोड़ देगा। इसके अतिरिक्त, माइक्रोसॉफ्ट कंपाइलर्स संस्करण एबीआई के साथ अपने एबीआई को भी बदलते हैं, जिससे उनके टूल्स के विभिन्न संस्करणों द्वारा बनाए गए कोड को गठबंधन करना एक बुरा विचार बन जाता है। यहां भी, जीसीसी एक सख्त एबीआई रखता है, जो ऑब्जेक्ट कोड को पूरी तरह से संगत बनाता है (अगर कोई एबीआई तोड़ने वाले कोडेजन विकल्प बिल्कुल नहीं दिए जाते हैं)।

इस एबीआई में ऑब्जेक्ट आकार और लेआउट होता है, जो कोड उत्पन्न करते समय एक कंपाइलर उपयोग करता है। इसलिए एक संस्करण के खिलाफ बनाया गया कोड चलाना लेकिन रनटाइम पर एक अलग संस्करण का उपयोग अप्रत्याशित परिणाम उत्पन्न कर सकता है क्योंकि मेमोरी लेआउट और उपयोग सिर्फ अलग है।

जीएनयू/लिनक्स इस संबंध में काफी मजबूत है, और आम तौर पर मजबूत पिछड़ा संगतता बनाए रखने में सक्षम है। जब तक संकलित प्रोग्राम को लाइब्रेरी के पुराने संस्करण के विरुद्ध संकलित किया गया था, तब तक उपयोगकर्ता द्वारा इंस्टॉल किए गए नए संस्करण के साथ लोड होने पर यह पूरी तरह से चलाया जाएगा। वही कहानी क्यूटी के लिए जाती है, जो केवल प्रमुख संस्करण संख्याओं के बीच एबीआई को तोड़ती है (क्यूटी 4 और क्यूटी 5 को रनटाइम इंटरचेंजनीय पर लोड नहीं किया जा सकता है)।

कुछ छोटे अपवाद हैं, जीसीसी 5 की libstdC++ एक बड़ी समस्या है। मुझे हालांकि कोई बड़ी ग्लिब एबीआई ब्रेकेज नहीं है। नया माइक्रोसॉफ्ट यूनिवर्सल सीआरटी स्थिर सी रनटाइम इंटरफ़ेस प्रदान करके इस समस्या को हल करने का प्रयास करता है और जैसा कि कहानी हमें विश्वास करेगी, एक ग्लिबैक शैली लाइब्रेरी एबीआई स्थिरता प्रदान करें। यह यूसीआरटी विंडोज विस्टा और ऊपर के लिए उपलब्ध है, लेकिन अनुप्रयोगों को इसके खिलाफ विशेष रूप से संकलित करने की आवश्यकता है। वीएस का पहला संस्करण जिसमें यह क्षमता है, वीएस2015 है।

+0

ध्यान दें कि ओपी भी पीछे की संगतता के बारे में नहीं बल्कि आगे संगतता के बारे में पूछता है। – nos

+0

@nos मैं पीछे की संगतता के बारे में बात नहीं करता क्योंकि कोई भी (गारंटीकृत) नहीं है। – rubenvb

+0

@nos, लिनक्स पर रनटाइम क्यों इंस्टॉल करना गैर तुच्छ है? – user1