2011-11-21 24 views
11
  1. 'msvcr XXX .dll' और 'msvcp XXX .dll' का उद्देश्य क्या है? और msvc r और msvc पी के बीच अंतर क्या हैं?
  2. यदि मुझे बस एक बहुत ही सरल और अप्रबंधित .dll है तो मुझे उन्हें अपनी बाइनरी से लिंक करने की आवश्यकता क्यों है? क्या ऐसा इसलिए है क्योंकि यह लिंकर का हिस्सा है? एक सामान्य पुस्तकालय के रूप में डिफ़ॉल्ट रूप से विंडोज सिस्टम निर्देशिका में क्यों नहीं है?

मैं सिर्फ समझने के लिए क्यों Windows में वहाँ somethings इतना जटिल कर रहे हैं कोशिश कर रहा हूँ ....मुझे अप्रबंधित कोड पर पुनर्वितरण योग्य पैकेज की आवश्यकता क्यों है? (Msvcp100.dll)

उत्तर

27

msvcrXXXX.dll सी क्रम पुस्तकालय के लिए DLL है। msvcpXXXX.dll सी ++ रनटाइम लाइब्रेरी के लिए DLL है।

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

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

सामान्य रूप से, यह उन मॉड्यूल के लिए/एमडी और/एमडीडी झंडे का उपयोग करने के लिए अधिक कुशल है, जिनमें एकाधिक मॉड्यूल (डीएलएल) हैं, क्योंकि उन सभी मॉड्यूल सी/सी ++ रनटाइम पुस्तकालयों और उनके संबंधित एक प्रतिलिपि साझा करेंगे आवेदन प्रक्रिया के भीतर डेटा संरचनाएं।

सरल, सिंगल-मॉड्यूल अनुप्रयोगों के लिए, हालांकि, एमटी या एमटीडी का उपयोग करने के लिए स्वतंत्र महसूस करें।

+1

अच्छी व्याख्या। –