जब मैं एक ऐसी प्रक्रिया चलाता हूं जो किसी साझा लाइब्रेरी को रनटाइम से लिंक करता है (लिंक जब प्रक्रिया शुरू होती है, तो बाद में लिंक नहीं की जाती है dlload()
), तो यह उस साझा लाइब्रेरी ( .so
) फ़ाइल के अलावा LD_LIBRARY_PATH
कहां दिखता है ?
पृष्ठभूमि:
मेरे पास कुछ C ++ कोड हैं जो मैंने लिखा था कि एक विशेष तीसरे पक्ष के पुस्तकालय का उपयोग करता है। मैंने पुस्तकालय स्थापित किया है और दो अलग-अलग प्लेटफार्मों पर अपना कोड संकलित किया है, दोनों उबंटू लेकिन अलग-अलग संस्करण, और जीसीसी के विभिन्न संस्करण भी। पुस्तकालय को स्रोत से संकलित और स्थापित किया गया था, और /usr/local/lib
दोनों प्लेटफार्मों पर स्थित है । जब मैं अपना कोड संकलित करता हूं, तो मैं pkg-config --libs
तीसरे पक्ष के पुस्तकालय के लिए मापदंडों के साथ लिंक करता हूं और मैंने सत्यापित किया है कि pkg-config --libs
दोनों प्लेटफार्मों पर एक ही बात वापस करता है।
मेरा कोड दोनों प्लेटफार्मों पर सफलतापूर्वक संकलित है, और दोनों प्लेटफार्मों पर LD_LIBRARY_PATH
परिभाषित नहीं है (या खाली के रूप में परिभाषित किया गया है ""
)। हालाँकि, जब मैं इसे एक प्लैटोफ़ॉर्म पर चलाता हूं तो यह ठीक काम करता है, और दूसरे पर मुझे यह त्रुटि मिलती है:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
मजेदार रूप से पर्याप्त, जो काम नहीं करता है वह उबंटू और जीसीसी का नया संस्करण है। : /
तो मैं यह पता लगाने की कोशिश कर रहा हूं कि कैसे काम करने वाला पुस्तकालय का पता लगाने में सक्षम है, ताकि मैं टूटी हुई को उसी तरह से पुस्तकालय का पता लगा सकूं। (अर्थात, बिना सेटिंग के LD_LIBRARY_PATH
)
अद्यतन करें:
यहाँ से मेरा आउटपुट है cat /etc/ld.so.conf.d/*
... कार्यशील (पुरानी) प्रणाली पर:
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... टूटी (नई) व्यवस्था पर:
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
लेकिन फिर भी यह त्रुटि देता है error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... क्या कोई कारण है कि यह एक निर्देशिका नहीं उठाएगा /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
नीचे सुझाए अनुसार चलाने का प्रयास करें। यदि यह अभी भी काम नहीं करता है तो आउटपुट के साथ अपने प्रश्न को अपडेट करें ldd /path/to/your/application
।
/etc/ld.so.conf.d/*.conf
, लेकिन मुझे यकीन नहीं है।