2012-10-23 8 views
9

मेरे पास एक ऐप है, इसे Animal.app पर कॉल करें। इसके Contents/Frameworks फ़ोल्डर के अंदर एक फ्रेमवर्क है, Mammal.framework कहें। और ढांचे के Versions/A/Frameworks फ़ोल्डर के अंदर, मेरे पास dog.dylib है। dog.dylib का इंस्टॉल नाम @ rpath/dog.dylib है। फ्रेमवर्क की "Runpath Search Paths" सेटिंग के लिए, मैंने @loader_path/../Frameworks निर्दिष्ट किया है। (है कि पिछले सेटिंग के लिए मेरे तर्क है कि dylib के "लोडर", ढांचे के द्विआधारी होगा पथ Mammal.framework/Versions/A/Mammal पर है।)@rpath एक ढांचे में एम्बेडेड एक गतिशील पुस्तकालय के लिए

मैं रनटाइम पर एक त्रुटि संदेश मिलता है:

Dyld Error Message: 
    Library not loaded: @rpath/dog.dylib 
    Referenced from: /Volumes/VOLUME/*/Animal.app/Contents/MacOS/../Frameworks/Mammal.framework/Versions/A/Mammal 
    Reason: image not found 

मैं ऐप्पल के "रन-पथ आश्रित पुस्तकालय" दस्तावेज, और @rpath पर माइक ऐश का ब्लॉग पोस्ट पढ़ा है, लेकिन मैं अभी भी यह नहीं देख सकता कि मैं क्या गलत कर रहा हूं।

उत्तर

6

यह पता चला है कि सही रनपाथ खोज पथ @loader_path/Frameworks है। जो मैं याद कर रहा था वह यह है कि @loader_path लोडर के पूर्ण पथ का प्रतिनिधित्व नहीं करता है, लेकिन वह पथ इसके अंतिम घटक से कम है। Mike Ash's blog post यह कहता है, लेकिन मैंने इसे किसी भी तरह से याद किया। इस प्रकार, एक ढांचे के मामले में, @loader_path ए

+0

हाँ के साथ समाप्त होता है, स्पष्ट होने के लिए: आपके नेस्टेड डाइलिब और उसके मूल रूपरेखा दोनों के लिए स्थापना निर्देशिका "@rpath" होना चाहिए। इसके बाद मूल ढांचे में "रनर_पैथ/फ्रेमवर्क" शामिल हैं, जो रनपाथ सर्च पथ में हैं (चूंकि डाइलीब फ्रेमवर्क फ़ोल्डर के भाई के रूप में समाप्त होता है); इस ढांचे का उपयोग करने वाले ऐप में "@loader_path /../ फ्रेमवर्क" शामिल है (चूंकि निष्पादन योग्य मैकोज़ में है)। ऐप '@ execable_path' का भी उपयोग कर सकता है, लेकिन' @ loader_path' कूलर लगता है :-) – natevw

+1

मुझे समझ में नहीं आता कि आपने वास्तव में इसे काम करने के लिए क्या किया ... मुझे यह बताएं कि मैं 6 हूँ। –

+2

@ प्रो। फाल्कन: लिंकिंग के तहत, फ्रेमवर्क के लिए बिल्ड सेटिंग्स में, "रनपाथ सर्च पथ" नामक एक सेटिंग है। मैंने अपना मान '@ loader_path/फ्रेमवर्क 'पर सेट किया है। – JWWalker

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