2012-08-26 13 views
5

उदाहरण के लिए एंड्रॉइड ग्लिब के बजाए बायोनिक का उपयोग कर रहा है, लेकिन यह पता लगाने के लिए कि वास्तव में यह बायोनिक http://en.wikipedia.org/wiki/Bionic_(software) का उपयोग कर रहा है, ग्लिब नहीं?पता है कि एक एम्बेडेड सिस्टम glibc या bionic का उपयोग कर रहा है?

क्या मुझे यह जानकारी/proc फाइल सिस्टम में मिल सकती है, या क्या कोई आदेश है जो वर्तमान प्रणाली पर बायोनिक का उपयोग कर सकता है?

वैसे, क्या एम्बेडेड सिस्टम पर एक से अधिक सी lib है?

+1

यदि प्रत्येक एप्लिकेशन प्रोग्राम स्थिर रूप से इसके libc से जुड़ा हुआ था, तो अलग-अलग अनुप्रयोगों द्वारा अलग-अलग libcs ​​का उपयोग किया जा सकता है। – sawdust

+0

अपने सी पुस्तकालय में स्थैतिक रूप से एप्लिकेशन को कैसे लिंक करें? – hugemeow

+2

जब आप लिंक करते हैं तो जीसीसी के लिए '-static' विकल्प का उपयोग करें। निष्पादन योग्य स्थिर या गतिशील रूप से जुड़ा हुआ है या नहीं, यह बताने के लिए उपयोगिता 'फ़ाइल' का उपयोग करें। मैं गतिशील रूप से जुड़े निष्पादन योग्य द्वारा उपयोग की जाने वाली पुस्तकालयों और प्रविष्टि बिंदुओं को सूचीबद्ध करने के लिए 'स्ट्रिंग्स' का उपयोग करता हूं। – sawdust

उत्तर

4

यदि आपके पास कोड है जो कि बायोनिक या ग्लिब के साथ जुड़ा हुआ है, तो यह अलग-अलग व्यवहार करने की आवश्यकता है, यह संकलन समय पर निर्धारित और निर्धारित किया जाना चाहिए। बायोनिक और ग्लिबैक बाइनरी संगत नहीं हैं, इसलिए आपको संकलन समय पर शीर्षकों के एक सेट को प्रतिबद्ध करने की आवश्यकता है।

#if __BIONIC__ 
/* Bionic-specific code */  
#elif __GLIBC__ 
/* Glibc-specific code */ 
#else 
#error "This C library is not supported" 
#endif 

आप /proc में किसी भी जानकारी मिल नहीं करेगा क्योंकि /proc गिरी बारे में जानकारी शामिल, के बारे में नहीं सी पुस्तकालय।

सिद्धांत रूप में, एक सिस्टम पर जितनी चाहें उतनी सी पुस्तकालयों को रखना संभव है। हालांकि यह एक एम्बेडेड सिस्टम पर बहुत असामान्य होगा क्योंकि ये आम तौर पर कोड आकार को नीचे रखने की कोशिश करते हैं। एकमात्र प्रणाली जहां मैं कई सी पुस्तकालयों की अपेक्षा करता हूं, एक एम्बेडेड डेवलपर मशीन पर है, यदि डेवलपर क्रॉस-कंपाइलिंग नहीं होता है (जो कि पहले स्थान पर दुर्लभ है)। इसके अलावा, बायोनिक का उपयोग केवल एंड्रॉइड पर किया जाता है, और केवल एंड्रॉइड पर बायोनिक का उपयोग किया जाता है, इसलिए सभी एंड्रॉइड सिस्टम में बायोनिक होता है और अन्य प्रणालियों में बायोनिक नहीं होता है। गैर-एंड्रॉइड लिनक्स सिस्टम में कुछ अन्य लाइब्रेरी है, या तो ग्लिबैक या (एम्बेडेड सिस्टम पर) कुछ अन्य libc जैसे uClibc या Dietlibc।

+0

तो कैसे पता चलेगा कि सिस्टम glibc या uClibc का उपयोग कर रहा है या नहीं? – hugemeow

+0

@ हुगेमियो '#ifdef __UCLIBC__'। अधिकांश पुस्तकालयों में ऐसा कुछ है। – Gilles

+0

तो क्या मुझे हेड फाइलें पढ़नी चाहिए जिन्हें एम्बेड किए गए सिस्टम में शामिल किया जा सकता है ताकि यह पता चल सके कि कौन सा क्लाइब इसका उपयोग करता है? – hugemeow

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