स्टेटिक लाइब्रेरी

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

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

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

स्टैटिक लिंकिंग में, निष्पादन योग्य का आकार गतिशील लिंकिंग की तुलना में अधिक हो जाता है, क्योंकि लाइब्रेरी कोड अलग-अलग फाइलों के बजाय निष्पादन योग्य के भीतर संग्रहीत होता है। लेकिन अगर लाइब्रेरी फाइलों को एप्लिकेशन के हिस्से के रूप में गिना जाता है तो कुल आकार समान होगा, या इससे भी छोटा होगा यदि कंपाइलर अप्रयुक्त प्रतीकों को हटा देता है।

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

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

सी/सी ++
में स्थिर पुस्तकालय बनाना स्थैतिक पुस्तकालयों को C (प्रोग्रामिंग भाषा) या C++ में आसानी से बनाया जा सकता है। अन्य सुविधाओं को प्रदान करने के अलावा, ये दो भाषाएं बाहरी या आंतरिक लिंकेज को इंगित करने के लिए सी | स्टोरेज-क्लास विनिर्देशक में स्टोरेज कक्षाएं प्रदान करती हैं। ऐसी लाइब्रेरी बनाने के लिए, निर्यात किए गए कार्यों/प्रक्रियाओं और अन्य ऑब्जेक्ट चर को बाहरी लिंकेज के लिए निर्दिष्ट किया जाना चाहिए (यानी सी स्टेटिक (कीवर्ड) का उपयोग न करके | कीवर्ड)। स्टेटिक लाइब्रेरी फ़ाइलनाम में आमतौर पर.aयूनिक्स जैसी प्रणालियों पर विस्तार और.libMicrosoft Windows पर एक्सटेंशन।

उदाहरण के लिए, यूनिक्स जैसी प्रणाली पर, नाम का एक संग्रह बनाने के लिए libclass.a फाइलों से class1.o, class2.o, class3.o, निम्न कमांड का उपयोग किया जाएगा: ar rcs libclass.a class1.o class2.o class3.o एक प्रोग्राम को संकलित करने के लिए जो निर्भर करता है class1.o, class2.o, और class3.o, कोई कर सकता है: सीसी main.c libclass.a या अगर libclass.a मानक पुस्तकालय पथ में रखा गया है, जैसे /usr/local/lib) सीसी main.c -lclass या (लिंकिंग के दौरान) एलडी... मेन.ओ-एल क्लास... के बजाय: सीसी main.c class1.o class2.o class3.o

यह भी देखें

 * स्थैतिक निर्माण
 * पुस्तकालय (कम्प्यूटिंग)
 * लिंकर (कंप्यूटिंग)
 * लोडर (कंप्यूटिंग)
 * साझा पुस्तकालय
 * डायनामिक-लिंक लाइब्रेरी (DLL, .dll)
 * बाहरी चर
 * वस्तु फ़ाइल
 * पूर्वबाध्यकारी