साझा लाइब्रेरी विधिपत्र शामिल तंत्र के सबसे बताते हैं, और गतिशील लोडर मैनुअल और अधिक विस्तार में चला जाता है। प्रत्येक यूनिक्स संस्करण का अपना तरीका है, लेकिन अधिकांश एक ही निष्पादन योग्य प्रारूप ( ईएलएफ ) का उपयोग करते हैं और समान गतिशील लिंकर (सोलारिस से व्युत्पन्न) होते हैं। नीचे मैं लिनक्स पर ध्यान देने के साथ सामान्य व्यवहार को संक्षेप में बताऊंगा; पूरी कहानी के लिए अपने सिस्टम के मैनुअल की जाँच करें।
संक्षेप में, जब यह एक गतिशील पुस्तकालय ( .so
फ़ाइल) की तलाश में है, तो लिंकर कोशिश करता है:
LD_LIBRARY_PATH
पर्यावरण चर में सूचीबद्ध निर्देशिका ( DYLD_LIBRARY_PATH
OSX पर);
- निर्देशिका निष्पादन योग्य rpath में सूचीबद्ध ;
- सिस्टम खोज पथ पर निर्देशिका, जो (कम से कम लिनक्स पर)
/etc/ld.so.conf
प्लस /lib
और में प्रविष्टियों के होते हैं /usr/lib
।
Rpath को निष्पादनीय (यह DT_RPATH
या DT_RUNPATH
गतिशील विशेषता) में संग्रहीत किया जाता है । इसमें निरपेक्ष पथ या पथ शामिल हो सकते हैं $ORIGIN
, जो निष्पादन योग्य के स्थान के सापेक्ष पथ को इंगित करने के लिए शुरू होते हैं (जैसे कि यदि निष्पादन योग्य है /opt/myapp/bin
और इसका rpath है $ORIGIN/../lib:$ORIGIN/../plugins
तो गतिशील लिंकर अंदर दिखेगा /opt/myapp/lib
और /opt/myapp/plugins
)। Rpath सामान्य रूप से निर्धारित किया जाता है जब निष्पादन योग्य संकलित किया जाता है, -rpath
विकल्प के साथ ld
, लेकिन आप इसे बाद में बदल सकते हैं chrpath
।
आपके द्वारा वर्णित परिदृश्य में, यदि आप एप्लिकेशन के डेवलपर या पैकेजर हैं और इसे एक …/bin
, …/lib
संरचना में स्थापित करने का इरादा रखते हैं , तो इसके साथ लिंक करें -rpath='$ORIGIN/../lib'
। यदि आप अपने सिस्टम पर एक पूर्व-निर्मित बाइनरी स्थापित कर रहे हैं, या तो लाइब्रेरी को खोज पथ पर निर्देशिका में डाल दें ( /usr/local/lib
यदि आप सिस्टम व्यवस्थापक हैं, अन्यथा एक निर्देशिका जिसे आप जोड़ते हैं $LD_LIBRARY_PATH
), या प्रयास करें chrpath
।
/lib64
और/usr/lib64
64 बिट binaries के लिए उपयोग किया जाता है और/lib
और/usr/lib
32 बिट binaries के लिए उपयोग किया जाता है।