मैं साझा पुस्तकालयों में सबसे बड़ा विशेषज्ञ नहीं हूं, इसलिए मैं यहां गलत हो सकता हूं!
यदि मैं जो करने का प्रयास कर रहा हूं उसके बारे में सही अनुमान लगा रहा हूं, तो बस libc.so के खिलाफ अपने साझा lib को लिंक करें। आप अपनी लाइब्रेरी में एम्बेडेड sscanf की एक अतिरिक्त प्रति नहीं चाहते हैं।
मैंने जवाब में रुचि रखने के मामले में, जो कुछ भी हो रहा था, उससे पहले मैंने आपके प्रश्नों का उत्तर दिया था।
क्या साझा पुस्तकालय बनाने के दौरान केवल कुछ प्रतीकों को हल करने के लिए एलडी को बताने का कोई तरीका है?
केवल बाहरी, स्थिर, कार्य और चर साझा लाइब्रेरी की प्रतीक तालिका में नहीं जाते हैं।
जब आप अपनी साझा लाइब्रेरी बनाते हैं, तो लिंकर कमांड लाइन पर ऑब्जेक्ट्स में कोई भी प्रतीक नहीं मिला है। यदि लिंकर इसके बारे में शिकायत करता है, तो आपको शायद साझा libc के विरुद्ध साझा साझा lib को लिंक करने की आवश्यकता है। आप साझा किए गए libs साझा कर सकते हैं जो अन्य साझा libs पर निर्भर करते हैं, और ld.so निर्भरता श्रृंखलाओं से निपट सकते हैं।
यदि मेरे पास अधिक प्रतिनिधि था, तो मैं इसे एक टिप्पणी के रूप में पूछूंगा: क्या आपके पास sprintf/sscanf का एक अनुकूलित संस्करण है, या आपके साझा lib के लिए -lc में कार्यान्वयन का उपयोग करना ठीक होगा? अगर -एलसी ठीक है, तो मेरा जवाब शायद आपकी समस्या हल करता है। यदि नहीं, तो आपको उन वस्तुओं के अपने साझा lib को बनाने की आवश्यकता है जिनके पास केवल आपके लिए आवश्यक फ़ंक्शन हैं। यानी इसे /usr/lib/libc.a से लिंक न करें।
शायद मैं अपने
libc.a (नहीं वास्तव में "असली" libc) लाइन से उलझन में हो रही। /usr/lib/libc.a वास्तव में glibc (लिनक्स पर) है। यह libc.so में एक ही कोड की एक स्थिर रूप से जुड़ी प्रति है। जब तक आप अपने स्वयं के libc.a के बारे में बात नहीं कर रहे हैं (जो मैं पहले सोच रहा था) ...
libc.a को साझा लाइब्रेरी में बदलें? आप शायद कर सकते हैं, लेकिन ऐसा नहीं करते हैं, क्योंकि संभवतः यह स्थिति-स्वतंत्र कोड के रूप में संकलित नहीं है, इसलिए इसे रन समय पर ld.so द्वारा बहुत से स्थानान्तरण की आवश्यकता होगी।
libc.a से sscanf निकालें और लिंकर लाइन पर निर्दिष्ट करें?
संभव हो सकता है। सामग्रियों की सूची के लिए ar t /usr/lib/libc.a। (आरआर के तर्क टैर के समान हैं। टैप टेप के लिए ar था .... पुराना स्कूल यूनिक्स यहाँ।) शायद यह इतना आसान नहीं है, क्योंकि एसएसकेएनएफ शायद .a में अन्य फ़ाइलों में प्रतीकों पर निर्भर करता है।
libc भ्रम के बारे में क्षमा करें। मैं बस किसी तीसरे पक्ष की स्थिर पुस्तकालय का मतलब था और उदाहरण के रूप में libc का इस्तेमाल किया। मैं इसे स्पष्ट करने के लिए अपने प्रश्न को संशोधित करने जा रहा हूं। – KlaxSmashing