मेरे पास dlopen
(झंडे RTLD_NOW | RTLD_GLOBAL
के साथ) साझा की गई एक साझा लाइब्रेरी है। यदि यह लाइब्रेरी मुख्य प्रोग्राम से फ़ंक्शंस का उपयोग कर रही है, तो यह अनलोड नहीं होती है। तो मैं इस साझा lib के लिए एक ही कोड के साथ समाप्त होता हूं, भले ही मैंने अनलोड किया हो (dlclose
का उपयोग करके), बदल दिया, संकलित, (पुनः) इसे लोड करें।सी ++: डीएलक्लोज़ साझा लाइब्रेरी को अनलोड नहीं करता है
मेरा लक्ष्य वास्तव में एक ही लाइब्रेरी को फिर से लोड करने के बाद पुनः लोड करना है, ताकि मुझे अपने कोड का परीक्षण करने के लिए पूरे प्रोग्राम को फिर से लॉन्च न करना पड़े।
मैं लिनक्स उबंटू 10.04 पर जी ++ 4.2.3 का उपयोग कर रहा हूं।
(संपादित करें)
हल:
"लोड पुस्तकालय RTLD_GLOBAL की वजह से एक प्रतीक का उपयोग करता है"। दरअसल, मेरे पास एक और प्रतीक था। एम्बेडेड जब इसे जोड़ने के लिए शायद वापस बुलाया गया था और मेरी लाइब्रेरी को बंद करने से रोक दिया गया था ... मुझे लगता है कि यह सत्यापित करना संभव है कि एक lib को dlopen (..., RTLD_NOLOAD) का उपयोग करके अनलोड किया गया है पुस्तकालय सही ढंग से उतार दिया गया है।
क्या आप अपने डीएलएल को हैंडल जारी कर रहे हैं? – Felipe
आपको शायद प्लेटफ़ॉर्म (लिनक्स?) और आप किस संस्करण का उपयोग कर रहे हैं, इसके बारे में कुछ और विशिष्ट होना चाहिए। इस तरह के मुद्दे के लिए यह महत्वपूर्ण बात है। –
@Komyg: मैं dlclose (संभाल) का उपयोग कर रहा है, इसलिए मैं यह सोचते हैं कि ऐसा करने से संभाल जारी किया गया है ... – Ben