2008-09-20 12 views
33

लिनक्स/जीसीसी पर मैं पर्यावरण चर के साथ tempering बिना साझा पुस्तकालयों के लिए निष्पादन योग्य खोज पथ बदलने के लिए -rpath ध्वज का उपयोग कर सकते हैं।क्या एक विंडोज़/एमएसवीसी -प्रैथ लिंकर ध्वज के बराबर है?

क्या यह विंडोज़ पर भी पूरा किया जा सकता है? जहां तक ​​मुझे पता है, डीएल हमेशा निष्पादन योग्य निर्देशिका में और पाथ में खोजे जाते हैं।

मेरा परिदृश्य: मैं अनन्य नामों की देखभाल किए बिना साझा गुणों को उनके गुणों (32/64 बिट/डीबग/रिलीज) के अनुसार स्थानों में रखना चाहता हूं। लिनक्स पर, यह आसानी से आरपीएथ के माध्यम से किया जा सकता है, लेकिन मुझे अभी तक विंडोज़ पर ऐसा करने का कोई तरीका नहीं मिला है।

किसी भी संकेत के लिए धन्यवाद!

उत्तर

4

विंडोज़ में डीएलएल के लिए खोज आदेश एमएसडीएन पर this page पर वर्णित है। यदि आप run-time dynamic linking का उपयोग कर रहे हैं, तो आप LoadLibrary पर कॉल करते समय फ़ोल्डर निर्दिष्ट कर सकते हैं।

3

"Isolated applications" डीएलएल निर्भरताओं का वर्णन करने वाले एक्सएमएल मैनिफेस्ट को एम्बेड करने के लिए एक तंत्र है।

+0

यह तंत्र केवल असेंबली के लिए है। यह प्रबंधित कोड से संबंधित है। – Christian

+0

क्या आपके पास इसके लिए कोई संदर्भ है? इस विषय के आस-पास जो कुछ भी मैंने देखा है, वह मूल कोड डीएलएल को समान ही अनुमति देता है। –

+0

विधानसभा को [विकिपीडिया] (https://en.wikipedia.org/wiki/.NET_assembly) पर परिभाषित किया गया है। एमएसडीएन केवल एमएसआई [असेंबली] (http://msdn.microsoft.com/en-us/library/aa367757%28v=vs.85%29.aspx) के संयोजन के साथ विधानसभा शब्द का उपयोग करता प्रतीत होता है। तो आपका संदर्भित लेख एक स्थापित अनुप्रयोग से संबंधित है। आरपीएथ जानकारी एप्लिकेशन में एम्बेडेड है और इंस्टॉलेशन पर रिले नहीं करती है। लिंक करने के बाद बस रपाथ प्रभावी है। – Christian

16

अफसोस की बात है कि आरपीएटीएच के लिए कोई प्रत्यक्ष एनालॉग नहीं है। कई वैकल्पिक संभावनाएं हैं, उनमें से प्रत्येक आपके लिए अपने विशेष तरीके से अवांछनीय है।

यह देखते हुए कि रनटाइम लाइब्रेरी संघर्ष से बचने के लिए आपको प्रत्येक बिल्ड स्वाद के लिए एक अलग एक्सई की आवश्यकता है, क्योंकि आप अनुमान लगा सकते हैं कि प्रत्येक एक्सई को डीएलएल के प्रत्येक सेट के समान फ़ोल्डर में रखना है।

जैसा कि आपने यह भी उल्लेख किया है, सबसे सार्वभौमिक विधि है कि पैच चर को एक्सच बूट करने के लिए बैच फ़ाइल का उपयोग करके बदलना है।

आप वांछित DLL फ़ोल्डर में प्रोग्राम चलाने से पहले वर्तमान कार्यशील निर्देशिका को बदल सकते हैं।

आप अपने exe के अंदर SetDllDirectory या AddDllDirectory फ़ंक्शन का उपयोग कर सकते हैं। यह शायद आरपीएटीएच के सबसे नज़दीक है, लेकिन केवल WinXP SP1 या बाद में काम करता है।

यदि आप प्रत्येक exe स्वाद के फ़ाइल नाम को बदलने के इच्छुक हैं, तो आप "ऐप पथ" रजिस्ट्री कुंजी का उपयोग कर सकते हैं। प्रत्येक exe एक अद्वितीय फ़ाइल नाम की आवश्यकता होगी।

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