2009-10-17 14 views
9

विजुअल स्टूडियो 2008 में एक सीजीआई एप्लिकेशन लिखने और इसे स्थानीय रूप से डीबिज करने के बिना सी ++ बाइनरी चलाना, मैंने इसे विंडोज सर्वर 2003 ओएस पर अपलोड किया जहां यह तुरंत चलाने में असफल रहा।रनटाइम पुनर्वितरण योग्य (Server2k3, XPSP3)

मैं अनुमान लगा रहा हूँ मैं नीच क्रम वितरण स्थापित करने की आवश्यकता है, लेकिन यह पढ़ने के बाद:

http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/

मैं सोच रहा हूँ अगर यह अधिक समझ में आता है ओर सामान से इस पक्ष की अनदेखी करने और बस फिर से लिखने अप्प।

मुझे लगता है कि विंडोज सर्वर 2003 में एमएससीआरवीटी संस्करण की आवश्यकता नहीं है? क्या विंडोज सर्वर 2003 में यह है?

जब मोटी क्लाइंट्स को तैनात करने की बात आती है, तो मैं अपने ऐप के साथ आवश्यक डीएलएस वितरित करना चाहता हूं। वे क्या मान रहे हैं कि मैं सिर्फ iostream, sstream, स्ट्रिंग शामिल है?

यदि मैं windows.h जोड़ता हूं तो क्या यह महत्वपूर्ण रूप से बदलता है?

जोड़ा गया:

/मीट्रिक टन स्विच का उपयोग करते हुए नीचे

सी की सिफारिश की/C++ -> कोड पीढ़ी -> रनटाइम लाइब्रेरी -> मल्टी पिरोया (/ एमटी)

(आप शायद आवश्यकता होगी एक साफ करने के लिए:

बिल्ड - क्रम त्रुटि संदेश से बचने के लिए> स्वच्छ

"अद्यतन मैनिफेस्ट को फ़ाइल में सहेजने में विफल")

मेरा ऐप 38k से 573k तक फूला। जो चीजें मैं महत्वपूर्ण कहता हूं (कल्पना करें कि वह आपका वेतन था)। चूंकि इस ऐप के कई उदाहरण लगातार लोड हो जाएंगे और अनलोड किए जाएंगे (कीमती मेमोरी और प्रोसेसर संसाधनों की आवश्यकता होगी) मैं एक बेहतर (छोटा) समाधान ढूंढना चाहता हूं।

मुझे लगता है कि आज कई स्थितियों के लिए यह महत्वपूर्ण नहीं है और कई डेवलपर्स का ध्यान नहीं है, इसलिए एनओटी और 60 एमबी रनटाइम की प्रवृत्ति है, लेकिन यही वह है जो मैं करना चाहता हूं।

जोड़ा गया:

डिबगिंग को हटाने संकलित करने के लिए परियोजना को पाने के लिए के बाद:

परियोजना -> propeties -> C/C++ -> प्रीप्रोसेसर -> प्रीप्रोसेसर परिभाषाएं (हटाने डीबग;)

आकार 300k तक कम हो गया था, और यह चला जाएगा।

जोड़ा गया: नीचे क्रिस Becke ने सुझाव दिया के रूप में, नकल: msvcm90.dll msvcp90.dll msvcr90.dll Microsoft.VC90.CRT.manifest आवेदन की निर्देशिका करने के लिए सभी क्रम की जरूरत प्रदान करेगा।

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

जब तक मुझे सी ++ पुनर्वितरण योग्य स्थापित करने की आवश्यकता होती है, तो व्यापार बंद अतिरिक्त 260k है। यही स्वीकार्य

+0

क्या * क्या * महत्वपूर्ण रूप से बदलता है? बहुत अधिक, वीएस 2008 के साथ आपके द्वारा बनाई गई लगभग कुछ भी रनटाइम इंस्टॉल की आवश्यकता होगी। – Joe

+0

आपको रनटाइम की आवश्यकता होगी लगभग कोई फर्क नहीं पड़ता। आपकी पसंद * कैसे * आप इसे शामिल करते हैं। सबसे सुविधाजनक तरीका सांख्यिकीय रूप से जुड़े संस्करण का उपयोग करना है। तो आपको बिल्कुल अलग डीएल वितरित करने की ज़रूरत नहीं है। विफल होने के कारण, आपके पास डीएलएल वितरित करने के आधे मिलियन तरीके हैं। सुपर-जटिल साइड-बाय-साइड चीज से लेकर, जिसमें दस्तावेज़ों के 15 पृष्ठों को पढ़ने की आवश्यकता होती है, इसे अपने ऐप के रूट फ़ोल्डर में सही नाम वाले फ़ोल्डर में डालने के लिए, जो कि बहुत प्रबंधनीय है। – jalf

+0

मुझे यकीन नहीं है कि यह कितना प्रभावी होगा, लेकिन कंपाइलर/लिंकर विकल्पों के साथ झुकाव करने का प्रयास करें। कुछ ऐसे थे जो निष्पादन योग्य आकार को प्रभावित करते थे (आकार के लिए अनुकूलित करने और अप्रयुक्त सामग्री को हटाने के बारे में कुछ)। –

उत्तर

6

विकल्पों का विस्तृत सूची:

  • ताकि थेरेस कोई C/C++ उपयोग पर सभी एप्लिकेशन फिर से लिखें।
  • विजुअल स्टूडियो 6 या एक मिंगव आधारित टूलसेट पर स्विच करें जैसे कोड :: ब्लॉक - ये पहले से ही वितरित msvcrt.dll को उनके रनटाइम के रूप में वितरित करते हैं।
  • /एमटी स्विच का उपयोग करके बनाएँ। यह आपके exe में आवश्यक रनटाइम कार्यों बनाता है। जो इसे फहराएगा। लेकिन वह ब्लोट (स्पष्ट रूप से) अलग डीएल लोड करने से कम ओवरहेड है।
  • वीएस 9 रनटाइम को 'निजी एसएक्स' इंस्टॉल के रूप में वितरित करें। इसमें C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT की सामग्री को आपके एप्लिकेशन के exe के समान फ़ोल्डर में कॉपी करने की आवश्यकता है। यदि आपने एसपी 1 लागू किया है, तो इस फ़ोल्डर में एसपी 1 रनटाइम होगा, लेकिन आपका एप्लिकेशन आरटीएम रनटाइम (आकृति पर जायेगा) के लिए पूछेगा। अपनी परियोजनाओं में _BIND_TO_CURRENT_CRT_VERSION जोड़ें, पुनर्निर्माण करें और इसे स्वयं को हल करना चाहिए।
  • स्पष्ट रूप से एक vc_redist.exe है जिसे VS9 के लिए प्राप्त किया जा सकता है। साझा एसएक्स स्टोर में उपर्युक्त असेंबली (माइक्रोसॉफ्ट.VC90.CRT की सामग्री होने के नाते) को वास्तव में स्थापित करने के लिए आवश्यक एमएसआई या इंस्टॉलर मोोजो को ढूंढें या समझें।
+0

वीएस 9 रनटाइम कार्यों को वितरित करें। उपरोक्त चर्चा देखें –

9

मुझे मेरे जवाब को संशोधित करते हैं:

1) कुलपति ++ 2008 रनटाइम स्थापित करें:

आप कुछ ही विकल्प हैं। आप download और उनके लिए इंस्टॉलर कर सकते हैं। उनके लिए मॉड्यूल मर्ज भी उपलब्ध हैं।

2) रनटाइम के खिलाफ स्थिर रूप से लिंक (/ एमटी या सी/सी ++ -> कोड जनरेशन -> रनटाइम लाइब्रेरी: मल्टी-थ्रेडेड)। इससे आपके निष्पादन योग्य आकार में वृद्धि होगी, लेकिन यह किसी भी डीएलएस पर निर्भर नहीं होगा। यदि आप आकार के बारे में चिंतित हैं, तो केवल सी मानक लाइब्रेरी का उपयोग करें या केवल विंडोज एपीआई का उपयोग करें।

3) वीसी ++ के पुराने संस्करण का उपयोग करें। 2005 और इससे पहले रनटाइम को स्थापित करने की आवश्यकता नहीं थी। डीएलएस को निष्पादन योग्य के रूप में एक ही निर्देशिका में रखा जा सकता है। यदि आप वीसी ++ 6.0 का उपयोग करते हैं तो रनटाइम्स विंडोज के सभी संस्करणों पर स्थापित किए जाएंगे, अन्यथा आपको इसे स्वयं इंस्टॉल करना होगा।

+0

मुझे लगता है कि आपका मतलब है परियोजना गुण -> सी/सी ++ -> कोड जनरेशन -> रूनटाइम लाइब्रेरी -> बहु थ्रेडेड (/ एमटी) –

+0

कोडर या कॉड? हाहा .. आप शायद सही हैं, मैंने इसे स्मृति से करने की कोशिश की। –

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