2012-04-25 22 views
5

के साथ समान रूप से नामित डीएलएल या साझा लाइब्रेरी ऑब्जेक्ट (इसलिए) से जुड़े दो प्लगइन्स मेरे पास दो "प्लगइन्स" हैं (चर्चा के लिए सॉफ़्टवेयर पैकेज में दो अलग-अलग अनुप्रयोगों के बारे में सोचें) जो गतिशील रूप से लिंक करते हैं मेरी लाइब्रेरी के दो अलग-अलग संस्करण बने। मेरा कोड सी ++ में लिखा गया है और पूरे नामों को लगातार नामस्थानों का उपयोग करता है। कभी-कभी मुझे प्रत्येक एप्लिकेशन के लिए दो अलग-अलग संस्करण बनाना पड़ता है। ऐसा कुछ समस्याएं उत्पन्न होती है जब पैकेज में दोनों अनुप्रयोग (प्लगइन्स) एक साथ लोड होते हैं। सबसे पहले मुझे यह समझने में मदद की ज़रूरत है कि यह त्रुटि क्यों होती है।अलग-अलग कार्यान्वयन (कोड)

उदाहरण के तौर पर, मेरे पास दो अलग-अलग लेकिन समान नामित पुस्तकालय हैं, mylib.so (या डीएलएल) कहें और प्रत्येक एप्लिकेशन इनमें से एक (अद्वितीय) से जुड़ा हुआ है। यदि mylib.so में अंतर्निहित कोड समान है (यानी, नामस्थान, कार्यों के नाम, आदि पाठ्यक्रम के थोड़ा अलग कार्यान्वयन के साथ) क्या इससे समस्याएं पैदा हो सकती हैं? क्या यह तथ्य नहीं है कि पुस्तकालयों की दो प्रतियां अस्पष्टता या अन्य लिंकिंग त्रुटियों के कारण उत्पन्न होने वाले किसी भी मुद्दे से बचने के लिए पर्याप्त अद्वितीय स्थानों में स्थित हैं? मुझे स्पष्ट रूप से नहीं लगता .. लेकिन मैं इस पर एक विशेषज्ञ से सुनना चाहता हूं।

वर्णन ऊपर मान लिया जाये कि है कि समस्या क्या है, केवल, पुस्तकालयों के नाम बदलने होगा कहते हैं शामिल करने के लिए कुछ संस्करण जानकारी जैसे, mylib_v1.so और mylib_v2.so अस्पष्टता त्रुटियों के विरुद्ध सुरक्षा के प्रदान पैदा (अंतर्निहित समारोह/नामस्थान नाम अभी भी समान किया जा रहा है) ? मुझे अभी भी नहीं लगता .. लेकिन मुझे इस बार यकीन नहीं है। मान लीजिए कि मैं सही हूं, नामस्थान में संस्करण जानकारी शामिल करने के लिए मेरे कोड में कुछ मैक्रो का उपयोग करके नेमस्पेस बदलना होगा (उदा। namespace mystuff {}namespace mystuff_v1 में बदल गया) कम से कम चाल करें? अपनी अंतर्दृष्टि की सराहना करें।

नोट: आश्चर्य की बात है कि अस्पष्टता केवल विंडोज़ पर होती है! लिनक्स किसी भी समस्या के बिना दूसरे अनुच्छेद में स्थिति को संभालने में सक्षम है।

उत्तर

2

यदि एप्लिकेशन विशिष्ट रूप से केवल एक का उपयोग कर रहे हैं, और PATHs और LD_LIBRARY_PATH सेट हैं ताकि वे मिलें, कोई संघर्ष नहीं है। आप देख सकते हैं कि सैकड़ों समान msvcrt.dll फ़ाइलों को एक बार अनुप्रयोगों के साथ वितरित किया गया, जब तक कि माइक्रोसॉफ्ट ने इसे हल नहीं किया।

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

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

  • कोई संबंधित समस्या नहीं^_^