2012-05-02 13 views
35

मुझे पता है कि यह अन्य स्थानों में पूछा गया है और उत्तर दिया गया है, लेकिन मुझे एमएस विजुअल स्टूडियो 2010 के साथ समस्याएं आ रही हैं। मैंने सी ++ निष्पादन योग्य विकसित किया है, लेकिन यदि मैं रिलीज़ संस्करण चलाता हूं एक मशीन जिसमें वीसी ++ रनटाइम लाइब्रेरी नहीं है (यानी, msvcr100d.dll), मुझे "प्रोग्राम प्रारंभ नहीं हो सकता है क्योंकि msvcr100d.dll आपके कंप्यूटर से गुम है" त्रुटि।विजुअल सी ++ निष्पादन योग्य और अनुपलब्ध MSVCR100d.dll

यह दो कारणों से अजीब है:

  • ऐसा क्यों है पुनर्वितरण की डिबग संस्करण के साथ लिंक करने के लिए कोशिश कर रहा है?
  • मैंने this fix को लागू करने का प्रयास किया, रनटाइम लाइब्रेरी सेटिंग को/एमडी (बहु-थ्रेडेड डीएलएल) के बजाय/MT पर सेट किया, लेकिन इससे केवल समस्या खराब हो गई (अगर मैंने मैन्युअल रूप से msvcr100d.dll की प्रतिलिपि बनाई है, तो उसने कहा कि यह नहीं हो सका msvcp110.dll खोजें)।

कैसे इतना है कि मैं मशीनों एमएस कुलपति 2010 या पुनर्वितरण स्थापित नहीं है कि पर चला सकते हैं मैं अपने निष्पादन के साथ क्रम पुस्तकालय पैकेज कर सकते हैं?

मुझे पता है कि इसे डीएलएल की एक प्रति शामिल करने के लिए सुरक्षा जोखिम माना जाता है क्योंकि इसे कभी अपडेट नहीं किया जाएगा, लेकिन मेरा लक्ष्य केवल इस निष्पादन योग्य को अल्प अवधि में कुछ दोस्तों को भेजना है।

+3

के लिए खुला Project properties -> Configuration properties -> C/C++ -> Code generation और परिवर्तन विकल्प आप उपयोग कर से क्या मतलब है '/ MT' सेटिंग ने चीजों को और खराब कर दिया? इसे डीएलएल रनटाइम पर निर्भरता को हटा देना चाहिए। क्या आपकी परियोजना अन्य डीएलएल पर निर्भर करती है? वे डीबग रनटाइम के आधार पर अनुचित रूप से क्या हो सकते हैं। निर्भरता वॉकर जैसी उपयोगिता यह समझने में आपकी सहायता कर सकती है कि क्या यह मामला है: http://www.dependencywalker.com –

+0

@ एली: मुझे नहीं लगता कि लोगों को वास्तव में सुरक्षा जोखिम के बारे में बहुत अधिक परवाह है जब वे आपको डीएलएल को पुनर्वितरित न करने के बारे में बताते हैं , क्योंकि आप वैसे भी स्थिर रूप से लिंक कर सकते हैं। यह किसी और चीज की तुलना में एक लाइसेंसिंग मुद्दा है। – Mehrdad

+2

@MichaelBurr निर्भरता वाकर पुष्टि की है कि DLLs में से एक अपने प्रोजेक्ट पर निर्भर करता है msvcr100d.dll पर निर्भर करता है। यह पता चला है कि रिलीज मोड में डीएलएल नहीं बना रहा था। धन्यवाद। – mgiuffrida

उत्तर

39

यदि आप "रिलीज" मोड में संकलित कर रहे हैं तो आपको निश्चित रूप से सीआरटी के डीबग संस्करण की आवश्यकता नहीं होनी चाहिए। आप बता सकते हैं कि वे डीएलएल के डीबग संस्करण हैं क्योंकि वे d के साथ समाप्त होते हैं।

बिंदु पर अधिक, डीबग संस्करण पुनर्वितरण योग्य नहीं है, इसलिए यह आपके निष्पादन योग्य के साथ "पैकेजिंग" जितना आसान नहीं है, या उन डीएलएल को ज़िपित नहीं कर रहा है।

चेक करें कि आप "रिलीज" मोड में अपने आवेदन के सभी घटकों संकलित कर रहे हैं हो सकता है, और है कि आप सीआरटी का सही संस्करण लिंक कर रहे हैं और किसी भी अन्य पुस्तकालयों आप का उपयोग (जैसे, MFC, ATL , आदि।)।

आप होगा, msvcr100.dll जाहिर है, की आवश्यकता होती है और कुछ अन्य (d प्रत्यय के अभाव ध्यान दें) यदि वे पहले से स्थापित नहीं हैं। अपने दोस्तों को Visual C++ 2010 Redistributable (या x64) डाउनलोड करने के लिए निर्देशित करें, या इंस्टॉलर बनाने के द्वारा इसे अपने एप्लिकेशन के साथ स्वचालित रूप से शामिल करें।

+0

माइक्रोसॉफ्ट विजुअल सी ++ 2010 एसपी 1 पुनर्वितरण पैकेज (x86) स्थापित करने के लिए मेरे लिए बहुत अच्छा काम किया! – Joseph

+0

@ जोसेफ जो केवल रिलीज संस्करण पर लागू होना चाहिए (जैसा कि कोडी ग्रे का उल्लेख है) डीबग संस्करण आमतौर पर पुनर्वितरण योग्य नहीं होते हैं। यदि आपके पास MSVC2010 स्थापित नहीं है, तो 'msvcr100d.dll' अभी भी गायब होना चाहिए। – andreee

1

आमतौर पर अनुप्रयोग है कि .dll याद करते हैं कि तुम क्या संस्करण की आवश्यकता को इंगित करता है - अगर एक काम नहीं करता है, बस इस लिंक से माइक्रोसॉफ्ट दृश्य C++ 2010 x86 या x64 डाउनलोड:

32 बिट ओएस के लिए: Here

64 बिट ओएस के लिए: Here

2

मेरे लिए समस्या इस स्थिति में दिखाई दिया:

मैं VS2012 स्थापित किया है और अब और VS2010 जरूरत नहीं थी। मैं अपने कंप्यूटर को साफ करना चाहता था और वीएस -2010 रनटाइम एक्जिक्यूटिव को भी हटा देना चाहता था, यह सोचकर कि कोई अन्य प्रोग्राम इसका उपयोग नहीं करेगा। फिर मैं एक प्रोग्राम में संलग्न करके अपने डीएलएल का परीक्षण करना चाहता था (चलिए इसे प्रोग्राम एक्स कहते हैं)। मुझे एक ही त्रुटि संदेश मिला। मैंने सोचा कि मैंने डीएलएल संकलित करते समय कुछ गलत किया है। हालांकि, वास्तविक समस्या यह थी कि मैंने डीएलएल को प्रोग्राम एक्स में संलग्न किया था, और कार्यक्रम एक्स को डीएसयूजी010 में डीबग जानकारी के साथ संकलित किया गया था।यही कारण है कि त्रुटि फेंक दिया गया था। मैंने प्रोग्राम X को VS2012 में पुन: संकलित किया, और त्रुटि समाप्त हो गई।

1

मैं एक ही त्रुटि मिली।

मैं एक VS2012 परियोजना में एक VS2010 DLL बात कर रहा था।

बस VS2012 पर DLL कंपाइल और अब सब कुछ ठीक है।

1

कुलपति का डीबग संस्करण ++ पुस्तकालय DLLs नहीं होती हैं पुनः वितरित किया जाना है!

एक आवेदन की

डीबग संस्करणों पुनर्वितरण नहीं हैं, और विज़ुअल सी की संस्करणों डिबग ++ पुस्तकालय DLLs पुनर्वितरण नहीं हैं। आप अनुप्रयोगों और विजुअल सी ++ डीएलएल को डीबग करने और परीक्षण के एकमात्र उद्देश्य के लिए केवल अपने अन्य कंप्यूटरों के डीबग संस्करणों को तैनात कर सकते हैं, जिसमें कंप्यूटर पर ऐसे अनुप्रयोग हैं जिनके पास विजुअल स्टूडियो स्थापित नहीं है। अधिक जानकारी के लिए, Visual C++ फ़ाइलों को पुनर्वितरण देखें।

मैं भी लिंक प्रदान करेगा: http://msdn.microsoft.com/en-us/library/aa985618.aspx

2

यह समस्या MSDN Library में विस्तार से बताया और के रूप में मैं स्थापित करने को समझने माइक्रोसॉफ्ट के पुनर्वितरण पैकेज कर सकते हैं।

लेकिन कभी कभी निम्नलिखित समाधान (डेवलपर की ओर समाधान के रूप में) का उपयोग किया जा सकता है:

अपने दृश्य स्टूडियो में, Runtime Library/MT बजाय /MD

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