2011-07-15 27 views
6

नहीं मिला मैं सॉफ्टवेयर है कि पहले एक .dylib लोड करता है libFirst.dylib निम्न आदेश का उपयोग कर फोन की सुविधा देता है है:dlopen() त्रुटि छवि

void* handle = dlopen(path.c_str(), RTLD_LAZY | RTLD_GLOBAL); 

बाद में भरी हुई libFirst.dylib से एक समारोह मैं करने की कोशिश के अंदर पर एक ही आदेश का उपयोग कर एक और .dylib लोड लेकिन libSecond.dylib के लिए, इस शेयर की गई लाइब्रेरी की लोडिंग मुझे मेरे Xcode कंसोल में निम्नलिखित चेतावनी देता है:

error warning: Ignored unknown object module at 0x129310 with type 0x8a8399 

dlerror: dlopen(/path/libSecond.dylib, 9): Library not loaded: libFirst.dylib 
    Referenced from: /path/libSecond.dylib 
    Reason: image not found 

क्या मैं नहीं मिलता है कि अपनी libFirst.dylib कहते है लोड नहीं किया गया है लेकिन मैं वर्तमान में libFirst.dylib से एक फ़ंक्शन के अंदर हूं, तो यह कैसे हो सकता है?

DYLD_LIBRARY_PATH में मेरे सभी पथ भी सही दिखाई देते हैं।

अग्रिम धन्यवाद, मैं इस दिन पर अटक गया हूं।

+0

क्या आपने स्ट्रेस की तरह कुछ करने की कोशिश की है? यह आपको विशेष रूप से देखने के लिए एक और जानकारी दे सकता है कि कौन सा कॉल विफल हो रहा है। – Josh

+0

मेरा स्टैक ट्रेस उस फ़ंक्शन को दिखाता है जो libSecond.dylib पर CreateModule नामक डलोपेन को कॉल कर रहा है, जो libFirst.dylib के अंदर एक फ़ंक्शन है। –

+0

स्टैक ट्रेस नहीं - स्ट्रेस सिस्टम ट्रेस के लिए खड़ा है। यह फाइलों को खोलने जैसी फाइलों की कॉल करता है, इन्सोड्स इत्यादि इत्यादि। यह कुछ प्रकाश डाल सकता है जहां वास्तव में आपका ओएस दिख रहा है। – Josh

उत्तर

3

मैं अपने सभी पुस्तकालयों के इंस्टॉल नाम को @ rpath/dylibName.dylib पर स्थापित करने के लिए -install_name का उपयोग कर समाप्त हुआ और फिर एक्सकोड में मैंने अपने सभी .dylibs का उपयोग करने के लिए @loader_path का उपयोग करके रनपाथ खोज पथ सेट किया।

+0

क्या आप * -install_name * का उपयोग करके अपनी पूरी कमांड लाइन दे सकते हैं? –

+1

हाय @ मार्टिन डेलिले। मैंने 3 साल पहले ऐसा किया था, इसलिए मेरे पास सटीक कमांड लाइन नहीं है, लेकिन यहां इसका उपयोग करने के बारे में एक ब्लॉग है: http://log.zyxar.com/blog/2012/03/10/install-name ऑन-os-x / –