2012-05-17 11 views
7

क्या विंडोज़ के लिए सी/सी ++ में विकसित होना संभव है और msvcr100.dll के खिलाफ लिंक नहीं करना है?विंडोज़ के लिए सी/सी ++ में विकसित होने पर msvcr100.dll को छोड़ दें?

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

+1

आप इंटेल या जीसीसी जैसे अन्य C++ पुस्तकालयों के खिलाफ विकसित कर सकते हैं, लेकिन अगर आप गतिशील रूप से पुस्तकालय से लिंक और यह रनटाइम पर उपलब्ध नहीं है, अपने कार्यक्रम नहीं चलेंगे के खिलाफ। स्थिर रूप से लिंक करना काम करेगा। – birryree

+0

किस पुस्तकालय के खिलाफ पेंट इत्यादि जुड़ा हुआ है? या वे सभी स्थिर रूप से सी lib के साथ जुड़े हुए हैं? – Erik

+1

पेंट एक पुराने msvcr के खिलाफ विकसित किया गया है और वह डिफ़ॉल्ट रूप से विंडोज़ में पहले ही स्थापित है। – birryree

उत्तर

16

समाधान एक्सप्लोरर विंडो, गुण, सी/सी ++, कोड जनरेशन, रनटाइम लाइब्रेरी सेटिंग में अपनी प्रोजेक्ट पर राइट-क्लिक करें। इसे/एमटीडी में बदलें। रिलीज कॉन्फ़िगरेशन के लिए दोहराएं, चुनें/एमटी

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

यदि आप अपना खुद का डीएलएल बनाते हैं तो इस विकल्प का उपयोग करने से बचें। यह तब महत्वपूर्ण हो जाता है कि उन डीएलएल और EXE सटीक उसी सीआरटी का उपयोग करें ताकि वे सभी एक ही सीआरटी राज्य और एक ही ढेर साझा कर सकें। क्योंकि यदि वे नहीं करते हैं तो आपको सी ++ ऑब्जेक्ट्स या पॉइंटर्स को गुजरने में ग़लत समस्याएं होंगी जिन्हें कोड के एक हिस्से से दूसरे में रिलीज़ करने की आवश्यकता है। यदि आप भाग्यशाली हैं, तो एक एक्सेस रिलेशन, यदि आप नहीं हैं तो स्मृति रिसाव।

+0

धन्यवाद! यह – Erik

+0

है, आजकल ग़लत त्रुटियां बहुत कम आम हैं, लेकिन यह अभी भी डिस्क स्पेस, मेमोरी और सीपीयू कैश का अपशिष्ट है, जिसमें 20 डीएलएल हैं जिनमें प्रत्येक सीआरटी की एक प्रति है। – MSalters

+0

यह हमेशा किसी कारण से काम नहीं करता है। उदाहरण के लिए, यदि आपने कम से कम एक बार परियोजना को संकलित कर लिया है, तो आप इसे इस तरह से लिंक नहीं कर सकते हैं। –

1

विंडोज़ पर, मुझे संदेह है कि एक गैर-मामूली प्रोग्राम बनाना संभव है जो किसी भी तरह से सीआरटी का उपयोग नहीं करता है।

msvcrXXX.dll से लिंक किए बिना सीआरटी का उपयोग करना संभव है - बस इसके बजाय स्थिर libs से लिंक करें। लेकिन आपके प्रश्नों के उत्तरों:

कैसे अपने कंप्यूटर पर सभी कार्यक्रमों चला सकते हैं अगर मैं नहीं दृश्य स्टूडियो या पुनर्वितरण पैकेज स्थापित किया था?

यदि आपके पीसी पर प्रोग्राम msvcrtxxx.dll से जुड़े थे, तो वे नहीं कर सके। Sinmply, रेडिस्ट कि एक विशेष कार्यक्रम की जरूरत पहले से ही आपके पीसी पर पहले से स्थापित किया गया था, इससे पहले कि आप भी साथ आए थे। या कम से कम, कार्यक्रम द्वारा आवश्यक रेडिस्ट के हिस्सों।

2

यदि आप अपनी परियोजना को केवल सी प्रोग्रामिंग भाषा/लाइब्रेरी का उपयोग करने के लिए प्रतिबंधित करते हैं, तो आप केवल MSVCRT.lib के विरुद्ध लिंक कर सकते हैं जो Windows XP SP3 के बाद से किसी भी विंडोज संस्करण में पूरी तरह से बेक किया गया है।

इसका मतलब है, एमएसवीसीआर 100. डीएलएल (या कोई अन्य विजुअल स्टूडियो डीएलएल) पर निर्भरता के बजाय, आप केवल एमएसवीसीआरटी में मानक सी कार्यों के खिलाफ लिंक कर सकते हैं। वैसे, this technique का उपयोग माइक्रोसॉफ्ट की छतरी के नीचे विकसित CoApp प्रोजेक्ट में किया जाता है, इसलिए मैं इसे आपके जैसे मामलों में एक अच्छी प्रैक्टिस के रूप में मानता हूं।

बस डाउनलोड Windows DDK और लिंक केवल $(DDKInstallPath)lib\Crt\$(DDKPlatform)\msvcrt.lib

+1

धन्यवाद। वास्तव में बहुत दिलचस्प और अधिक जो मैं खोज रहा था। – Erik

+0

यह लाइब्रेरी एक अनियंत्रित कार्यान्वयन विवरण है। आप शायद भविष्य में इसका समर्थन करने के लिए माइक्रोसॉफ्ट पर भरोसा कर सकते हैं, हालांकि, कई कार्यक्रम गलती से इस पर निर्भर करते हैं। लेकिन वह समर्थन सीमित होगा, उदा। वे 64 बिट्स पर बंदरगाह नहीं जा रहे हैं क्योंकि 64 बिट्स वीसी 6 कभी नहीं थे। – MSalters

+0

@MSalters यह सच नहीं है, पूरी तरह से। विंडोज डीडीके स्थापित करें और खुद को जांचें। डीडीके mdvcrt.lib के amd64, i386 और ia64 बनाता है। डीडीके मर नहीं गया है! – mloskot

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