/ Usr / स्थानीय / lib में साझा पुस्तकालयों का उपयोग करें


58

मैं स्रोतों से कुछ पुस्तकालयों का निर्माण किया है, और बाद में फ़ाइलों make installमें हैं/usr/local/lib

उदाहरण के लिए, मेरे मामले में मेरे पास फ़ाइल है libodb-2.2.soजो इस निर्देशिका में है।

हालाँकि जब मैंने निष्पादन योग्य लिंक को लॉन्च किया है libodb, तो मुझे त्रुटि मिली: साझा पुस्तकालयों को लोड करते समय त्रुटि:libodb-2.2.so: cannont open shared object file: No such file or directory.

क्या इसका मतलब है कि मैंने अपने निष्पादन योग्य को सही ढंग से नहीं बनाया है? या क्या मुझे सिस्टम को इंगित करना चाहिए कि फ़ोल्डर में कुछ दिलचस्प काम हो सकते /usr/local/libहैं?

मैं Ubuntu 12.04, लिनक्स कर्नेल 3.2.0-38-जेनेरिक का उपयोग कर रहा हूं।



मैं दृढ़ता से सुझाव देता हूं कि आप अपने डिबगर के साथ अच्छे दोस्ती का रिश्ता बना रहे हैं
DDS

@ डीडीएस मैं सुझाव देता हूं कि आप थोड़ा और विस्तृत करें। आप जानते हैं कि यह एक सहयोगी साइट है। कृपया, उदाहरण के लिए, समस्या के gdbसाथ किसी भी तरह से मदद करने के तरीके को इंगित करें link। मैं वास्तव में उत्सुक हूं। पहले तो आपकी टिप्पणी मुझे समस्या से असंबंधित लगती है। लेकिन हो सकता है मैं गलत हूं। वास्तव में मुझे पर्याप्त जानकारी नहीं है gdb, और पुस्तकालयों की लोडिंग।
स्टीफन रोलैंड

क्षमा करें ... इस टिप्पणी को सी प्रोग्रामिंग के बारे में एक शिक्षार्थी के सवाल पर स्टैक्वॅवरफ्लो पर रखा जाना चाहिए था ... बस यह नहीं देखा गया था कि U & L
DDS

@DDS शुरुआत सी प्रोग्रामिंग सीखने, या लिनक्स पर सीखने की इमारत में? कृपया, अधिक सटीक रहें। उदाहरण के लिए मैं विंडोज से आ रहा था। इसका मतलब यह नहीं है कि मैं सी ++ नहीं जानता ... मुझे लगता है कि आपका निर्णय व्यवहार सटीक नहीं है। यहां तक ​​कि अगर यह एसओ पर था, तो आपके व्यवहार को जल्द ही मध्यस्थों का ध्यान मिलेगा। उस के बारे में पता होना चाहिए। आप उपयोगी कार्यक्रमों को साझा करने वाले उत्साही प्रोग्रामरों में से एक COLLABORATIVE साइट पर हैं। कहीं आपके अहंकार की चापलूसी करने के लिए डिज़ाइन नहीं। (चिंता न करें जब मैंने SO को शुरू किया तो मैं भी धीरे-धीरे / यथोचित रूप से धराशायी हो गया, और मुझे लगता है कि यह वास्तव में अच्छी बात थी)।
स्टीफन रोलैंड

जवाबों:


58

वर्तमान सत्र के लिए आप कर सकते हैं

निर्यात LD_LIBRARY_PATH = / lib: / usr / lib: / usr / स्थानीय / lib

या परिवर्तन स्थाई बनाने के लिए आप जोड़ सकते हैं /usr/local/libकरने के लिए /etc/ld.so.conf(या कुछ और यह भी शामिल है) और चलाने के ldconfigरूट के रूप में।

यदि आपको अभी भी समस्याएँ हो रही हैं, तो रनिंग ldd [executable name]आपको उन पुस्तकालयों को दिखाएगी जिन्हें खोजने की कोशिश की जा रही है, और जो नहीं मिल सकते हैं।


3
से manके लिए पेज ldd(1)"हमेशा की तरह मामले में, ldd मानक गतिशील लिंकर (देखें आह्वान ld.so(8)के साथ) LD_TRACE_LOADED_OBJECTSवातावरण चर करने के लिए सेट 1है, जो पुस्तकालय निर्भरता प्रदर्शित करने के लिए लिंकर कारण बनता है। ध्यान रखें, हालांकि, कि कुछ परिस्थितियों में, के कुछ संस्करणों lddमई । सीधे कार्यक्रम इस प्रकार, आप को काम कभी नहीं करना चाहिए क्रियान्वित करते हुए निर्भरता जानकारी प्राप्त करने का प्रयास lddएक पर अविश्वसनीय निष्पादन ।, के बाद से इस मनमाने ढंग से कोड के निष्पादन में हो सकता है एक सुरक्षित विकल्प जब से निपटने अविश्वस्त निष्पादनयोग्य है: ... "
SlySven

4
"... $ objdump -p /path/to/program | grep NEEDED"
SlySven

एक अच्छा - मैं पहले कभी भी objdump के पार नहीं आया हूँ।
फ्लॉप

इस लेख के अनुसार यह उत्तर कैनोनिक रूप से गलत और हानिकारक है । एक सही दृष्टिकोण के लिए के उपयोग -Lऔर -rpathजोड़ने खोज पुस्तकालयों के लिए पथ और रनटाइम खोज पथ सेट करने के लिए संकलन के दौरान के अनुसार सही तरीका है, इस सवाल-जवाब।
क्लिफ आर्मस्ट्रांग

36

यदि आप ldconfigलाइब्रेरी बनाने के बाद पहले ही भाग चुके हैं , तो पढ़ते रहें। यदि नहीं, तो पहले abdout ldconfig पढ़ें

/usr/local/libपुस्तकालय पथ में नहीं हो सकता है जो ldconfig का उपयोग करता है। आप ऐसा कर सकते हैं:

ldconfig /usr/local/lib

और सामान को लिंकर कैश में जोड़ा जाना चाहिए, लेकिन संभवतः पथ को ठीक से जोड़ना बेहतर है। सुनिश्चित करें कि आपके पास एक /etc/ld.so.conf.dनिर्देशिका है। यदि ऐसा है तो एक फ़ाइल जोड़ें (इसे "usr-local.conf", या जो भी कहें), और इसमें एक पंक्ति डालें:

/usr/local/lib

अब दौड़ो ldconfig। यदि आपके पास ld.so.conf.d निर्देशिका नहीं है, तो आपके पास एक /etc/ld.so.conf फ़ाइल होनी चाहिए और आप उस पंक्ति को इसके अंत में जोड़ सकते हैं।


3
मैंने एक custom.conf फ़ाइल जोड़ दी है, /etc/ld.so.conf.dफिर इसे खाते में लेने के लिए ldconfig को स्कैन किया है और मेरा निष्पादन योग्य अब शुरू हो सकता है।
स्टीफन रोलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.