"साझा की गई वस्तु को नहीं खोल सकते" त्रुटियों को दूर करने के लिए पुस्तकालयों से सहानुभूति रखना ठीक है (या नहीं)?


12

कभी-कभी, एक कारण या किसी अन्य के लिए, एक प्रोग्राम ने अपनी सभी निर्भरता को सही ढंग से निर्दिष्ट या शामिल नहीं किया है, और इसे शुरू करने से लापता निर्भरता का संकेत करने में त्रुटियां होती हैं। एक विशिष्ट त्रुटि कुछ इस प्रकार है:

cannot open shared object libudev.so.0

मैं लोगों को /usr/libया अन्य सिस्टम स्थानों पर सहानुभूति बनाकर इस तरह की समस्याओं के आसपास काम करने की सलाह देता हूं , और यह अक्सर समस्या को हल करने के लिए लगता है। लेकिन मैं लोगों को सलाह देने वाली समान संख्या देखता हूं कि यह एक बुरा विचार है। यहाँ एक जवाब है कि प्रतिनिधि है।

किसी प्रोग्राम को काम करने के लिए लाइब्रेरी को सिमल करना किन परिस्थितियों में स्वीकार्य है? कभी नहीँ? कभी कभी? क्या होगा अगर आप प्रोग्राम को चलाने के बाद सिमलिंक को हटा दें?

ऐसा करने के परिणाम क्या हैं?

जवाबों:


12

इन लिंक को बनाने में समस्या यह है कि वे किसी भी सार्थक तरीके से प्रबंधित नहीं होते हैं। यदि वह लाइब्रेरी हटा दी जाती है, तो लिंक टूट जाता है। यदि लाइब्रेरी अपग्रेड की गई है, तो यह लिंक के कारण एक त्रुटि का सामना कर सकता है जो इसके होने की उम्मीद नहीं करता है।

इसके अलावा, आप अनिवार्य रूप से सिस्टम से झूठ बोल रहे हैं। लिंक किए गए उदाहरण में, आप libudev.so.1वास्तव में दिखावा कर रहे हैं libudev.so.0। उन्हें एक कारण (लाइब्रेरी के विभिन्न संस्करणों) के लिए अलग नाम दिया गया है। हालांकि यह कुछ कार्यक्रमों के लिए ठीक काम कर सकता है, लेकिन ऐसी संभावनाएं हैं कि संस्करणों के बीच मतभेद मुद्दों का कारण बन सकता है (जैसे कि सीगफॉल्ट या अन्य अप्रत्याशित व्यवहार)।

इसलिए यदि आप विशेष रूप से इस लिंक को बना रहे हैं तो बस एक कार्यक्रम चलेगा, और आप जानते हैं कि आप इसे बाद में हटा देंगे, आप पहले मुद्दे को संबोधित करते हैं लेकिन दूसरे को नहीं। हालांकि यह प्राथमिक मुद्दे को संबोधित करता है, यह आदर्श नहीं है।

आदर्श समाधान पुस्तकालय के सही संस्करण (आपके लिंक किए गए उदाहरण पर स्वीकृत उत्तर) को स्थापित करने के लिए है, या आपके पास मौजूद संस्करण के खिलाफ कार्यक्रम को संकलित करने के लिए है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.