मेरे पास परियोजनाओं का संग्रह है जो मैं गतिशील पुस्तकालयों के रूप में संकलित कर रहा हूं। इनमें से प्रत्येक .dylibs अन्य विभिन्न ddibibs पर निर्भर करता है जिसे मैं विभिन्न अन्य निर्देशिकाओं में रखना चाहता हूं (यानी कुछ निष्पादन योग्य पथ पर, कुछ लोडर पथ पर, कुछ निश्चित पथ पर)।रन पथ, खोज पथ, और नाम स्थापित करने के लिए सही तरीके से सेट कैसे करें?
जब मैं संकलित पुस्तकालयों पर otool -L
चलाता हूं, तो मुझे उन निर्भरताओं के पथों की एक सूची मिलती है लेकिन मुझे पता है कि ये पथ कैसे सेट/निर्धारित किए जा रहे हैं। वे लगभग छद्म यादृच्छिक दिखाई देते हैं। मैंने इन पथों (w/@rpath, @executable_path, @loader_path, आदि) को आजमाने और बदलने के लिए एक्सकोड में "बिल्ड सेटिंग्स" के साथ गड़बड़ करने में घंटों बिताए हैं, लेकिन मुझे कुछ भी बदलने की प्रतीत नहीं होती है (जैसा कि otool -L
चलाकर चेक किया गया है)। - "गतिशील लाइब्रेरी स्थापित नाम"
लिंकिंग - "Runpath खोजें पथ
लिंकिंग: मैं भी पूरी तरह से जहां इन झंडे को जोड़ने के लिए और वास्तव में निम्नलिखित या कैसे ठीक उन्हें इस्तेमाल करने के बीच का अंतर समझ में नहीं आता यकीन नहीं है "
लिंकिंग -" अन्य लिंक करना झंडे "
खोजें पथ -" लाइब्रेरी खोज पथ "
जब मैं विभिन्न पुस्तकालयों पर install_name_tool -change
चलाने के लिए, मैं के रूप में चल द्वारा सत्यापित सफलतापूर्वक चलाने के पथ खोज पथ (पुन: परिवर्तित करने में सक्षम हूँ पुष्टि करने के लिए otool -L
)।
मैं एक्सकोड 4.2 चला रहा हूं और मैं छोड़ने के लिए बहुत करीब हूं और केवल पोस्ट-बिल्ड स्क्रिप्ट का उपयोग कर रहा हूं जो परिवर्तन करने के लिए install_tool_name चलाता है। लेकिन यह एक क्लज हैक फिक्स और मैं इसे नहीं करना पसंद करूंगा।
मैं कहां देख सकता हूं कि डायलीब निर्भरताओं के लिए खोज/रन पथ कैसे सेट किए जा रहे हैं?
किसी के पास कोई विचार है कि मैं क्या गलत कर रहा हूं?
हालांकि नहीं सटीक उत्तर मैं खोज रहा था, यह मुझे मेरी समस्या की पहचान करने में मदद की। 'otool -L' सभी इंस्टॉल नाम सूचीबद्ध करता है। सूचीबद्ध पहला 'इंस्टॉल नाम' लाइब्रेरी का ही है। सूचीबद्ध किसी भी अतिरिक्त पथ इसकी निर्भरताओं के लिए हैं। मान लें कि आपने स्रोत से निर्भरताओं को संकलित किया है, एक्सकोड में "गतिशील लाइब्रेरी इंस्टॉल नाम" सेट करना इन पथों को सही ढंग से सेट करेगा। हालांकि मेरे मामले में, निर्भरता तीसरे पक्षों से हैं इसलिए पथ पहले ही सेट किए गए थे। चूंकि मेरे पास तीसरे पक्ष के पुस्तकालयों के संकलन पर कोई नियंत्रण नहीं है, इसलिए मुझे 'install_name_tool -change' का उपयोग करने के लिए मजबूर होना पड़ता है। – BigMacAttack
खुशी है कि आपने इसे समझ लिया। –
बहुत उपयोगी उत्तर .. – Ahmed