मैं विजुअल स्टूडियो एक्सप्रेस 2005 के साथ एक पूरी तरह से सांख्यिकीय रूप से जुड़ा हुआ .exe कैसे बनाऊं?


109

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

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

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

धन्यवाद।

जवाबों:


126

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

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


"यदि आप किसी अन्य पुस्तकालय का उपयोग कर रहे हैं, तो आपको लिंकर को गतिशील रूप से जुड़े सीआरटी को स्पष्ट रूप से अनदेखा करने की आवश्यकता हो सकती है।" हाल ही में मैं इस मुद्दे पर भागा। मैं एक wxWidgets ऐप बना रहा था, मैंने पाया कि मुझे उसी कोड जनरेशन मॉडिफिकेशन के साथ wxWidgets लिबास को फिर से बनाने की जरूरत है
Bill Forster

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

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

सीआरटी पुस्तकालयों के लिए, वीएस / एमडी और एमटी विकल्प प्रदान करता है। लेकिन, सामान्य रूप से अन्य पुस्तकालयों को सांख्यिकीय रूप से जोड़ने के बारे में क्या कहना है - libX.lib (जो कि मेरा अपना पुस्तकालय या तीसरा पुस्तकालय हो सकता है)?
किरण एमएन

4
मुझे मिलता है error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease'। क्या निर्माण के प्रकार को बदलने के लिए कहीं और है? मैं @BillForster की तरह wxWigets एप्लीकेशन बना रहा हूं। तो क्या मुझे wxWidgets का पुनर्निर्माण करना होगा ? मैं उसको कैसे करू?
टॉम ज़ातो - मोनिका

18

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

  1. कॉन्फ़िगरेशन गुण के अंतर्गत -> सामान्य, "MFC का उपयोग करें" फ़ील्ड को "Static Library में MFC का उपयोग करें" बदलें।

  2. कॉन्फ़िगरेशन गुणों के तहत -> C / C ++ -> कोड जेनरेशन, "रनटाइम लाइब्रेरी" फ़ील्ड को "मल्टी-थ्रेडेड (/ MT)" में बदलें

निश्चित नहीं कि दोनों की आवश्यकता क्यों थी। मैंने glut32.dll पर निर्भरता को हटाने के लिए इसका उपयोग किया।

बाद में जोड़ा गया: कॉन्फ़िगरेशन में ये परिवर्तन करते समय, आपको उन्हें "सभी कॉन्फ़िगरेशन" में करना चाहिए --- आप इसे गुण विंडो के शीर्ष पर चुन सकते हैं। यदि आप केवल डिबग कॉन्फ़िगरेशन में परिवर्तन करते हैं, तो यह रिलीज़ कॉन्फ़िगरेशन और इसके विपरीत पर लागू नहीं होगा।


1
यह दृश्य स्टूडियो 2013 में एक छोटे से अतिरिक्त के साथ काम करता प्रतीत होता है: मुझे कॉन्फ़िगरेशन गुण बदलना पड़ा -> सामान्य -> ​​चरित्र सेट "यूनिकोड कैरेक्टर सेट का उपयोग करें"।
20

4

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

कैसे करें: XCopy (MSDN) का उपयोग करके नियुक्त करें

इस बात पर भी ध्यान दें कि यदि आपको सी + और सी कोड एक ही स्टेटिक रूप से लिंक करने की आवश्यकता है तो चीजें ग़ायब होने की गारंटी है। ।

अंत में, एक अलग टूलसेट (VC ++ 6.0) चीजों के साथ "बस काम", क्योंकि Windows 2000 और इसके बाद के संस्करण में सही DLL स्थापित हैं।


1

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

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


2
पुनर्वितरण की पैकेजिंग को पसंदीदा समाधान लगता है, आपको पुनर्वितरण इंस्टॉलर को चलाने के लिए व्यवस्थापकों की आवश्यकता होती है। यदि आपके पास कोई गैर-व्यवस्थापक उपयोगकर्ता है तो यह एक व्यवहार्य विकल्प नहीं है।
केविन कॉन्डॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.