ubuntu - Linux: How to find out which (sub) dependency of my library needs a specific library? -


शीर्षक जटिल लग सकता है।

मैंने एक टेम्प्लेट स्क्रिप्ट के अंदर एक पुस्तकालय लोड किया है। अब मुझे इसे Ubuntu 12.04 पर स्थानांतरित करना होगा Tclsh निम्न त्रुटि देता है:

  फ़ाइल लोड नहीं कर सका "/apollo/applications/Linux-पोर्ट/i586/lib/libapmntwraptcl.so": ** लिब्जेस -3.4.2.so * *: साझा ऑब्जेक्ट फ़ाइल नहीं खोल सकता: "load $ :: env (ACCLIB) / libapmntwraptcl [info sharedlibextension]"   

निष्पादित करते समय ऐसी कोई फ़ाइल या निर्देशिका नहीं है संस्करण 3.4.2 Ubuntu 12.04 के तहत। इसलिए मुझे यह जानना होगा कि मेरे लाइब्रेरी की कौन-सी उप-निर्भरता प्रसिद्ध लिब्जेस -3.4.2 की आवश्यकता है, ताकि मैं इसे पुनर्निर्माण कर सकूं या वैकल्पिक खोज सकूं।

अग्रिम में बहुत धन्यवाद।

संपादित करें:

आपके उपयोगी उत्तर के लिए धन्यवाद मैंने पहले ही एलडीडी-वी या -आर किया था मेरे पास 200+ निर्भरताएं हैं जब मैं एलडीडी -आर करता हूं सबसे खराब है, परिणाम सूची में मुझे libgeos-3.3.8.so = & gt; /usr/lib/libgeos-3.3.8.so (0xb3ea9000) (मेरे पास संस्करण है), लेकिन जब मैं निष्पादित करता हूं, तो Tclsh कहते हैं कि लिब्जेस -3.4.2।

यही कारण है कि मुझे मुझे अपनी लाइब्रेरी के पूर्ण निर्भरता वाले पेड़ को बता सकने की आवश्यकता है।

क्या कोई मुझे एक संकेत (कुछ बेकार शोफ नहीं) दे सकता है?

बहुत बहुत धन्यवाद।

आप अकस्मात (शायद कोई गलती के माध्यम से) अपनी खुद की) में घूमते हैं ???? DLL Hellâ ????; समस्या यह है कि libapmntwraptcl.so पर निर्भर करता है, संभवतः अप्रत्यक्ष रूप से , इसकी निर्भरता संतुष्ट नहीं होती है इस प्रकार की चीज को हल करना बहुत कठिन हो सकता है ठीक है क्योंकि उपकरण जो जानते हैं कि गलत क्या हुआ (विशेषकर, सिस्टम डायनेमिक लिंकर लाइब्रेरी) डिफ़ॉल्ट रूप से इस तरह की छोटी जानकारीपूर्ण आउटपुट का उत्पादन करती है।

इससे भी बदतर क्या है कि आपके पास जाहिरा तौर पर कई संस्करण हैं यही वह जगह है जहां डीएलएल नरक का सबसे बुरा अवतार होता है। आपको इसका समाधान करने के लिए एक जासूस होना चाहिए;

आपको यह पता लगाना होगा कि आप कौन से संस्करण लोड कर रहे हैं, ldd के साथ Libapmntwraptcl.so (आपके शेल में, टीसीएल में नहीं)। आप को यह भी दोहरा करनी चाहिए कि आपके पर्यावरण चर, आपराधिक लोड कमांड के ठीक पहले ही हैं, क्योंकि उनमें से कई लोडिंग प्रक्रिया को प्रभावित कर सकते हैं। ऐसा करने का सबसे आसान तरीका <कोड> पैरे एंव को अपमानजनक लोड से पहले रखना है, जो उस संदर्भ में सब कुछ का एक डंप देगा जहां चीजें विफल हो सकती हैं; ld.so के लिए मैन्युअल पृष्ठ को पढ़ना आपको मुसीबत के लिए संभावित उम्मीदवारों में से प्रत्येक के बारे में बहुत कुछ बताएगा (कई लोग हैं!)।

आपको भी ऊपर दिए गए ldd कार्यक्रम द्वारा पहचाने जाने वाले पुस्तकालयों की सूची और जांचें कि उनमें से प्रत्येक के पास भी उनकी निर्भरता संतुष्ट है और जिस तरह से आप अपेक्षा करते हैं, और आपको यह भी ध्यान में रखना चाहिए कि एलडीडी का अर्थ यह नहीं हो सकता है कि कोड वास्तव में विफल रहता है (यह बहुत आसान होगा।)

आप load LD_DEBUG पर्यावरण चर को सभी सेट करने का प्रयास कर सकते हैं >। यह मानक के बारे में बहुत सारी जानकारी देगा; हो सकता है कि आपको यह समझने के लिए पर्याप्त होगा कि क्या गलत हो रहा है?

अंत में, लिनक्स पर आपको यह ध्यान रखना होगा कि एक विशेष पुस्तकालय के लिए आरपीएटीएच सेट हो सकता है (जिस पर यह प्रभावित होता है ) और एक सिस्टम लाइब्रेरी कैश है जो चीजों को प्रभावित कर सकता है।


मुझे वाकई अफसोस है कि त्रुटि संदेश बेहतर नहीं है मैं वास्तव में यह कह सकता हूं कि यह वास्तव में उतना ही है जितना Tcl को बताया गया है कि क्या गलत था और इसकी शायद कुछ भी।

Comments

Popular posts from this blog

Java - Error: no suitable method found for add(int, java.lang.String) -

java - JPA TypedQuery: Parameter value element did not match expected type -

c++ - static template member variable has internal linkage but is not defined -