मैं एक साझा ऑब्जेक्ट लाइब्रेरी बनाने की कोशिश कर रहा हूं जिसे dlopen() का उपयोग करके प्रोग्राम द्वारा खोला जाएगा। यह लाइब्रेरी एक अलग पुस्तकालय द्वारा प्रदान की गई कार्यक्षमता का उपयोग करेगी जो स्थैतिक है।साझा लाइब्रेरी निर्माण में शामिल करने के लिए एक स्थिर लाइब्रेरी से प्रतीकों को कैसे बल देना है?
गतिशील एक को जोड़ने के दौरान मैंने स्थिर लाइब्रेरी को खींचने के लिए लिंक लाइन पर उचित ध्वज शामिल किया है (उदा। मेरे पास libfoo.a के लिए -lfoo है), और लिंकर शिकायत नहीं करता है। हालांकि, जब मुख्य प्रोग्राम गतिशील लाइब्रेरी पर dlopen() को कॉल करता है, तो कॉल स्थिर पुस्तकालय से एक प्रतीक का संदर्भ देने वाले "अपरिभाषित प्रतीक" संदेश के साथ विफल रहता है।
रनिंग एनएम इंगित करता है कि प्रश्न में प्रतीक गतिशील पुस्तकालय में अपरिभाषित है, और मुख्य कार्यक्रम में यह शामिल नहीं है, तो मैं इस प्रतीक को खींचने के लिए लिंकर को कैसे मजबूर कर सकता हूं? प्रतीक स्वयं अनियमित डेटा खंड में है (एनएम आउटपुट में प्रतीक प्रकार "बी")।
'- व्हाउल-आर्काइव' उत्तर संग्रह में सभी प्रतीकों को साझा लाइब्रेरी में निर्यात किए गए प्रतीकों में बदल देगा। यदि आपको केवल एक प्रतीक की आवश्यकता है, तो यह उत्तर आपके .so में बहुत कम ब्लोट बनाता है। – MuertoExcobito