2013-02-22 10 views
7

मुझे किसी तीसरे पक्ष की लाइब्रेरी (कहें, टीपी.एसओ) की गलत लाइब्रेरी संस्करण (कहें, जेनेरिकवी 1.so) का उपयोग करने की बजाय एक समस्या का उपयोग करने की समस्या है (कहें, जेनेरिकवी 2.so)। अतिरिक्त कार्यक्रम को मेरे कार्यक्रम में उपयोग के लिए शामिल किया गया है।क्या RTLD_DEEPBIND का समर्थन करने के लिए प्लेटफ़ॉर्म के लिए dlopen() फ़ंक्शन में RTLD_DEEPBIND ध्वज का कोई विकल्प है जो RTLD_DEEPBIND का समर्थन नहीं करता है?

इस के लिए सीधा-आगे समाधान (एसओ पर अच्छी तरह से प्रलेखित) RTLD_DEEPBIND ध्वज के साथ dlopen() का उपयोग करना है। लेकिन ध्वज केवल लिनक्स पर मान्य है, न कि एचपी-यूएक्स, सोलारिस, एईक्स इत्यादि जैसे अन्य प्लेटफॉर्म

क्या इन गैर-लिनक्स प्लेटफ़ॉर्म में उपयोग के लिए RTLD_DEEPBIND का कोई विकल्प है?

अपनी प्रतिक्रियाओं के लिए धन्यवाद

+3

मुझे लगता है कि सवाल होना चाहिए "एक POSIX संगत तरीके से RTLD_DEEPBIND को कैसे बदलें?" इसके परिणामस्वरूप आपकी समस्याओं का एक मंच स्वतंत्र कार्यान्वयन होगा। –

उत्तर

0

मुझे ऐसा लगता है कि तुम सच में RTLD_DEEPBIND बिल्कुल जरूरत नहीं है। आपको केवल यह सुनिश्चित करने की ज़रूरत है कि प्रतिस्पर्धी प्रतीकों वाले पुस्तकालय सही क्रम में लोड हो जाएं।

कुछ विचार:

  1. आप LD_PRELOAD इस्तेमाल कर सकते हैं यकीन है कि सही पुस्तकालय बनाने के लिए (GenericV2.so) किसी भी अन्य पुस्तकालयों से पहले भरी हुई है।

  2. आप एक ऐसा फ़ंक्शन बना सकते हैं जो सही क्रम में पुस्तकालयों को डिप्लोन्स करता है: जेनेरिकवी 2.so और फिर टीपी.एस.

  3. क्या यह सुनिश्चित करना संभव है कि जेनेरिकवी 1.so कभी लोड नहीं होता है? क्या आपको इस पुस्तकालय से कुछ चाहिए?

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

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