दिलचस्प पोस्ट
स्विफ्ट में स्ट्रिंग में इंट को परिवर्तित करें गतिशील प्रोग्रामिंग – सबसे बड़ा वर्ग ब्लॉक AJAX और jQuery का उपयोग करते हुए फॉर्म सबमिट करें जावास्क्रिप्ट बाइंड क्यों आवश्यक है? कॉर्डोबा अनुप्रयोग बनाने की कोशिश करते समय 'स्पॉन सीएमडी एनओएनएन्ट' प्राप्त करें (event.js: 85) तीसरे पक्ष के उपकरणों के बिना .bat फ़ाइल को 'परिवर्तित' करने के लिए .exe कैसे हो सकता है? ओपनएमपी के साथ चोलस्की अपघटन सेट और जावा में तरीकों जाओ? # चेतावनी: कथन के लिए सी-शैली नापसंद है और स्विफ्ट के एक भावी संस्करण में निकाल दी जाएगी 64 बिट ntohl () सी ++ में? आर्किटेक्चर i386 के लिए प्रतीक (एस) नहीं मिले I386 क्या एक AngularJS नियंत्रक एक ही मॉड्यूल में दूसरे नियंत्रक से उत्तराधिकारी हो सकता है? अजगर में अयोग्य अपवाद लॉगिंग दिनांक समय डालने के दौरान दिनांक और / या समय को वर्ण स्ट्रिंग से कनवर्ट करते समय रूपांतरण विफल रहा सफारी के साथ html5 स्थानीय स्टॉरेज त्रुटि: "QUOTA_EXCEEDED_ERR: DOM अपवाद 22: कोटा को पार करने वाले स्टोरेज में कुछ जोड़ने के लिए एक प्रयास किया गया था।"

क्या मैक ओएस एक्स पर डीवायएलडीएलआईएलबीआरआईआरएपीएटीएच का इस्तेमाल करना ठीक है? और, इसके साथ गतिशील पुस्तकालय खोज एल्गोरिथ्म क्या है?

मैंने कुछ लेख पढ़ा है जो डायलॉगिक लाइब्रेरी के पथ को -install_name, @rpath, और @loader_path का उपयोग करके तय किया जाना चाहिए, जैसा कि डायलड लाइब्रेरी के उपयोग का हतोत्साहित किया गया है।

लिनक्स और मैक ओएस एक्स पर मैक ओएस एक्स के डीआईएलडीएलआईएलबीआरआईआरएपीएटीएच दोनों पर चलने वाले एक प्रोग्राम बनाने के मामले में लिनक्स के एलडी_एलआईबीआरएआरएआरएआरएएपीएएचएचएचएएच के बिल्कुल ठीक है। और, हम (लगभग) उसी फाइल को साझा कर सकते हैं जिसमें पासपोर्ट_नाव और @ रुपेथ नहीं है I

  • मैक ओएस एक्स पर डीआईएलडीएलआईएलबीआरआईआरएपीएटीएच का प्रयोग करना ठीक है?
  • मैक ओएस एक्स के साथ गतिशील पुस्तकालय खोज एल्गोरिथ्म क्या है जब द्विपदीय गतिशील पुस्तकालय नहीं मिल सकता है? वर्तमान निर्देशिका -> DYLD_LIBRARY_PATH निर्देशिका …?

वेब के समाधान से एकत्रित समाधान "क्या मैक ओएस एक्स पर डीवायएलडीएलआईएलबीआरआईआरएपीएटीएच का इस्तेमाल करना ठीक है? और, इसके साथ गतिशील पुस्तकालय खोज एल्गोरिथ्म क्या है?"

जैसा आपने नोट किया है, DYLD_LIBRARY_PATH अन्य * DYLD_LIBRARY_PATH पर DYLD_LIBRARY_PATH तरह DYLD_LIBRARY_PATH करता है। हालांकि, एक अन्य परिवेश चर है जिसे आपको DYLD_FALLBACK_LIBRARY_PATH कहा जाता है।

सामान्य तौर पर, ये (ओएसएक्स और लिनक्स पर दोनों) केवल विकास के लिए सुझाए गए हैं क्योंकि वे प्रतीक लुकअप त्रुटियों का कारण बन सकते हैं जब आप उस पुस्तकालय के साथ ओवरराइड करते हैं जिसमें समान प्रतीक तालिका नहीं होती है इसका एक अच्छा उदाहरण तब होता है जब आप कस्टम इंस्टॉल के साथ VecLib (जैसे ब्लैस लैपैक) की डिफ़ॉल्ट स्थापना को ओवरराइड करने का प्रयास करते हैं। यह प्रतीक के कारण सिस्टम VecLib से जुड़े अनुप्रयोगों में त्रुटि नहीं मिलेगा यदि DYLD_LIBRARY_PATH सेट किया गया है और रिवर्स (कस्टम अनुप्रयोगों में प्रतीक लुकअप त्रुटियां) यदि ऐसा नहीं है। यह सिस्टम ब्लैस / लैपैक एटलस लिब्स के पूर्ण कार्यान्वयन के कारण नहीं है।

DYLD_FALLBACK_LIBRARY_PATH इन समस्याओं का उत्पादन नहीं करेगा

पुस्तकालयों को एक गैर मानक स्थान पर स्थापित करते समय, DYLD_FALLBACK_LIBRARY_PATH बहुत अधिक समझदार है। यह डिफ़ॉल्ट पथ में दिए गए पुस्तकालयों में प्रतीकों के लिए दिखेगा और यदि प्रतीक वहां नहीं मिलेगा, तो निर्दिष्ट पथ पर वापस आ जाएंगे।

इसका लाभ यह है कि यह प्रक्रिया डिफ़ॉल्ट पुस्तकालयों के विरुद्ध संकलित अनुप्रयोगों में प्रतीक लुकअप त्रुटियों का कारण नहीं होगा।

सामान्य तौर पर, जब पुस्तकालयों को गैर-मानक स्थानों पर स्थापित किया जाता है तो पूर्ण पथ निर्दिष्ट किए जाने चाहिए, जो गतिशील लुकअप की अस्पष्टता को नकार देता है।

DYLD_LIBRARY_PATH LD_LIBRARY_PATH तरह व्यवहार नहीं करता है ओएस एक्स dlopen प्रलेखन ( https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/dlopen.3.html ) निर्दिष्ट करता है कि जब एक पूर्ण पथ प्रदान करते हैं, तो वह पहले स्थानों पर दिखाई देगी DYLD_LIBRARY_PATH द्वारा निर्दिष्ट:

जब पथ में एक स्लैश होता है, लेकिन एक ढाँचा पथ नहीं होता है (यानी एक पूर्ण पथ या डीआईएलआईबी के लिए आंशिक पथ), dlopen () निम्नलिखित की खोज करता है जब तक कि यह एक संगत मैक-ओ फ़ाइल नहीं ढूँढता: $ DYLD_LIBRARY_PATH (पथ से पत्ते का नाम) , तब प्रदान की पथ (सापेक्ष पथ के लिए वर्तमान कार्य निर्देशिका का उपयोग करके), फिर $ DYLD_FALLBACK_LIBRARY_PATH (पथ से पत्ते के नाम के साथ)

दूसरे शब्दों में, यदि आप /Hello को DYLD_LIBRARY_PATH सेट DYLD_LIBRARY_PATH , तो निम्न दो dlopen कॉल:

 dlopen("/Hello/libfoo.so", RTLD_NOW); dlopen("/World/libfoo.so", RTLD_NOW); 

दोनों / /Hello/libfoo.so को हल करेंगे यह काफी प्रति-सहज ज्ञान युक्त है, और एक सुरक्षा भेद्यता का प्रतिनिधित्व करता है। dlopen का उपयोग करने वाले सॉफ्टवेयर का यह कोई गारंटी नहीं है कि यह सही पुस्तकालयों को लोड कर रहा है (शायद अपने खुद के वातावरण में DYLD_LIBRARY_PATH को ओवरराइड किया DYLD_LIBRARY_PATH ?)

डायनेमिक लिंक एडिटर के पर्यावरण चर पर प्रलेखन के लिए और कैसे वे गतिशील पुस्तकालयों के लिए खोज को प्रभावित करते हैं, man dyld

DYLD_LIBRARY_PATH

यह निर्देशिकाओं की एक बृहदान्त्र से अलग सूची है जिसमें पुस्तकालय शामिल हैं I डायनेमिक लिंकर इन निर्देशिकाओं को खोजता है इससे पहले कि वह पुस्तकालयों के लिए डिफ़ॉल्ट स्थानों की खोज करता है यह आपको मौजूदा पुस्तकालयों के नए संस्करणों का परीक्षण करने की अनुमति देता है।

प्रत्येक लाइब्रेरी के लिए जो प्रोग्राम का उपयोग करता है, डायनामिक लिंकर बदले में प्रत्येक डायरेक्टरी में DYLD_LIBRARY_PATH में दिखता है। यदि यह अभी भी लाइब्रेरी नहीं मिल सकता है, तो वह फिर से DYLD_FALLBACK_FRAMEWORK_PATH और DYLD_FALLBACK_LIBRARY_PATH खोजता है।

ओ-ओल (1) के लिए एल विकल्प का उपयोग करें। चौखटे और साझा पुस्तकालयों को खोजने के लिए कि निष्पादन योग्य के खिलाफ जुड़ा हुआ है।

DYLD_FALLBACK_LIBRARY_PATH

यह निर्देशिकाओं की एक बृहदान्त्र से अलग सूची है जिसमें पुस्तकालय शामिल हैं I इसे उनके स्थापित पथ में नहीं मिला पुस्तकालयों के लिए डिफ़ॉल्ट स्थान के रूप में प्रयोग किया जाता है। डिफ़ॉल्ट रूप से, इसे $ (HOME) / lib: / usr / local / lib: / lib: / usr / lib पर सेट किया जाता है।

DYLD_VERSIONED_LIBRARY_PATH

यह एक बृहदान्त्र से अलग निर्देशिका है जिसमें संभावित ओवरराइड लाइब्रेरीज़ शामिल हैं। गतिशील लिंकर गतिशील पुस्तकालयों के लिए इन निर्देशिकाओं को खोजता है। प्रत्येक लाइब्रेरी में पाया गया कि इसके एलसी_आईडी_एआईएलबीबी में दिखता है और वर्तमान_वर्जन और नाम स्थापित करता है। Dyld तो स्थापित नाम पथ पर लायब्रेरी के लिए लग रहा है। जो भी बड़ा चालू_व्यूवर मान है, उस प्रक्रिया में उपयोग किया जाएगा, जब भी उस संस्थापन नाम के साथ एक डाइलीब आवश्यक हो। यह हमेशा ओवरराइड करने के बजाय DYLD_LIBRARY_PATH के समान है, यह केवल ओवरराइड है, आपूर्ति की गई लाइब्रेरी नई है