2013-01-21 14 views
8

में चल रहा है या डिबगिंग उबंटू पर, मेरे पास ग्रहण में एक सी ++ ऐप है। एप्लिकेशन ठीक संकलित करता है और मैं ऐप को कमांड लाइन से चला सकता हूं।साझा ऑब्जेक्ट फ़ाइल नहीं खोल सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं; ग्रहण

लेकिन जब मैंने उसे डिबग या ग्रहण के साथ इसे चलाने के लिए, त्रुटि करने का प्रयास करें:

"Cannot open shared object file: No such file or directory" किसी साझा लाइब्रेरी पर फेंक दिया है।

मैं अपने bashrc फाइल में LD_LIBRARY_PATH सेट करते हैं और दोनों भागो विन्यास और डीबग विन्यास में एक LD_LIBRARY_PATH वातावरण चर निर्धारित किया है करने के लिए:

/घर/behlingb/दस्तावेज़/api_libs/FileGDB_API/lib

ग्रहण प्राप्त करने के लिए मुझे और क्या याद आ रहा है?



अद्यतन

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

+1

मुझे लगता है कि आप रन कॉन्फ़िगरेशन में LD_LIBRARY_PATH सेट करने के साथ सही रास्ते पर हैं। क्या आपने यह सुनिश्चित करने के लिए जांच की है कि आप इसे रन कॉन्फ़िगरेशन का उपयोग कर चला रहे हैं? लीक्लिप्स में, यदि आप छोटे, हरे-चक्र वाले, दाएं, सफेद तीर के अलावा छोटे, नीचे, भूरे तीर पर क्लिक करते हैं, तो आप चुन सकते हैं कि कौन सी रन कॉन्फ़िगरेशन का उपयोग करना है। – BenB

+0

मैंने पाया कि ग्रहण सीडीटी (नियॉन 3) बहुत "स्थिर" नहीं है। कभी-कभी, ctrl + तीर काम नहीं करता है। विंडो बंद करना इसे ठीक करता है। कभी-कभी, मैंने जो पूछा उससे LD_LIBRARY_PATH संलग्न नहीं किया गया है। पुनरारंभ करना इसे ठीक करता है। – Hei

उत्तर

2

आप strace उपयोगिता (और फिर open और/या stat कॉल के लिए grep) का उपयोग कर सकते ख़ाली चलाने के लिए आवश्यक .so फ़ाइलों की सूची प्राप्त करने के लिए, तो locate का उपयोग (या संकुल के बीच लगता है) की आवश्यकता की वास्तविक नियुक्ति पता लगाने के लिए lib

10

मैं ग्रहण के केप्लर संस्करण का उपयोग कर रहा हूं।

  1. पर नई भागो तो डीबग विन्यास
  2. क्लिक पर ग्रहण क्लिक पर पर्यावरण टैब
  3. क्लिक में
  4. LD_LIBRARY_PATH जोड़ें और पुस्तकालय युक्त निर्देशिका करने के लिए अपने मूल्य सेट
  5. पुनः आरंभ ग्रहण
1

यह ग्रहण केप्लर (मैंने पुराने संस्करणों में नहीं देखा है) के साथ मान्य है। अपनी साझा लाइब्रेरी को लोड करने के लिए डीबगर को सक्षम करने के लिए, LD_LIBRARY_PATH सेट करने का प्रयास विफल हो जाएगा। हालांकि CDT प्लगइन इस उद्देश्य के

भागो मेनू के लिए एक साझा पुस्तकालय सूची प्रदान करता है ->डीबग विन्यास ...

तो विन्यास संवाद

C/C++ आवेदन में ->अपनी परियोजना ->डीबगर टैब ->साझा पुस्तकालय टैब

The Kepler dialog for adding debug shared libraries

+0

यह वास्तव में ऐसा लगता है कि यह सही जवाब होना चाहिए। मैंने इसे मंगल ग्रह पर आजमाया है और यह मेरे लिए काम नहीं कर रहा है। – Menace

2

@zuafi क्या सुझाव के अनुसार, आप पुस्तकालयों के लिए grep के लिए और `उन्हें खोजने के लिए पता लगाने 'की जरूरत नहीं है।

बजाय एक फाइल करने के लिए strace के उत्पादन को बचाने:

strace -o my_output_file.txt /path/to/my_executable_file 

तो फ़ाइल को खोलने, जहाँ आप उन पंक्तियों के नीचे देख सकते हैं

open("https://stackoverflow.com/a/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 

पुस्तक जब तक आप

open("/real/path/to/some/library.so", O_RDONLY|O_CLOEXEC) = 3 (any value here) 

इस हिट /real/path/to/some/library.so खोजने से पहले इसका मतलब है library.so में कई परीक्षण हुए हैं विभिन्न पथ लेकिन अंततः पुस्तकालय /real/path/to/some/ में पाया गया है।

बस इसे अपने ग्रहण में कॉपी और पेस्ट करें!

3

यदि आपने LD_LIBRARY_PATH सेट किया है और यह काम नहीं करता है। ग्रहण बंद करें और इसे कमांड टर्मिनल से चलाएं। मैंने गलती से पाया कि यह इसे काम कर सकता है। कारण के बारे में निश्चित नहीं है, लेकिन शायद ग्रहण प्रारंभिकरण के साथ कुछ करना है।

+0

वैसे, मैं ग्रहण – Northern

+0

के लुना संस्करण का उपयोग कर रहा हूं, मुझे लगता है कि यह इसलिए है क्योंकि टर्मिनल स्रोत ~/.bashrc लॉन्च पर है, और आपने इस फ़ाइल में 'LD_LIBRARY_PATH निर्यात किया था। – Efreeto