जब आप एक गतिशील पुस्तकालय से लिंक करते हैं, तो लिंकर प्रोग्राम के गतिशील खंड में NEEDED
प्रविष्टि जोड़ देगा। फिर गतिशील लोडर पुस्तकालय का पता लगाने के लिए इनका उपयोग करेगा और पुस्तकालय का उपयोग किसी अपरिभाषित गतिशील प्रतीक को हल करने के लिए करेगा।
ध्यान दें कि अपरिभाषित गतिशील प्रतीकों और गतिशील पुस्तकालयों के बीच कोई संबंध नहीं है जहां उन्हें मिलने की उम्मीद है। कभी-कभी वे एक और पुस्तकालय में पाए जाते हैं और दिलचस्प चीजें हो सकती हैं।
विशेष NEEDED
प्रविष्टि में संग्रहीत नाम चाहे पुस्तकालय की गतिशील अनुभाग में एक SONAME
प्रविष्टि है पर निर्भर करता है:
- यदि वहाँ एक
SONAME
, तो उसकी सामग्री कार्यक्रम के NEEDED
में कॉपी किया जायेगा
- यदि कोई
SONAME
नहीं है, तो लिंकर कमांड में उपयोग की जाने वाली लाइब्रेरी का फ़ाइल नाम संग्रहीत किया जाएगा।
आप के साथ एक पुस्तकालय या प्रोग्राम के गतिशील खंड की सामग्री की जाँच कर सकते हैं:
$ objdump -p program
यह कैसे व्यवहार में प्रयोग किया जाता है? खैर, सबसे अधिक (? सब) लिनक्स वितरण निम्नलिखित योजना, प्रणाली पुस्तकालयों के साथ उपयोग करें (libfoo.so
लेने के लिए):
- पुस्तकालय
/usr/lib/libfoo.so.1.2
के रूप में स्थापित किया गया है या जो कुछ भी संस्करण में यह है।
/usr/lib/libfoo.so.1
और /usr/lib/libfoo.so
नामक उस लाइब्रेरी के प्रतीकात्मक लिंक हैं।
- लाइब्रेरी का
SONAME
libfoo.so.1
है।
- पथ
/usr/lib
को गतिशील लाइब्रेरी पथ के रूप में सेट किया गया है।
इस तरह, जब आप -lfoo
के साथ लिंक यह सिमलिंक libfoo.so
मिलेगा, लेकिन SONAME
libfoo.so.1
के रूप में रिकॉर्ड करेगा। और जब प्रोग्राम चलाया जाता है तो उसे अन्य सिम्लिंक मिल जाएगा और लाइब्रेरी लोड होगी। ताकि आप एक ABI संगत स्थापित कर सकते हैं
यह चाल प्रयोग किया जाता है, libfoo.so.1.3
सुधार हुआ है और एक ABI असंगत नए libfoo.so.2.1
, और पुराने कार्यक्रम पुराने पुस्तकालय लोड होगा, जबकि नए संकलन नए पुस्तकालय का उपयोग करेगा।
यह भी ध्यान रखें कि पर्यावरण चर LD_PRELOAD
, LD_LIBRARY_PATH
और अन्य रनटाइम व्यवहार को प्रभावित करते हैं। अधिक जानकारी के लिए, आप man ld.so
पढ़ सकते हैं नोट: सी ++ मानक आमतौर पर गतिशील पुस्तकालयों का समर्थन नहीं करता है। स्पष्ट समर्थन के निकटतम के बारे में आपको नामस्थान स्कोप वेरिएबल्स के प्रारंभिकरण के बारे में बयान दिया गया है, संभवतः 'मुख्य' के पहले कथन के बाद देरी हो रही है। मानक में शब्द सिर्फ भ्रामक है, मुझे लगता है कि "मुख्य 'के पहले बयान की शुरुआत के बाद ही एकमात्र उचित व्याख्या है"। –
निष्पादन योग्य में एक शीर्षलेख है जिसमें विभिन्न वर्गों में जानकारी शामिल है। यदि आप हेडर की खोज में रूचि रखते हैं, तो आप एल्फ़ निष्पादन योग्य पर हेडर पढ़ने के लिए लिनक्स उपयोगिता 'readelf' का उपयोग कर सकते हैं। विशेष रूप से, आपको क्रमशः गतिशील अनुभाग और प्रतीक तालिका प्रदर्शित करने के लिए '-d' और' -s' स्विच की आवश्यकता होगी। – alvits