2010-12-23 17 views
15

मैं एक जी ++ कंपाइलर का उपयोग कर उबंटू पर ग्रहण चला रहा हूं और मैं एक नमूना प्रोग्राम चलाने की कोशिश कर रहा हूं जो xerces का उपयोग करता है।साझा पुस्तकालयों को लोड करने में त्रुटि

निर्माण कोई त्रुटि तथापि का उत्पादन किया, जब मैं कार्यक्रम चलाने का प्रयास किया, मैं यह त्रुटि प्राप्त होगा: निर्देशिका /opt/lib जो मैं ग्रहण में एक पुस्तकालय के रूप में शामिल है में

error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory

libxerces-c-3.1.so है। जब मैं फ़ोल्डर की जांच करता हूं तो फ़ाइल वहां होती है। जब मैं echo $LD_LIBRARY_PATH करता हूं, /opt/lib भी सूचीबद्ध है।

कोई समस्या जहां समस्या है? धन्यवाद।

एक ldd libxerces-c-3.1.so आदेश पैदावार निम्नलिखित उत्पादन:

linux-vdso.so.1 => (0x00007fffeafff000) 
libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa3d2b83000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa3d2966000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa3d265f000) 
libm.so.6 => /lib/libm.so.6 (0x00007fa3d23dc000) 
libc.so.6 => /lib/libc.so.6 (0x00007fa3d2059000) 
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa3d1e42000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fa3d337d000) 
+0

साझा पुस्तकालयों को लोड करते समय [लिनक्स त्रुटि का संभावित डुप्लिकेट: साझा ऑब्जेक्ट फ़ाइल नहीं खोल सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं] (http://stackoverflow.com/questions/480764/linux-error-while-loading-shared- पुस्तकालय -कैनोट-ओपन-साझा-ऑब्जेक्ट-फ़ाइल-नो-एस) –

उत्तर

4

मैंने सभी लाइब्रेरी फ़ाइलों को/opt/lib/usr/lib में कॉपी किया है और प्रोग्राम अब काम करता है। जवाब के लिए धन्यवाद।

3

भागो ldd libxerces-c-3.1.so और उत्पादन करता है, तो सभी निर्भरता पाया जा सकता है देखने के लिए जांच करते हैं।

+0

मैंने परिणाम को एक ldd कमांड से परिणाम के साथ संपादित किया है। मैं लिनक्स के लिए बिल्कुल नया हूं इसलिए मुझे पूरा यकीन नहीं है कि आउटपुट का क्या अर्थ है। मुझे कैसे पता चलेगा कि मेरे पास सभी साझा पुस्तकालयों की आवश्यकता है या नहीं? क्या वे तीरों के साथ सूचीबद्ध हैं? – user459811

22

यह देखने के लिए कि क्या यह समस्या हल करता है, ldconfig चलाने की कोशिश करें।

+4

कोई बता सकता है कि यह क्यों काम करता है? –

+2

मैंने 'sudo ldconfig' चलाने की कोशिश की लेकिन यह अभी भी काम नहीं करता है – Nubcake

1

लाइब्रेरी libxerces-c3.1 के रूप में स्थापित करने का प्रयास करें। पुस्तकालय स्थापित करने के लिए नीचे उल्लिखित आदेश का प्रयोग करें।

sudo apt-get install libxerces-c3.1 

यह मेरे लिए एक आकर्षण की तरह काम करता था।

1

ऐसा करने के कई तरीके हैं, सबसे पहले यहां उल्लेख किया गया है। लेकिन आप सिस्टम में/उसकी गलती से अपनी लाइब्रेरी फ़ाइलों की प्रतिलिपि बनाने से बचें। यह आसानी से किया जाता है क्योंकि लोगों के पुस्तकालयों के लिए मूल अद्वितीय नाम बनाने में बहुत कम कल्पना होती है।

तो वहाँ चीजों की एक जोड़ी के बारे में सोचना हैं:

  • आप इन फ़ाइलों की जरूरत है आपके सिस्टम की एक स्थायी हिस्सा बनने के लिए है?
  • क्या आपको केवल परीक्षण और लगातार अपडेट के लिए इंस्टॉल करने की आवश्यकता है?
  • क्या आपको केवल चलाने के लिए उनकी आवश्यकता है विशेष आदेश एक बार या दो बार?
  • आपके मूल पुस्तकालय कहां स्थित हैं?

(खोज का उपयोग कर से अलग) आपके सिस्टम पर अपने विभिन्न पुस्तकालय स्थान ढूंढने के लिए, यहाँ देखो:

/lib   # for base system (don't use this!) 
/usr/lib  # for package manger installed apps 
/usr/local/lib # for user installed apps 

वहाँ कई हैं:

cat /etc/ld.so.conf  
cat /etc/ld.so.conf.d/* 

लिनक्स पर वहाँ कुछ मानक हैं अन्य, लेकिन आपको सबसे अधिक संभावना /usr/local/lib के साथ रहना चाहिए। अगला आपको इन सिस्टमों को कहां ढूंढना है, इस प्रणाली को बताने की जरूरत है।कूल सिस्टम दोस्त (जो जानता है कि वह क्या कर रहा है) ऐसा करने का तरीका ldconfig का उपयोग कर रहा है, हालांकि, अगर आप यहां कोई गलती करते हैं तो आप जो पछतावा करते हैं, वह आपको पछतावा कर सकता है। उस आदेश का उपयोग करने का सबसे सुरक्षित तरीका झंडे -v -n का उपयोग करके वर्बोज़ कमांड और निर्दिष्ट करने के लिए आपको कौन सी लाइब्रेरी निर्देशिका जोड़ने की आवश्यकता है।

sudo ldconfig -v -n /usr/local/lib/your-uber-libs 

हो गया। लेकिन यदि आप केवल चाहते हैं परीक्षण कुछ है, तो बजाय अपने LD_LIBRARY_PATH कमांड लाइन से सीधे, इस तरह का उपयोग करें:

LD_LIBRARY_PATH=/usr/local/lib/your-uber-libs ./your_uber_command 

वैकल्पिक रूप से, अपने .bashrc स्क्रिप्ट के लिए निम्न जोड़ें।

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/your-uber-libs 

अब आप अपने गतिशील रूप से जुड़े कमांड को चला सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे