2013-05-12 11 views
13

मैंने देखा है कि दोनों मेरे संकलक (MinGW) और Windows 8 एसडीके ही पुस्तकालयों के साथ आते हैं, नामकरण सम्मेलनों (यानी में Windows 8 एसडीके पर win32.lib है libwin32.a बचाने मिनजीडब्ल्यू पुस्तकालय)।संकलक पुस्तकालय बनाम ऑपरेटिंग सिस्टम पुस्तकालय

  • क्या सभी कंपाइलर इस तरह के पुस्तकालयों के साथ आते हैं?
  • क्या ये पुस्तकालय कई ऑपरेटिंग सिस्टम के लिए हैं?
  • विंडोज 8 एसडीके और कंपेलर के साथ आने वाले पुस्तकालयों के बीच क्या अंतर (यदि कोई है) क्या है?
+0

+1 महान प्रश्न। मुझे वास्तव में एक कठिन समय लगता है कि इसका उत्तर कैसे दिया जाए, भले ही मुझे जवाब पता हो! – Mehrdad

उत्तर

7

लाइब्रेरी के दो प्रकार के होते हैं:

  • आयात पुस्तकालयों:
    इन पुस्तकालयों केवल सूची जहां के लिए चर/कार्य/आदि, लेकिन वे शामिल नहीं है संदर्भ खोजने के लिए। कोड स्वयं

  • "सामान्य" पुस्तकालयों (जो वस्तु फ़ाइलों कि मशीन कोड होना होता है):
    इन पुस्तकालयों वस्तु फ़ाइलों, जो वास्तविक मशीन कोड होता है होते हैं।

लाइब्रेरी जो ऑपरेटिंग सिस्टम के साथ शिप करते हैं आमतौर पर पुस्तकालय आयात करते हैं।
वास्तविक कोड, आखिरकार, ऑपरेटिंग सिस्टम में ही है; आयात पुस्तकालय केवल आपको बताते हैं कि ऑपरेटिंग सिस्टम में दिए गए कोड का उपयोग कैसे करें।
यह आवश्यक क्यों है? क्योंकि ऑपरेटिंग सिस्टम पर चल रहे पुस्तकालयों को "खोज" करने का कोई तरीका नहीं है, जबकि यह चला रहा है, इसलिए प्रोग्राम को संकलित होने पर क्या उपलब्ध होगा।

जो लोग एक कंपाइलर के साथ आते हैं वे आम तौर पर कोड पुस्तकालय होते हैं; वे कोड शामिल करते हैं जो आपके प्रोग्राम को पूरा करने के लिए कंपाइलर की आवश्यकता होती है (जो आपके विशेष कंपाइलर के आधार पर भिन्न होती है)।

हालांकि, पुस्तकालय के लिए कोई भी "मानक प्रारूप" नहीं है; माइक्रोसॉफ्ट सीओएफएफ का उपयोग करता है, लेकिन * निक्स उपकरण ईएलएफ का उपयोग करते हैं।
तो जब माइक्रोसॉफ्ट किसी सिस्टम के लिए आयात पुस्तकालयों को शिप करता है, तो यह केवल उन्हें सीओएफएफ प्रारूप में भेजता है, जो विजुअल सी ++ कंपाइलर के लिए बहुत अच्छा है - लेकिन अन्य कंपाइलरों के लिए इतना उपयोगी नहीं है। उद्देश्य इन पुस्तकालयों की बिल्कुल द्वारा प्रदान की उन लोगों के रूप के रूप में एक ही है - इस तरह के MinGW के रूप में

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

यही कारण है कि आप कई तरीकों से प्रदान की जाने वाली समान पुस्तकालयों को देखते हैं।

+0

आपने कहा कि कंपेलर आम तौर पर कोड पुस्तकालयों के साथ आते हैं, हालांकि बाद में आपने कहा कि चूंकि कोई भी स्वीकार्य प्रारूप नहीं है इसलिए संकलक विक्रेताओं को अपनी खुद की आयात पुस्तकालय बनाना है, यह विरोधाभासी प्रतीत होता है, क्या आप विस्तृत कर सकते हैं? –

+1

@ डेविड हैकेट: * कोड * लाइब्रेरी वर्चुअल रूप से कंपाइलर्स के साथ आते हैं, क्योंकि लगभग हर कंपाइलर को इसे चलाने के लिए प्रोग्राम में अतिरिक्त प्री-कंपाइल कोड जोड़ने की आवश्यकता होती है। * आयात * पुस्तकालयों को आमतौर पर आमतौर पर कंपाइलर्स (जैसे मिनजीडब्ल्यू जीसीसी) के साथ भेज दिया जाता है जो ऑपरेटिंग सिस्टम विक्रेता (जैसे कि माइक्रोसॉफ्ट) द्वारा प्रदान किए गए प्रारूप (जैसे सीओएफएफ) को समझ में नहीं आता है। – Mehrdad

+0

स्पष्टीकरण के लिए धन्यवाद! :) –

2

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

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

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

एक संबंधित मुद्दा यह है कि मिनजीडब्ल्यू माइक्रोसॉफ्ट द्वारा प्रदान की गई msvcrt.dll सी रनटाइम डीएलएल पर भारी निर्भर करता है। लेकिन डीएलएल को मिनजीडब्लू द्वारा वितरित नहीं किया जाता है - यह हर विंडोज ओएस का हिस्सा है, इसलिए मिनजीडब्ल्यू बस बेस ओएस सुविधा के रूप में उपस्थित होने पर निर्भर करता है।

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