2008-09-01 19 views
78

मेरा वर्तमान पसंदीदा सी ++ पर्यावरण मुफ़्त और काफी हद तक उत्कृष्ट माइक्रोसॉफ्ट विजुअल स्टूडियो 2005 एक्सप्रेस संस्करण है। समय-समय पर मैंने अन्य लोगों को सुखद परिणामों के साथ .exe फ़ाइलों को रिहा कर दिया है। हालांकि हाल ही में मैंने परेशान खोज की है कि सुखदायक परिणाम अधिक किस्मत पर आधारित थे जो मैं चाहूंगा। इन कार्यक्रमों में से एक को पुराने (2001 विंटेज, स्कूली रूप से अपडेट नहीं किया गया) एक्सपी बॉक्स पर चलाने का प्रयास करने से मुझे कुछ भी बुरा नहीं मिला "सिस्टम x.exe नहीं चला सकता" (या समान) संदेश।मैं विजुअल स्टूडियो एक्सप्रेस 2005 के साथ पूरी तरह से स्थिर रूप से जुड़े .exe कैसे बना सकता हूं?

कुछ googling से पता चला कि इस टूलसेट के साथ, एक साधारण हैलो-world.exe में स्थिर लिंकिंग परिणाम भी निर्दिष्ट करते हैं, वास्तव में अतिरिक्त .dll फ़ाइलों (msvcm80.dll आदि) पर निर्भर करते हैं। एक अविश्वसनीय रूप से विस्तृत संस्करण स्कीमिंग सिस्टम (किसी को प्रकट करता है?) तो .exe को बिल्कुल सही .dll संस्करणों के बिना चलाने नहीं देगा। मैं नहीं चाहता हूं या इस सामान की ज़रूरत नहीं है, मैं सिर्फ एक पुराने फैशन वाले स्वयं को चाहता हूं .exe जो कि सबसे कम आम denominator Win32 संचालन के अलावा कुछ भी नहीं करता है और किसी भी पुराने Win32 ओएस पर चलता है।

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

धन्यवाद।

उत्तर

95

सी-रनटाइम के लिए प्रोजेक्ट सेटिंग्स पर जाएं, सी/सी ++ फिर 'कोड जनरेशन' चुनें। 'मल्टीथ्रेडेड डीएल' के बजाय 'रनटाइम लाइब्रेरी' सेटिंग को 'मल्टीथ्रेडेड' में बदलें।

यदि आप किसी अन्य पुस्तकालय का उपयोग कर रहे हैं तो आपको लिंकर को गतिशील रूप से जुड़े सीआरटी को अनदेखा करने के लिए बताने की आवश्यकता हो सकती है।

+0

"यदि आप किसी अन्य पुस्तकालय का उपयोग कर रहे हैं तो आपको लिंकर को गतिशील रूप से जुड़े सीआरटी को अनदेखा करने के लिए बताने की आवश्यकता हो सकती है।" हाल ही में मैं इस मुद्दे में भाग गया। मैं एक wxwidgets ऐप बना रहा था, मैंने पाया कि मुझे उसी कोड जनरेशन संशोधन के साथ wxwidgets libs को पुनर्निर्माण करने की आवश्यकता है –

+6

मैन 300 वर्ण कई नहीं हैं। यदि उपरोक्त टिप्पणी अस्पष्ट है, तो समस्या यह है कि आपकी .cpp फ़ाइलें और किसी भी लाइब्रेरी .cpp फ़ाइलों को 'multithreaded dll' के बजाय 'multithreaded' होना चाहिए अन्यथा आपको लिंक त्रुटियां मिल सकती हैं। –

+0

यह ढेर प्रबंधन के संबंध में कई मुद्दों को प्रस्तुत करता है जिन्हें आप शायद कुछ भी नहीं करना चाहते हैं। –

4

मैं उपयुक्त की एक फ़ोल्डर में यह एक ही निर्भरता समस्या मिला है और मुझे यह भी पता है कि आप वी.एस. 8.0 DLLs शामिल कर सकते हैं (रिलीज केवल! डिबग नहीं! --- और अपने कार्यक्रम जारी किया जाना है, भी है) नाम, अपना .exe साथ मूल फ़ोल्डर में:

How to: Deploy using XCopy (MSDN)

भी ध्यान रखें कि चीजें धराशायी हो जाने के लिए गारंटी दी जाती है अगर आप एक ही स्थिर जुड़ा हुआ .exe में सी ++ और सी कोड है क्योंकि आप लिंकर मिल जाएगा की जरूरत है संघर्ष जो केवल सही libXXX.lib को अनदेखा करके और फिर गतिशील रूप से लिंक (डीएलएल) को अनदेखा करके हल किया जा सकता है।

आखिरकार, एक अलग टूलसेट (वीसी ++ 6.0) चीजों के साथ "बस काम करें", क्योंकि विंडोज 2000 और ऊपर के पास सही डीएलएल स्थापित हैं।

1

जेरेड की प्रतिक्रिया के संबंध में, विंडोज 2000 या बेहतर होने से इस मुद्दे को हाथ में ठीक से ठीक नहीं किया जाएगा। रॉब की प्रतिक्रिया काम करती है, हालांकि यह संभव है कि यह फिक्स सुरक्षा समस्याओं को पेश करता है, क्योंकि विंडोज अपडेट ऐसे अनुप्रयोगों को पैच करने में सक्षम नहीं होंगे।

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

+2

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

4

विजुअल स्टूडियो 2010 में मेरा अनुभव यह है कि दो बदलावों की आवश्यकता है ताकि डीएलएल की आवश्यकता न हो। परियोजना संपत्ति पृष्ठ से (सही समाधान Explorer विंडो में परियोजना के नाम पर क्लिक करें):

  1. विन्यास गुण के तहत -> जनरल, क्षेत्र के लिए "MFC उपयोग" MFC उपयोग की "एक स्थिर पुस्तकालय में बदल "।

  2. विन्यास गुण के तहत -> C/C++ -> कोड जनरेशन, "रनटाइम लायब्रेरी" क्षेत्र के लिए "मल्टी-थ्रेडेड (/ एमटी)"

नहीं

यकीन है कि बदल क्यों दोनों की जरूरत थी । मैंने glut32.dll पर निर्भरता को हटाने के लिए इसका इस्तेमाल किया।

+0

धन्यवाद। मेरी ज़िंदगी बचाई। :) –