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