मेरे पास एक ऐसा प्रोग्राम है जो साझा लाइब्रेरी पर निर्भर करता है, यह निर्देशिका संरचना के अंदर गहराई से खोजने की अपेक्षा करता है। मैं उस साझा लाइब्रेरी को बाहर और बेहतर स्थान पर ले जाना चाहता हूं। ओएस एक्स पर, यह install_name_tool के साथ किया जा सकता है। मैं लिनक्स के बराबर नहीं ढूंढ पा रहा हूं।किसी प्रोग्राम को बनाने के बाद साझा लाइब्रेरी के फ़ाइल नाम को मैं कैसे बदल सकता हूं?
संदर्भ के लिए, readelf -d myprogram
निम्नलिखित दूसरे शब्दों में बयान उत्पादन बाहर थूक:
Dynamic section at offset 0x1e9ed4 contains 30 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [this/is/terrible/library.so]
0x00000001 (NEEDED) Shared library: [libGL.so.1]
0x00000001 (NEEDED) Shared library: [libGLU.so.1]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
(continues in an uninteresting fashion)
(और अनुरोध के द्वारा, ldd myprogram
:)
linux-gate.so.1 => (0x0056a000)
this/is/terrible/library.so => not found
libGL.so.1 => /usr/lib/mesa/libGL.so.1 (0x0017d000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00a9c000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00710000)
(etc, etc)
और मैं शुद्धिपत्र करने के लिए "चाहते हैं यह/है/भयानक/लाइब्रेरी.सो "साझा"/पुस्तकालय.सो "होना"। ध्यान दें कि, यदि प्रोग्राम अपने "निर्मित" स्थान में छोड़ा गया है, जहां सापेक्ष पथ यह// भयानक/लाइब्रेरी है। वास्तव में मौजूद है, तो ldd इसे ढूंढने में सक्षम है, जैसा कि आप उम्मीद करेंगे।
मुझे RPATH के बारे में पता है और यह वह नहीं है जिसे मैं ढूंढ रहा हूं, मुझे वैश्विक स्तर पर खोज पथ बदलने की आवश्यकता नहीं है।
तो आप कह रहे हैं कि "यह/है/भयानक /" पथ rpath के रूप में सेट नहीं है? क्या यह लाइब्रेरी के सोनम का हिस्सा है? मुझे नहीं लगता कि लिनक्स पर install_name है। –
हां, यह सोनीम का हिस्सा होगा, जो लिंकर द्वारा प्रस्तुत किया गया था जब मूल लिंक के आधार पर इसे लिंक किया गया था। – ZorbaTHut
क्या आप 'ldd।/Yourprogram' आउटपुट भी पोस्ट कर सकते हैं? –