2010-01-09 16 views
8

मुझे समझ में नहीं आता कि एबीआई उपयोगकर्ता-अंतरिक्ष अनुप्रयोगों के विकास का महत्वपूर्ण संदर्भ क्यों है। क्या प्रणाली का सेट एक ऑपरेटिंग सिस्टम के लिए कॉल करता है जिसे एबीआई माना जाता है? लेकिन यदि ऐसा है तो मानक पुस्तकालयों में encapsulated सिस्टम कॉल के बारे में सभी जटिलताओं नहीं हैं?प्रोग्रामिंग के लिए आवेदन बाइनरी इंटरफेस महत्वपूर्ण क्यों है

तो एबीआई संगतता विभिन्न प्लेटफॉर्म पर स्थिर रूप से जुड़े अनुप्रयोगों को चलाने के लिए केवल प्रासंगिक है, क्योंकि सिस्टम कॉल बाइनरी में एम्बेड की जाएगी?

उत्तर

8

एक ABI संरेखण के एक सेट को परिभाषित करता है, सम्मेलन बुलाता है, और डेटा प्रकार जो सिस्टम के लिए आम हैं। यदि आप किसी प्रकार की गतिशील लिंकिंग कर रहे हैं तो इससे एबीआई बहुत महत्वपूर्ण हो जाता है; क्योंकि इसके बिना किसी एप्लिकेशन से कोड किसी दूसरे द्वारा प्रदान किए गए कोड को कॉल करने का कोई तरीका नहीं है।

तो, नहीं। एबीआई संगतता सभी गतिशील लिंकिंग (स्थिर के लिए कम) के लिए प्रासंगिक है।

इसके लायक पर जोर दे रहा है कि एक सिस्टम की एबीआई इंटर-एप्लिकेशन काम के साथ-साथ एप्लिकेशन-टू-ऑपरेटिंग-सिस्टम काम को प्रभावित करती है।

+0

कुछ प्रसिद्ध एबीआई क्या जानते हैं जो जानने योग्य हैं? या एबीआई का एक ठोस उदाहरण क्या होगा? – theactiveactor

+3

एकमात्र अच्छी तरह से पता है कि एबीआई 'सी' है जिसे प्रत्येक प्लेटफ़ॉर्म के लिए बहुत सख्ती से परिभाषित किया गया है। प्रत्येक सी ++ कंपाइलर अपनी एबीआई लागू करता है और इस प्रकार विभिन्न कंपेलरों से ऑब्जेक्ट कोड आमतौर पर संगत नहीं होता है। 'सी' वेब पर मौजूद सभी अलग-अलग भाषाओं के बीच बाध्यकारी कोड होता है। –

0

प्रणाली भी एक ABI का पालन करें कॉल - syscall इंटरफ़ेस ऑपरेटिंग सिस्टम के लिए ऑपरेटिंग सिस्टम से अलग है।

स्थिरता अपने आवेदन और मानक पुस्तकालय में यह एक syscall ABI में टाई जाएगा जोड़ने। उदाहरण के लिए, फ्रीबीएसडी केवल एक इम्यूलेशन मॉड्यूल के माध्यम से लिनक्स सिस्कल एबीआई का उपयोग करने की अनुमति देता है।

6

एबीआई सिस्टम सिस्टम कॉल से अधिक है। यह आमतौर पर कार्यों के लिए वास्तविक तरीके तर्कों को पारित किया जाता है और स्मृति में संरचनाओं और वस्तुओं को कैसे रखा जाता है। एक स्थिर एबीआई के बिना, अलग-अलग कंपेलरों द्वारा निर्मित कोड एक-दूसरे को कॉल करने में सक्षम नहीं हो सकते हैं - यदि आप foo (a, b) कहते हैं और एक कंपाइलर स्टैक पर ए और बी दबाता है जबकि दूसरा रजिस्टरों में से गुजरता है, तो आपको मिल गया है एक एबीआई संघर्ष।

1

असंगत एबीआई यह है कि ओएसएक्स, लिनक्स, सोलारिस, विंडोज और * बीएसडी सभी इंटेल x86 CPUs पर चलते हैं, एक साधारण पॉज़िक्स-केवल हैलो वर्ल्ड प्रोग्राम एक ओएस पर संकलित है जो किसी भी विक्रेता विशिष्ट या मालिकाना सिस्टम कॉल का उपयोग नहीं करता है और/या लाइब्रेरी आमतौर पर एक ओएस पर नहीं चल सकते हैं जब एक और ओएस * के लिए संकलित।

एबीआई प्रोग्रामर के लिए वास्तव में महत्वपूर्ण नहीं है क्योंकि हम पहले ही सहजता से जानते हैं कि आप मैक पर विंडोज ऐप नहीं चला सकते हैं। यहां तक ​​कि गैर-प्रोग्रामर (हॉलीवुड स्क्रीनवाइटर को छोड़कर) इसे जानते हैं। जब उन्हें किसी विशेष वातावरण को लक्षित करने की आवश्यकता होती है तो संकलक लेखकों के लिए महत्वपूर्ण है।

* नोट: लिनक्स और बीएसडी जैसे कुछ ओएस विदेशी एबीआई का समर्थन करते हैं ताकि एक सामान्य लिनक्स कमांड लाइन प्रोग्राम कभी-कभी बिना किसी संशोधन के बीएसडी पर निष्पादित किया जा सके। और शराब की तरह इम्यूलेशन परतें हैं।

1

C++ रास्ता नाम mangling कार्यान्वित किया जाता है ABI

1

का एक हिस्सा है केवल जब आप चाहते हैं कि आपके द्विआधारी रखता बिना अन्य पर्यावरण पर चलाने के लिए मत भूलना, तो कुछ स्थानों आप ABI लेने की आवश्यकता हो सकती हैं खाते में:

  1. आप अपने प्रोग्राम में तीसरी लाइब्रेरी कॉल कर सकते हैं, और तीसरी लाइब्रेरी विभिन्न वातावरण पर भिन्न हो सकती है। (इसलिए केवल एबीआई जिसे आप भरोसा कर सकते हैं)

  2. ओएस के लिए syscall।(यदि आप स्थिर अपने बाइनरी syscall जुड़ा हुआ बजाय गतिशील libc से लिंक)

वास्तव में, सबसे डेवलपर नहीं एबीआई को ध्यान में रखना चाहिए, तो द्विआधारी लोडर/उपकरण डेवलपर इसके बारे में और अधिक जानना है।

3

"एबीआई" (Wikipedia देखें) एक ऑपरेटिंग सिस्टम डेटा प्रारूपों के बारे में सभी धारणाओं के लिए एक छतरी शब्द है। इसमें निष्पादन योग्य फ़ाइलों का लेआउट और इसकी सी परिभाषा को स्मृति में किसी भी डेटा संरचना का शामिल है।

शब्द भी आम तौर पर उसी भाषा में लिखे गए कार्यक्रमों के बीच स्वरूपण आवश्यकताओं को शामिल करता है। प्रत्येक भाषा में विशेष विशेषताएं होती हैं जो परिणामस्वरूप निष्पादन योग्य प्रारूपों और मेमोरी संरचनाओं के भीतर अलग-अलग सम्मेलनों का परिणाम हो सकती हैं, लेकिन सभी को अंततः प्रोसेसर के निर्देश सेट के साथ संगत ओएस और डेटा संरचनाओं के साथ संगत निष्पादन योग्य होना चाहिए।

यदि आप केवल मानक-अनुरूप कोड संकलित करने की परवाह करते हैं तो एबीआई इससे कोई फर्क नहीं पड़ता। जब आप मानक का उल्लंघन करते हैं और char * को long * पर कास्टिंग करते हैं तो यह मामूली मायने रखता है। असेंबली कोड का एक बड़ा निकाय लिखते समय यह और भी महत्वपूर्ण है। एक लिंकर या डीबगर की तरह कुछ लिखना, यह काम करने के लिए बड़े पैमाने पर काम करने के लिए आ सकता है।

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