स्टेटिक लाइब्रेरी: Difference between revisions
Line 23: | Line 23: | ||
== लिंकिंग और लोडिंग == | == लिंकिंग और लोडिंग == | ||
कोई भी स्थिर | कोई भी स्थिर लाइब्रेरी कार्य किसी अन्य स्थिर लाइब्रेरी में कार्य या प्रक्रिया को निर्देशित कर सकता है। [[लिंकर (कंप्यूटिंग)]] और लोडर इसे उसी तरह से संभालते हैं जैसे अन्य [[वस्तु फ़ाइल]] के प्रकार के लिए करते हैं। स्थिर लाइब्रेरी फ़ाइलों को [[लिंकिंग लोडर]] (जैसे, [[एक्स विंडो सिस्टम]] मापांक लोडर) द्वारा क्रम (योजना जीवनचक्र चरण) में जोड़ा जा सकता है। यद्दपि, इस तरह की प्रक्रिया को स्थोर जुड़ाव कहा जा सकता है या नहीं यह विवादास्पद है। | ||
<big>'''<u> | <big>'''<u>C/[[C ++]] में स्थिर लाइब्रेरी बनाना</u>'''</big> | ||
स्थैतिक | स्थैतिक लाइब्रेरीों को C (योजना भाषा) या C++ में सरलता से बनाया जा सकता है। अन्य सुविधाओं को प्रदान करने के अलावा, ये दो भाषाएं बाहरी या आंतरिक कड़ी को इंगित करने के लिए भंडारण कक्षाएं प्रदान करती हैं। ऐसी लाइब्रेरी बनाने के लिए, निर्यात किए गए कार्यों/प्रक्रियाओं और अन्य वस्तु चर को बाहरी संपर्क के लिए निर्दिष्ट किया जाना चाहिए (अर्थात C स्थिर (संकेत शब्द) का उपयोग न करके स्टेटिक लाइब्रेरी फ़ाइलनाम में सामान्यत:{{mono|.a}}यूनिक्स जैसी प्रणालियों पर विस्तार<ref name="Static Libraries">{{cite web|title=Static Libraries|url=http://tldp.org/HOWTO/Program-Library-HOWTO/static-libraries.html|publisher=TLDP|accessdate=3 October 2013}}</ref> और{{mono|.lib}}माइक्रोसॉफ्ट विंडोज पर विस्तार। | ||
उदाहरण के लिए, यूनिक्स जैसी प्रणाली पर, नाम का एक संग्रह बनाने के लिए {{mono|libclass.a}} फाइलों से {{mono|class1.o}}, {{mono|class2.o}}, {{mono|class3.o}}, निम्न कमांड का उपयोग किया जाएगा:<ref name="Static Libraries"/> | उदाहरण के लिए, यूनिक्स जैसी प्रणाली पर, नाम का एक संग्रह बनाने के लिए {{mono|libclass.a}} फाइलों से {{mono|class1.o}}, {{mono|class2.o}}, {{mono|class3.o}}, निम्न कमांड का उपयोग किया जाएगा:<ref name="Static Libraries"/> | ||
ar rcs libclass.a class1.o class2.o class3.o | ar rcs libclass.a class1.o class2.o class3.o | ||
एक प्रोग्राम को संकलित करने के लिए जो निर्भर करता है {{mono|class1.o}}, {{mono|class2.o}}, और {{mono|class3.o}}, कोई कर सकता है: | एक प्रोग्राम को संकलित करने के लिए जो निर्भर करता है {{mono|class1.o}}, {{mono|class2.o}}, और {{mono|class3.o}}, कोई कर सकता है: | ||
cc main.c libclass.a | |||
या अगर {{mono|libclass.a}} मानक | या अगर {{mono|libclass.a}} मानक लाइब्रेरी पथ में रखा गया है, जैसे {{mono|/usr/local/lib}}) | ||
cc main.c -lclass | |||
या (लिंकिंग के दौरान) | या (लिंकिंग के दौरान) | ||
ld ... main.o -lclass ... | |||
के बजाय: | के बजाय: | ||
cc main.c class1.o class2.o class3.o | |||
[[Category:Created On 17/02/2023]] | [[Category:Created On 17/02/2023]] |
Revision as of 11:21, 27 February 2023
कंप्यूटर विज्ञान में, एक स्थैतिक पुस्तकालय या स्थिर-जुड़े हुए पुस्तकालय दिनचर्या, बाहरी कार्यों और चर का एक संग्रह है, जो संकलन-समय पर एक आगंतुक में हल किया जाता है और एक संकलक, लिंकर (कंप्यूटिंग), या बंधक द्वारा लक्ष्य अनुप्रयोग में अनुकरण करके एक वस्तु फ़ाइल और एक स्टैंडअलोन निष्पादन बनाना है।[1]यह निष्पादन योग्य और इसे संकलित करने की प्रक्रिया दोनों को योजना के स्थिर निर्माण के रूप में जाना जाता है। ऐतिहासिक रूप से, पुस्तकालय केवल स्थिर हो सकते हैं। स्थैतिक पुस्तकालयों को या तो अन्य स्थिर पुस्तकालयों और वस्तु फ़ाइलों के साथ विलय कर दिया जाता है,या फिर निर्माण/जोड़ने के दौरान एक निष्पादन योग्य या क्रम (योजना जीवन चक्र चरण) पर लोड किया जाता है। क्रम उनके संबंधित निष्पादन योग्य के पता स्थान में स्थिर मेमोरी आवंटन संकलन-समय / संपर्क-समय पर निर्धारित किया जाता है।
फायदे और नुकसान
पुस्तकालयों को गतिशील रूप से जोड़ने के बजाय निष्पादन योग्य के साथ स्थिर रूप से जोड़ने के अत्यधिक फायदे हैं। सबसे महत्वपूर्ण लाभ यह है कि एप्लिकेशन निश्चित हो सकता है कि उसके सभी पुस्तकालय उपस्थित हैं और वे सही संस्करण हैं। इससे निर्भरता की समस्याओं से बचा जाता है, जिसे बोलचाल की भाषा में गतिक कड़ी संग्रह नर्क या अधिक सामान्यतः निर्भरता नरक के रूप में जाना जाता है। स्थिर जुड़ाव भी एप्लिकेशन को एक निष्पादन योग्य फ़ाइल में समाहित करने की अनुमति दे सकता है, वितरण और स्थापना को सरल बना सकता है।
स्थिर जुड़ाव के साथ, यह पुस्तकालय के उन हिस्सों को सम्मिलित करने के लिए पर्याप्त है जो लक्ष्य निष्पादन योग्य (या लक्षित पुस्तकालय) द्वारा प्रत्यक्ष और अप्रत्यक्ष रूप से संदर्भित हैं। गतिशील पुस्तकालयों के साथ, संपूर्ण पुस्तकालय भर दिया जाता है, क्योंकि यह पहले से ज्ञात नहीं है कि कौन से कार्यों को अनुप्रयोगों द्वारा लागू किया जाएगा। व्यवहार में यह लाभ महत्वपूर्ण है या नहीं यह पुस्तकालय की संरचना पर निर्भर करता है।
स्थिर जुड़ाव में, निष्पादन योग्य का आकार गतिशील जुड़ाव की तुलना में अधिक हो जाता है, क्योंकि पुस्तकालय कोड अलग-अलग फाइलों के बजाय निष्पादन योग्य के भीतर संग्रहीत होता है। लेकिन अगर पुस्तकालय फाइलों को प्रार्थना पत्र के हिस्से के रूप में गिना जाता है तो कुल आकार समान होगा, या इससे भी छोटा होगा यदि संकलक अप्रयुक्त प्रतीकों को हटा देता है।
पर्यावरण विशिष्ट
माइक्रोसॉफ्ट विंडोज पर एप्लिकेशन के साथ आवश्यक पुस्तकालय फ़ाइलों को सम्मिलित करना सामान्य बात है। [2]यूनिक्स जैसी प्रणालियों पर यह कम सामान्य है क्योंकि पैकेट प्रबंधन प्रणाली का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि सही पुस्तकालय फाइलें उपलब्ध हैं। यह पुस्तकालय फ़ाइलों को अंतरिक्ष बचत के लिए अग्रणी कई अनुप्रयोगों के बीच साझा करने की अनुमति देता है। यह पुस्तकालय का उपयोग करने वाले एप्लिकेशन को अद्यतन किए बिना वायरस और सुरक्षा खामियों को ठीक करने के लिए पुस्तकालय को आधुनिकतम बनाने की अनुमति देता है। व्यवहार में, कई निष्पादक (विशेष रूप से माइक्रोसॉफ्ट विंडोज को लक्षित करने वाले) स्थिर और गतिशील दोनों पुस्तकालयों का उपयोग करते हैं।
लिंकिंग और लोडिंग
कोई भी स्थिर लाइब्रेरी कार्य किसी अन्य स्थिर लाइब्रेरी में कार्य या प्रक्रिया को निर्देशित कर सकता है। लिंकर (कंप्यूटिंग) और लोडर इसे उसी तरह से संभालते हैं जैसे अन्य वस्तु फ़ाइल के प्रकार के लिए करते हैं। स्थिर लाइब्रेरी फ़ाइलों को लिंकिंग लोडर (जैसे, एक्स विंडो सिस्टम मापांक लोडर) द्वारा क्रम (योजना जीवनचक्र चरण) में जोड़ा जा सकता है। यद्दपि, इस तरह की प्रक्रिया को स्थोर जुड़ाव कहा जा सकता है या नहीं यह विवादास्पद है।
C/C ++ में स्थिर लाइब्रेरी बनाना
स्थैतिक लाइब्रेरीों को C (योजना भाषा) या C++ में सरलता से बनाया जा सकता है। अन्य सुविधाओं को प्रदान करने के अलावा, ये दो भाषाएं बाहरी या आंतरिक कड़ी को इंगित करने के लिए भंडारण कक्षाएं प्रदान करती हैं। ऐसी लाइब्रेरी बनाने के लिए, निर्यात किए गए कार्यों/प्रक्रियाओं और अन्य वस्तु चर को बाहरी संपर्क के लिए निर्दिष्ट किया जाना चाहिए (अर्थात C स्थिर (संकेत शब्द) का उपयोग न करके स्टेटिक लाइब्रेरी फ़ाइलनाम में सामान्यत:.aयूनिक्स जैसी प्रणालियों पर विस्तार[1] और.libमाइक्रोसॉफ्ट विंडोज पर विस्तार।
उदाहरण के लिए, यूनिक्स जैसी प्रणाली पर, नाम का एक संग्रह बनाने के लिए libclass.a फाइलों से class1.o, class2.o, class3.o, निम्न कमांड का उपयोग किया जाएगा:[1]
ar rcs libclass.a class1.o class2.o class3.o
एक प्रोग्राम को संकलित करने के लिए जो निर्भर करता है class1.o, class2.o, और class3.o, कोई कर सकता है:
cc main.c libclass.a
या अगर libclass.a मानक लाइब्रेरी पथ में रखा गया है, जैसे /usr/local/lib)
cc main.c -lclass
या (लिंकिंग के दौरान)
ld ... main.o -lclass ...
के बजाय:
cc main.c class1.o class2.o class3.o
यह भी देखें
- स्थैतिक निर्माण
- पुस्तकालय (कम्प्यूटिंग)
- लिंकर (कंप्यूटिंग)
- लोडर (कंप्यूटिंग)
- साझा पुस्तकालय
- डायनामिक-लिंक पुस्तकालय (DLL, .dll)
- बाहरी चर
- वस्तु फ़ाइल
- पूर्वबाध्यकारी
संदर्भ
- ↑ 1.0 1.1 1.2 "Static Libraries". TLDP. Retrieved 3 October 2013.
- ↑ Anderson, Rick (2000-01-11). "The End of DLL Hell". microsoft.com. Archived from the original on 2001-06-05. Retrieved 2013-08-31.
Private DLLs are DLLs that are installed with a specific application and used only by that application.