पहले libc पर एक छोटा सा ध्यान दें। एंड्रॉइड libc जीएनयू libc (glibc) के बजाय बायोनिक libc (https://github.com/android/platform_bionic/) है। इस प्रकार एनडीके में निहित libc बायोनिक है, जैसा एंड्रॉइड उपकरणों पर उपलब्ध libc है।
जहां तक glibc का संबंध है, यह NDK के साथ इसे बनाने के लिए संभव है। हालांकि, एंड्रॉइड उपकरणों पर स्थापित होने पर इसका नाम सिस्टम libc के साथ संघर्ष करेगा। ध्यान दें कि यह केवल तभी होता है जब आप एक गतिशील पुस्तकालय बनाने के लिए जाते हैं। यदि आप एक स्थिर लाइब्रेरी के रूप में जीएनयू libc बनाते हैं, तो ऊपर दिया गया पूरा मुद्दा सिडस्टेप किया गया है, क्योंकि आपको स्थिर पुस्तकालय स्थापित करने की आवश्यकता नहीं है।
अब आपके सवालों के जवाब:
Q1: आप glibc NDK का उपयोग कर निर्माण कर रहे हैं, तो Android.mk चर BUILD_STATIC_LIBRARY का उपयोग करता है स्थिर पुस्तकालयों का निर्माण। हालांकि, अगर आप एनडीके का उपयोग नहीं करते हैं, तो आपको शायद सिरदर्द में प्रवेश करने की आवश्यकता होगी (पता नहीं कितना)। मैं आपको इस पर अधिक नहीं बता सकता क्योंकि मैंने ग्लिब का निर्माण करने की कोशिश नहीं की है, या तो स्थैतिक या गतिशील। साथ ही, ऐसा लगता है कि कम से कम गैर-मोबाइल प्लेटफॉर्म के लिए ग्लिब के साथ स्थिर लिंकिंग बहुत निराश होती है।
एक टूटना दृष्टिकोण से, वहाँ स्थिर और गतिशील जोड़ने में कोई अंतर नहीं है। स्टार्ट-अप व्यूपॉइंट से, एक स्थिर निष्पादन योग्य तेज़ी से शुरू होता है क्योंकि डायनामिक लाइब्रेरीज़ लोडिंग चरण की आवश्यकता नहीं होती है। स्थिर या गतिशील लिंक किए गए निष्पादन योग्य में कोई स्मृति या निष्पादन गति दंड नहीं है। स्थैतिक निष्पादन योग्य के लिए डिस्क संग्रहण आवश्यकता बड़ी है।
जहाँ तक बायोनिक libc लापता कार्यक्षमता के साथ समस्याओं के रूप में, आप सबसे जीएनयू सॉफ्टवेयर है, जो द्वारा प्रयोग किया जाता विधि का उपयोग करें, एक समारोह के मामले में यह प्रणाली पुस्तकालयों से याद आ रही है की अपनी खुद की कार्यान्वयन प्रदान कर सकते हैं। मैंने फाइल-5.11 संकलित किया है, जीएनयू ने 3.82, एंडफुट-2.8 को एंड्रॉइड के लिए एनडीके टूलचेन्स पास करने/ऑटोटूल (./configure ...) में libs/libs को पास किया है। ऐसा लगता है कि इन कार्यक्रमों में अधिकांश गैर-कोर लाइब्रेरी फ़ंक्शन के कार्यान्वयन होते हैं, यदि मानक पुस्तकालय उन्हें प्रदान नहीं करते हैं (इस मामले में बायोनिक)।
नोट: मैं कोशिश करता हूँ और एक स्थिर glibc का निर्माण और के रूप में इस सवाल का जवाब अद्यतन और जब मैं सफल हो/असफल।
यह डिस्क पर केवल उपयोग नहीं है - स्मृति में भी वृद्धि हुई है। जब आप बायोनिक libc के खिलाफ लिंक और एंड्रॉइड ऐप की जेनी लाइब्रेरीज़ को लिंक करते हैं, तो आप पहले से ही स्मृति में एक प्रतिलिपि के लिए साझा रीड-ओनली एक्सेस प्राप्त करते हैं। –
क्या आप मुझे इस बारे में जानकारी के स्रोत के बारे में बता सकते हैं? मैं और जानना चाहता हूं, लेकिन इस पर कुछ भी नहीं मिला। मुझे पता है कि यदि पुस्तकालयों में कोई डेटा होता है, तो डेटा प्रक्रियाओं के बीच साझा नहीं होता है, हालांकि लाइब्रेरी कोड इसके आंतरिक डेटा चर बदलता है, तो यह स्मृति पृष्ठों की कॉपी-ऑन-राइट प्रतिकृति का मामला हो सकता है। – Samveen
मेरा मानना है कि क्रिसस्ट्रैटन का उल्लेख है - स्थिर रूप से जुड़े libc के मामले। प्रत्येक प्रक्रिया एक ही पुस्तकालय के सभी वर्गों की अपनी पूरी प्रतिलिपि के साथ खत्म हो जाएगी। गतिशील लिंकिंग के साथ, आप सही हैं @ सैमवेन – Tuxdude