मैंने कुछ कोड लिखा है जो कुछ भारी उठाने के लिए ओपन सोर्स लाइब्रेरी का उपयोग करता है। यह काम लिनक्स में किया गया था, यूनिट परीक्षण और सेमेक के साथ इसे विंडोज़ में पोर्ट करने में मदद करने के लिए। दोनों प्लेटफार्मों पर इसे चलाने की आवश्यकता है।विजुअल स्टूडियो सी ++ मेनिफेस्ट फाइलों के साथ काम करना
मुझे लिनक्स पसंद है और मुझे सेमेक पसंद है और मुझे यह पसंद है कि मैं दृश्य स्टूडियो फ़ाइलों को स्वचालित रूप से जेनरेट कर सकता हूं। जैसा कि अब है, विंडोज़ पर सब कुछ संकलित होगा और यह लिंक होगा और यह परीक्षण निष्पादन योग्य उत्पन्न करेगा।
हालांकि, इस बिंदु पर जाने के लिए मुझे कई दिनों तक खिड़कियों से लड़ना पड़ा, मैनिफेस्ट फाइलों और पुनर्वितरण योग्य पैकेजों के बारे में सब कुछ सीखना पड़ा।
जहां तक मेरी समझ जाता है:
वी.एस. 2005 के साथ, माइक्रोसॉफ्ट साइड DLLs के द्वारा बनाई गई साइड। इसके लिए प्रेरणा यह है कि पहले, कई अनुप्रयोग एक ही डीएलएल के विभिन्न संस्करण स्थापित करेंगे, जिससे पहले स्थापित और काम करने वाले अनुप्रयोगों को क्रैश करने के लिए (यानी "डीएल नरक") उत्पन्न होता है। साइड डीएलएस द्वारा साइड इसे ठीक करें, क्योंकि अब प्रत्येक निष्पादन योग्य/डीएल में संलग्न "मेनिफेस्ट फ़ाइल" है जो निर्दिष्ट करता है कि कौन सा संस्करण निष्पादित किया जाना चाहिए।
यह सब ठीक है और अच्छा है। आवेदन अब रहस्यमय ढंग से दुर्घटनाग्रस्त नहीं होना चाहिए। हालांकि ...
माइक्रोसॉफ्ट विजुअल स्टूडियो की हर रिलीज के साथ सिस्टम डीएलएस का एक नया सेट जारी करता प्रतीत होता है। साथ ही, जैसा कि मैंने पहले उल्लेख किया था, मैं एक डेवलपर हूं जो किसी तृतीय पक्ष लाइब्रेरी से लिंक करने का प्रयास कर रहा है। अक्सर, इन चीजों को "precompiled डीएल" के रूप में वितरित किया जाता है। अब, क्या होता है जब दृश्य स्टूडियो के एक संस्करण के साथ संकलित एक प्रीकंपिल्ड डीएल दृश्य स्टूडियो के दूसरे संस्करण का उपयोग कर किसी एप्लिकेशन से जुड़ा होता है?
जो मैंने इंटरनेट पर पढ़ा है, उससे खराब चीजें होती हैं। सौभाग्य से, मुझे अब तक कभी नहीं मिला - मैं निष्पादन योग्य चलाने पर "MSVCR80.dll नहीं मिला" समस्या में भाग रहा था और इस प्रकार मैंने इस पूरे मैनिफेस्ट मुद्दे में अपना प्रयास शुरू किया।
मैं अंततः निष्कर्ष पर आया कि इसे काम करने के लिए एकमात्र तरीका (स्थिर रूप से सब कुछ जोड़ने के अलावा) यह है कि सभी तृतीय पक्ष पुस्तकालयों को विजुअल स्टूडियो के समान संस्करण का उपयोग करके संकलित किया जाना चाहिए - यानी प्रीकंपील्ड डीएलएस का उपयोग न करें - स्रोत डाउनलोड करें, एक नया डीएलएल बनाएं और इसके बजाए इसका इस्तेमाल करें।
क्या यह वास्तव में सच है? क्या मैं कुछ भुल गया?
इसके अलावा, यदि ऐसा लगता है, तो मैं मदद नहीं कर सकता लेकिन सोचता हूं कि माइक्रोसॉफ्ट ने घृणित कारणों से यह किया है।
न केवल सभी प्रीकंपील्ड बाइनरी को तोड़ने में अनावश्यक रूप से मुश्किल होती है, यदि आप एक ऐसी सॉफ्टवेयर कंपनी के लिए काम करते हैं जो तीसरे पक्ष के स्वामित्व पुस्तकालयों का उपयोग करता है, तो जब भी वे विजुअल स्टूडियो के नवीनतम संस्करण में अपग्रेड करते हैं - आपकी कंपनी को अब वही काम करना होगा या कोड अब नहीं चलेंगे।
एक तरफ, लिनक्स इस से कैसे बचता है? हालांकि मैंने कहा कि मैं इसे विकसित करना पसंद करता हूं और मैं लिंकिंग के यांत्रिकी को समझता हूं, मैंने इस तरह के निम्न स्तर के साझा पुस्तकालयों की समस्या को हल करने के लिए पर्याप्त लंबे समय तक कोई भी अनुप्रयोग नहीं बनाए रखा है।
अंत में, समेकित करने के लिए: क्या इस नई मेनिफेस्ट योजना के साथ प्रीकंपील्ड बाइनरी का उपयोग करना संभव है? यदि यह है, तो मेरी गलती क्या थी? यदि ऐसा नहीं है, तो माइक्रोसॉफ्ट ईमानदारी से सोचता है कि यह एप्लिकेशन विकास को आसान बनाता है?
अपडेट - एक और संक्षिप्त प्रश्न: लिनक्स मेनिफेस्ट फ़ाइलों के उपयोग से कैसे बचता है?
मुझे समझ में नहीं आ रहा है कि इस सवाल को क्यों वोट दिया गया है ... ऐसा लगता है कि ... और थोड़ी सी माइक्रोसॉफ्ट निराशा से अच्छी तरह से परेशान, अच्छी तरह से निराश और तर्क के लिए तैयार है। – Beska
मुझे लगता है कि यह पढ़ने के लिए बहुत सारे पाठ है! यदि सवाल अधिक संक्षिप्त था तो उसे बेहतर भाग्य हो सकता है। –
जब कोई प्रश्न का शीर्षक पूछता है "क्या एक्स बुराई की कोशिश कर रहा है?" जब लोग इसे कम करते हैं तो आश्चर्यचकित न हों। :) – bk1e