2010-01-19 6 views
6

मैं एसी लाइब्रेरी के साथ लिनक्स जहाजों को समझता हूं, जो आईएसओ सी फंक्शंस और सिस्टम कॉल फ़ंक्शंस लागू करता है, और यह कि लाइब्रेरी सी विकसित करने के दौरान जुड़ा हुआ है। हालांकि, विभिन्न सी कंपाइलर्स आवश्यक रूप से लिंक करने योग्य कोड (उदाहरण के लिए एक पैड डेटास्ट्रक्चर फ़ंक्शन तर्कों में भिन्न रूप से दूसरे से उपयोग किए जाते हैं)। जब मैं अपने सी संकलित करने के लिए किसी भी कंपाइलर का उपयोग कर सकता हूं तो अंतर्निर्मित सी लाइब्रेरी को कैसे जोड़ा जाना चाहिए? कहानी स्थिर बनाम गतिशील लिंकिंग के लिए कहानी अलग है?विंडोज और लिनक्स के तहत ओएस सी पुस्तकालयों को कैसे जोड़ता है?

दूसरी तरफ विंडोज के तहत, प्रत्येक कंपाइलर अपनी मानक लाइब्रेरी प्रदान करता है, जो समस्या का हिस्सा हल करता है, लेकिन सिस्टम कॉल अभी भी डीएलएल के एक सेट में हैं। इन डीएलएल से सी अनुप्रयोगों को सफलतापूर्वक कैसे जोड़ा जाता है? विभिन्न भाषाओं के बारे में कैसे? (उसी डीएलएल का उपयोग प्री-नेट विज़ुअल बेसिक, आदि द्वारा किया जा सकता है)

उत्तर

4

प्रत्येक प्लेटफ़ॉर्म में कुछ "कॉलिंग सम्मेलन" होते हैं जो प्रत्येक सी कार्यान्वयन को ऑपरेटिंग सिस्टम से सही तरीके से बात करने में सक्षम होने के लिए पालन करना चाहिए। उदाहरण के लिए, विंडोज़ के लिए, सभी ओएस-आधारित कार्यों को stdcall सम्मेलन का उपयोग करके बुलाया जाना चाहिए, क्योंकि cdecl के डिफ़ॉल्ट सी सम्मेलन के विपरीत।

लिनक्स में, मानक सी लाइब्रेरी (और कर्नेल) को जीसीसी का उपयोग करके संकलित किया गया है, इसलिए लिनक्स के लिए किसी भी अन्य कंपाइलर्स को यह सुनिश्चित करना होगा कि उनके कॉलिंग सम्मेलन जीसीसी द्वारा उपयोग किए जाने वाले किसी के लिए अनुकूल हों।

0

मानकों। आप ध्यान दें कि stdlib सामान आदिम मूल्यों और सरणी पर चलती है - और उस सामान के लिए मानक इस बात पर स्पष्ट है कि चीजें कैसे की जानी चाहिए।

+1

कुछ एएनएसआई सी एपीआई structs पर काम करते हैं, जो संरेखण के प्रति संवेदनशील होते हैं। –

3

कंपाइलर्स मानक पुस्तकालय के उनके कार्यान्वयन के साथ आते हैं। यह सिर्फ लिनक्स के तहत है कि यह माना जाता है कि किसी भी कंपाइलर जीसीसी के संस्करण के समान सम्मेलनों का पालन करेगा जो लाइब्रेरी को संकलित करता था।

इंटरऑपरेबिलिटी के रूप में, यह आपके विचार से आसान हो सकता है। स्थापित कॉलिंग सम्मेलन हैं जो संकलक को फ़ंक्शन को वैध कॉल करने की अनुमति देंगे, भले ही फ़ंक्शन को उसी सॉफ़्टवेयर के साथ संकलित नहीं किया गया हो।

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

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