लिंकर (कंप्यूटिंग): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(46 intermediate revisions by 6 users not shown)
Line 2: Line 2:
[[File:Linker.svg|thumb|लिंक करने की प्रक्रिया का एक उदाहरण। ऑब्जेक्ट फाइल्स और [[स्थिर पुस्तकालय]] को एक नई लाइब्रेरी या निष्पादन में असेंबल किया जाता है।]]
[[File:Linker.svg|thumb|लिंक करने की प्रक्रिया का एक उदाहरण। ऑब्जेक्ट फाइल्स और [[स्थिर पुस्तकालय]] को एक नई लाइब्रेरी या निष्पादन में असेंबल किया जाता है।]]


[[कम्प्यूटिंग]] में, एक लिंकर या लिंक संपादक एक कंप्यूटर [[सिस्टम सॉफ्टवेयर]] है जो एक या एक से अधिक [[वस्तु फ़ाइल]] ([[संकलक]] या असेंबलर (कंप्यूटिंग) द्वारा उत्पन्न) लेता है और उन्हें एक [[निष्पादन]] योग्य फ़ाइल, [[पुस्तकालय (कम्प्यूटिंग)]] फ़ाइल, या अन्य वस्तु फ़ाइल में जोड़ता है। एक सरल संस्करण जो अपने इनपुट/आउटपुट को सीधे [[स्मृति]] में लिखता है, उसे ''लोडर'' कहा जाता है, यद्यपि [[लोडर (कंप्यूटिंग)]] को अधिकतर एक अलग प्रक्रिया माना जाता है।<ref name="IBM_1972"/><ref name="Barron_1978_Consolidator"/>
[[कम्प्यूटिंग]] में, एक '''लिंकर''' या लिंक संपादक एक कंप्यूटर सिस्टम सॉफ्टवेयर है जो एक या एक से अधिक ऑब्जेक्ट फ़ाइल ([[संकलक]] या असेंबलर (कंप्यूटिंग) द्वारा उत्पन्न) लेता है और उन्हें एक [[निष्पादन]] योग्य फ़ाइल, [[पुस्तकालय (कम्प्यूटिंग)]] फ़ाइल, या अन्य ऑब्जेक्ट फ़ाइल में जोड़ता है। एक सरल संस्करण जो अपने इनपुट/आउटपुट को सीधे मेमोरी में लिखता है, उसे ''लोडर'' कहा जाता है, यद्यपि [[लोडर (कंप्यूटिंग)]] को अधिकतर एक अलग प्रक्रिया माना जाता है।<ref name="IBM_1972"/><ref name="Barron_1978_Consolidator"/>
== अवलोकन ==
== अवलोकन ==
कंप्यूटर प्रोग्राम अधिकतर कई भागों या मॉड्यूल से बने होते हैं, इन भागों/मॉड्यूल को एक वस्तु फ़ाइल के भीतर समाहित करने की आवश्यकता नहीं है और ऐसे विषयों में [[डिबग प्रतीक]] के माध्यम से एक दूसरे को अन्य मॉड्यूल में पतों के रूप में संदर्भित करते हैं, जिन्हे निष्पादन के लिए लिंक किए जाने पर मेमोरी पतों में मैप किया जाता है।
कंप्यूटर प्रोग्राम अधिकतर कई भागों या मॉड्यूल से बने होते हैं, इन भागों/मॉड्यूल को एक ऑब्जेक्ट फ़ाइल के भीतर समाहित करने की आवश्यकता नहीं है और ऐसे विषयों में [[डिबग प्रतीक]] के माध्यम से एक दूसरे मॉड्यूल में पतों के रूप में एक दूसरे को संदर्भित करते हैं, जो निष्पादन के लिए लिंक किए जाने पर मेमोरी पतों में मैप किए जाते हैं।


जबकि लिंकिंग की प्रक्रिया अंततः इन स्वतंत्र भागों को संयोजित करने के लिए होती है, स्रोत कोड-स्तर पर उन्हें अलग से विकसित करने के कई अच्छे कारण हैं। इन कारणों में से एक अखंड कोडबेस पर कई छोटे टुकड़ों को व्यवस्थित करने में सरलता और प्रत्येक व्यक्तिगत टुकड़े के उद्देश्य और उत्तरदायित्व को बेहतर ढंग से परिभाषित करने की क्षमता है, जो जटिलता के प्रबंधन और [[सॉफ़्टवेयर वास्तुशिल्प]] में दीर्घकालिक स्थिरता को बढ़ाने के लिए आवश्यक है।
जबकि लिंकिंग की प्रक्रिया अंततः इन स्वतंत्र भागों को संयोजित करने के लिए होती है, स्रोत कोड-स्तर पर उन्हें अलग से विकसित करने के कई अच्छे कारण हैं। इन कारणों में एक अखंड कोडबेस पर कई छोटे टुकड़ों को व्यवस्थित करने में सरलता और प्रत्येक व्यक्तिगत टुकड़े के उद्देश्य और उत्तरदायित्व को बेहतर ढंग से परिभाषित करने की क्षमता सम्मलित है, जो [[सॉफ़्टवेयर वास्तुशिल्प]] में जटिलता के प्रबंधन और दीर्घकालिक स्थिरता को बढ़ाने के लिए आवश्यक है।


बहुधा, एक वस्तु फ़ाइल में तीन प्रकार के प्रतीक हो सकते हैं:
बहुधा, एक ऑब्जेक्ट फ़ाइल में तीन प्रकार के प्रतीक हो सकते हैं:


* परिभाषित बाहरी प्रतीक, जिन्हें कभी-कभी सार्वजनिक या प्रवेश प्रतीक कहा जाता है, जो इन्हे अन्य मॉड्यूल द्वारा बुलाए जाने की अनुमति देते हैं,
* बाहरी प्रतीक, जो इसे अन्य मॉड्यूलों द्वारा बुलाए जाने की अनुमति देते हैं, उन्हें सार्वजनिक प्रतीकों के रूप में जाना जाता है।
* अपरिभाषित बाहरी प्रतीक, जो अन्य मॉड्यूल को संदर्भित करते हैं जहां इन प्रतीकों को परिभाषित किया गया है, और
* अपरिभाषित "बाहरी" प्रतीक, जो अन्य मॉड्यूल को संदर्भित करते हैं जहां इन प्रतीकों को परिभाषित किया गया है।
* स्थानीय प्रतीकों, जिन्हें आंतरिक रूप से [[स्थानांतरण (कंप्यूटर विज्ञान)]] की सुविधा के लिए वस्तु फ़ाइल के भीतर उपयोग किया जाता है।
* स्थानीय प्रतीकों, जिन्हें आंतरिक रूप से [[स्थानांतरण (कंप्यूटर विज्ञान)]] की सुविधा के लिए ऑब्जेक्ट फ़ाइल के भीतर उपयोग किया जाता है।


कंपाइलरों के लिए, प्रत्येक वस्तु फ़ाइल एक इनपुट स्रोत कोड फ़ाइल को संकलित करने का परिणाम है। जब एक प्रोग्राम में कई अधिकांश वस्तु फ़ाइल होती हैं, तो प्रतीकों को हल करने के साथ-साथ, लिंकर इन फ़ाइलों को एक एकीकृत निष्पादन योग्य प्रोग्राम में जोड़ता है।
कंपाइलरों के लिए, प्रत्येक ऑब्जेक्ट फ़ाइल एक इनपुट स्रोत कोड फ़ाइल को संकलित करने का परिणाम है। जब एक प्रोग्राम में कई अधिकांश ऑब्जेक्ट फ़ाइल होती हैं, तो प्रतीकों को हल करने के साथ-साथ, लिंकर इन फ़ाइलों को एक एकीकृत निष्पादन योग्य प्रोग्राम में जोड़ता है।


लिंकर्स, लाइब्रेरी (कंप्यूटिंग) या [[क्रम पुस्तकालय]] नामक संग्रह से ऑब्जेक्ट ले सकते हैं। अधिकांश लिंकर्स आउटपुट में पूरी लाइब्रेरी को सम्मिलित नहीं करते हैं, उनमें केवल फाइलें सम्मिलित होती है{{clarify|date=March 2020}} जो अन्य ऑब्जेक्ट फाइलों या पुस्तकालयों द्वारा संदर्भित हैं। लाइब्रेरी लिंकिंग इस प्रकार एक पुनरावृत्त प्रक्रिया हो सकती है, जिसमें कुछ संदर्भित मॉड्यूल को जोड़ने के लिए अतिरिक्त मॉड्यूल की आवश्यकता होती है, और इसी तरह पुस्तकालय विविध उद्देश्यों के लिए निहित हैं, और एक या एक से अधिक पुस्तकालय प्रणाली बहुधा डिफ़ॉल्ट रूप में जुड़े होते हैं।
लिंकर्स, लाइब्रेरी (कंप्यूटिंग) या [[क्रम पुस्तकालय]] नामक संग्रह से ऑब्जेक्ट ले सकते हैं। अधिकांश लिंकर्स आउटपुट में पूरी लाइब्रेरी को सम्मिलित नहीं करते हैं, उनमें केवल फाइलें सम्मिलित होती है{{clarify|date=March 2020}} जो अन्य ऑब्जेक्ट फाइलों या पुस्तकालयों द्वारा संदर्भित हैं। लाइब्रेरी लिंकिंग इस प्रकार एक पुनरावृत्त प्रक्रिया हो सकती है, जिसमें कुछ संदर्भित मॉड्यूल को जोड़ने के लिए अतिरिक्त मॉड्यूल की आवश्यकता होती है, और इसी तरह पुस्तकालय विविध उद्देश्यों के लिए निहित हैं, और एक या एक से अधिक पुस्तकालय प्रणाली बहुधा डिफ़ॉल्ट रूप में जुड़े होते हैं।


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


लिंकर द्वारा निष्पादन योग्य आउटपुट को एक और स्थानांतरण पास की आवश्यकता हो सकती है जब इसे अंत में मेमोरी में लोड किया जाता है (निष्पादन से ठीक पहले)। यह पास बहुधा [[अप्रत्यक्ष स्मृति]] प्रदान करने वाले [[कम्पुटर के वो भाग जिसे छूकर मेहसूस किया जा सके]] पर छोड़ दिया जाता है। प्रत्येक प्रोग्राम को अपने स्वयं के [[पता स्थान]] में रखा जाता है, इसलिए कोई विरोध नहीं होता है, भले ही सभी प्रोग्राम एक ही आधार पते पर लोड हों। निष्पादन योग्य का [[स्थिति स्वतंत्र]] निष्पादन योग्य होने पर भी यह पास छोड़ा जा सकता है।
लिंकर द्वारा निष्पादन योग्य आउटपुट को एक और स्थानांतरण पास की आवश्यकता हो सकती है जब इसे अंत में मेमोरी में लोड किया जाता है (निष्पादन से ठीक पहले)। तो यह पास बहुधा [[अप्रत्यक्ष स्मृति|अप्रत्यक्ष मेमोरी]] प्रदान करने वाले [[कम्पुटर के वो भाग जिसे छूकर मेहसूस किया जा सके]] पर छोड़ दिया जाता है। प्रत्येक प्रोग्राम को अपने स्वयं के [[पता स्थान]] में रखा जाता है, इसलिए कोई विरोध नहीं होता है, भले ही सभी प्रोग्राम एक ही आधार पते पर लोड हों। निष्पादन योग्य का [[स्थिति स्वतंत्र]] निष्पादन योग्य होने पर भी यह पास छोड़ा जा सकता है।


सिंट्रान III जैसे कुछ [[यूनिक्स]] प्रकारों पर, एक लिंकर (ऑब्जेक्ट फ़ाइलों को एक प्रोग्राम में असेंबल करना) द्वारा की जाने वाली प्रक्रिया को लोडर (कंप्यूटिंग) कहा जाता था (जैसा कि फ़ाइल पर निष्पादन योग्य कोड लोड करने में होता है)।<ref name="BRF_1984" />इसके अतिरिक्त, कुछ ऑपरेटिंग सिस्टम में, एक ही प्रोग्राम एक प्रोग्राम ([[गतिशील जुड़ाव]]) को जोड़ने और लोड करने के दोनों कार्यों को नियंत्रण करता है।  
सिंट्रान III जैसे कुछ [[यूनिक्स]] प्रकारों पर, एक लिंकर (ऑब्जेक्ट फ़ाइलों को एक प्रोग्राम में असेंबल करना) द्वारा की जाने वाली प्रक्रिया को लोडर (कंप्यूटिंग) कहा जाता था (जैसा कि फ़ाइल पर निष्पादन योग्य कोड लोड करने में होता है)।<ref name="BRF_1984" />इसके अतिरिक्त, कुछ ऑपरेटिंग सिस्टम में, एक ही प्रोग्राम एक प्रोग्राम ([[गतिशील जुड़ाव]]) को जोड़ने और लोड करने के दोनों कार्यों को नियंत्रण करता है।  
== डायनेमिक लिंकिंग ==
== डायनेमिक लिंकिंग ==
{{See also|गतिशील लिंकर}}
{{See also|गतिशील लिंकर}}
कई [[ऑपरेटिंग सिस्टम]] वातावरण गतिशील जुड़ाव की अनुमति देते हैं, कुछ अपरिभाषित प्रतीकों के संकल्प को तब तक रोकते हैं जब तक कि कोई प्रोग्राम नहीं चलाया जाता है। इसका मतलब है कि निष्पादन योग्य कोड में अभी भी अपरिभाषित प्रतीक हैं, साथ ही वस्तुओं या पुस्तकालयों की एक सूची है जो इनके लिए परिभाषा प्रदान करेगी। प्रोग्राम को लोड करने से ये ऑब्जेक्ट/लाइब्रेरी भी लोड होंगे, और अंतिम लिंकिंग निष्पादित करेंगे।
कई [[ऑपरेटिंग सिस्टम]] वातावरण डायनेमिक लिंकिंग की अनुमति देते हैं, और कुछ अपरिभाषित प्रतीकों के संकल्प को तब तक रोकते हैं जब तक कि कोई प्रोग्राम नहीं चलाया जाता है। इसका अर्थ है कि निष्पादन योग्य कोड में अभी भी अपरिभाषित प्रतीक हैं, साथ ही ऑब्जेक्टओं या पुस्तकालयों की एक सूची है जो इनके लिए परिभाषा प्रदान करेगी। प्रोग्राम को लोड करने से ये ऑब्जेक्ट/लाइब्रेरी भी लोड होंगे, और अंतिम लिंकिंग निष्पादित करेंगे।


यह दृष्टिकोण दो लाभ प्रदान करता है:
यह दृष्टिकोण दो लाभ प्रदान करता है:


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


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


इसकी हानिया भी हैं:
इसकी हानिया भी हैं:


*[[खिड़कियाँ]] प्लेटफॉर्म पर डायनामिक लिंक लाइब्रेरी नरक के रूप में जाना जाता है, यदि नया संस्करण सही ढंग से पिछड़ा संगत नहीं है, तो एक असंगत अपडेटेड लाइब्रेरी निष्पादनयोग्य को तोड़ देगी जो लाइब्रेरी के पिछले संस्करण के व्यवहार पर निर्भर करता है।
*[[खिड़कियाँ|माइक्रोसॉफ्ट विंडोज़]] प्लेटफॉर्म पर डायनामिक लिंक लाइब्रेरी नरक के रूप में जाना जाता है, यदि नया संस्करण सही ढंग से पिछड़ा संगत नहीं है, तो एक असंगत अपडेटेड लाइब्रेरी निष्पादनयोग्य को तोड़ देगी जो लाइब्रेरी के पिछले संस्करण के व्यवहार पर निर्भर करता है।
*एक प्रोग्राम, इसके द्वारा उपयोग किए जाने वाले पुस्तकालयों के साथ, पैकेज के रूप में प्रमाणित हो सकता है (उदाहरण के लिए शुद्धता, दस्तावेज़ीकरण आवश्यकताओं, या प्रदर्शन के रूप में), लेकिन यदि घटकों को प्रतिस्थापित नहीं किया जा सकता है (यह महत्वपूर्ण सिस्टम में स्वचालित ओएस अपडेट के विपरीत भी तर्क देता है; दोनों ही मामलों में, ओएस और पुस्तकालय एक योग्य वातावरण का हिस्सा बनते हैं)।
*एक प्रोग्राम को इसके द्वारा उपयोग किए जाने वाले पुस्तकालयों के साथ, एक पैकेज के रूप में प्रमाणित किया सकता है (उदाहरण के लिए शुद्धता, दस्तावेज़ीकरण आवश्यकताओं, या प्रदर्शन के रूप में), परन्तु ये तब नहीं किया जा सकता जब घटको को प्रतिस्थापित किया जा सकता है (यह महत्वपूर्ण सिस्टम में स्वचालित ओएस अपडेट के विपरीत भी तर्क देता है, दोनों ही विषयो में, ओएस और पुस्तकालय एक योग्य वातावरण का भाग बनते हैं)।
[[कंटेनरीकरण (कंप्यूटिंग)]] या [[ओएस-स्तरीय वर्चुअलाइजेशन]] वातावरण सिस्टम प्रशासक को इन व्यक्तिगत कारोबारी और विपक्षों को कम करने या व्यापार करने की अनुमति दे सकता है।
[[कंटेनरीकरण (कंप्यूटिंग)]] या [[ओएस-स्तरीय वर्चुअलाइजेशन]] वातावरण सिस्टम प्रशासक को इन व्यक्तिगत कारोबारी और विपक्षों को कम करने या व्यापार करने की अनुमति दे सकता है।


== स्टेटिक लिंकिंग ==
== स्टेटिक लिंकिंग ==
स्टेटिक लिंकिंग प्रोग्राम में उपयोग किए जाने वाले सभी लाइब्रेरी नियमित निष्पादन योग्य छवि में कॉपी करने वाले लिंकर का परिणाम है। डायनेमिक लिंकिंग की तुलना में इसके लिए अधिक डिस्क स्थान और मेमोरी की आवश्यकता हो सकती है, लेकिन यह अधिक पोर्टेबल है, क्योंकि इसे उस सिस्टम पर [[डायनेमिक-लिंक लाइब्रेरी]] की उपस्थिति की आवश्यकता नहीं है जहां यह चलता है। स्टेटिक लिंकिंग डीएलएल नरक को भी रोकता है, क्योंकि प्रत्येक प्रोग्राम में लाइब्रेरी निर्धारित विधि के ठीक उसी संस्करण को सम्मिलित किया जाता है जिसकी उसे आवश्यकता होती है, जिसमें अन्य कार्यक्रमों के साथ कोई विरोध नहीं होता है। एक लाइब्रेरी से केवल कुछ निर्धारित विधि का उपयोग करने वाले प्रोग्राम को पूरे लाइब्रेरी को स्थापित करने की आवश्यकता नहीं होती है।  
स्टेटिक लिंकिंग प्रोग्राम में उपयोग किए जाने वाले सभी लाइब्रेरी नियमित निष्पादन योग्य छवि में कॉपी करने वाले लिंकर का परिणाम है। डायनेमिक लिंकिंग की तुलना में इसके लिए अधिक डिस्क स्थान और मेमोरी की आवश्यकता हो सकती है, लेकिन यह अधिक पोर्टेबल है, क्योंकि इसे उस सिस्टम पर [[डायनेमिक-लिंक लाइब्रेरी]] की उपस्थिति की आवश्यकता नहीं है जहां यह चलता है। स्टेटिक लिंकिंग डीएलएल नरक को भी रोकता है, क्योंकि प्रत्येक प्रोग्राम में लाइब्रेरी निर्धारित विधि के ठीक उसी संस्करण को सम्मिलित किया जाता है जिसकी उसे आवश्यकता होती है, जिसमें अन्य कार्यक्रमों के साथ कोई विरोध नहीं होता है। यदि कोई प्रोग्राम लाइब्रेरी से केवल कुछ परिभाषित विधियों का उपयोग करता है, तो उसे संपूर्ण लाइब्रेरी को स्थापित करने की आवश्यकता नहीं होती है।  
== {{Anchor|Relaxation|Jump-sizing}}स्थान परिवर्तन ==
== {{Anchor|Relaxation|Jump-sizing}}स्थान परिवर्तन ==
चूंकि कंपाइलर के पास अंतिम आउटपुट में ऑब्जेक्ट्स के विन्यास के बारे में कोई जानकारी नहीं है, यह छोटे या अधिक कुशल निर्देशों का लाभ नहीं उठा सकता है जो किसी अन्य ऑब्जेक्ट के पते पर आवश्यकता रखता है। उदाहरण के लिए, एक जंप निर्देश एक पूर्ण पते या वर्तमान स्थान से ऑफ़सेट का संदर्भ दे सकता है, और ऑफ़सेट को लक्ष्य की दूरी के आधार पर अलग-अलग लंबाई के साथ व्यक्त किया जा सकता है। सबसे पहले रूढ़िवादी निर्देश (बहुधा प्लेटफॉर्म के आधार पर सबसे बड़ा सापेक्ष या पूर्ण संस्करण) उत्पन्न करके और विश्राम संकेत जोड़कर, अंतिम लिंक के दौरान छोटे या अधिक कुशल निर्देशों को प्रतिस्थापित करना संभव है। जंप अनुकूलतम के संबंध में इसे स्वचालित जंप-साइज़िंग भी कहा जाता है।<ref name="Salomon_1992" />यह चरण केवल सभी इनपुट ऑब्जेक्ट्स को पढ़ने और अस्थायी पते नियुक्त करने के बाद ही किया जा सकता है, लिंकर छूट पास बाद में पतों को पुन: नियुक्त करता है, जो बदले में अधिक संभावित छूट देने की अनुमति दे सकता है। सामान्य तौर पर, प्रतिस्थापित अनुक्रम छोटे होते हैं, जो इस प्रक्रिया को वस्तुओं के एक निश्चित क्रम को देखते हुए हमेशा सर्वोत्तम समाधान पर अभिसरण करने की अनुमति देता है; यदि ऐसा नहीं होता है, तो छूट संघर्ष कर सकती हैं, और लिंकर को किसी भी विकल्प के लाभों को जांचना होगा।
चूंकि कंपाइलर के पास अंतिम आउटपुट में ऑब्जेक्ट्स के विन्यास के बारे में कोई जानकारी नहीं है, अतः यह छोटे या अधिक कुशल निर्देशों का लाभ नहीं उठा सकता है जो किसी अन्य ऑब्जेक्ट के पते पर आवश्यकता रखता है। उदाहरण के लिए, एक जंप निर्देश एक पूर्ण पते या वर्तमान स्थान से कमी को पूरी करना का संदर्भ दे सकता है, और इस कमी को लक्ष्य की दूरी के आधार पर अलग-अलग लंबाई के साथ व्यक्त किया जा सकता है। सबसे पहले रूढ़िवादी निर्देश (बहुधा प्लेटफॉर्म के आधार पर सबसे बड़ा सापेक्ष या पूर्ण संस्करण) उत्पन्न करके और विश्राम संकेत जोड़कर, अंतिम लिंक के समय छोटे या अधिक कुशल निर्देशों को प्रतिस्थापित करना संभव है। जंप अनुकूलतम के संबंध में इसे स्वचालित जंप-साइज़िंग भी कहा जाता है।<ref name="Salomon_1992"/> यह चरण केवल सभी इनपुट ऑब्जेक्ट्स को पढ़ने और अस्थायी पते नियुक्त करने के पश्चात ही किया जा सकता है, लिंकर छूट पास बाद में पतों को पुन: नियुक्त करता है, जो बदले में अधिक संभावित छूट देने की अनुमति दे सकता है। सामान्यतः प्रतिस्थापित अनुक्रम छोटे होते हैं, जो इस प्रक्रिया को ऑब्जेक्टओं के एक निश्चित क्रम को देखते हुए सदैव सर्वोत्तम समाधान पर अभिसरण करने की अनुमति देता है, यदि ऐसा नहीं होता है, तो छूट संघर्ष कर सकती हैं, और तब लिंकर को किसी भी विकल्प के लाभों को जांचना होगा।
 
जबकि निर्देश छूट अधिकतर लिंक-टाइम पर होती है, संकलन-समय पर अनुकूलन प्रक्रिया के हिस्से के रूप में आंतरिक-मॉड्यूल छूट पहले से ही हो सकती है। कुछ मामलों में, स्थानांतरण प्रक्रिया के हिस्से के रूप में लोड-समय पर विश्राम भी हो सकता है या गतिशील मृत-कोड उन्मूलन तकनीकों के साथ संयुक्त हो सकता है।


जबकि निर्देश छूट अधिकतर लिंक-टाइम पर होती है, संकलन-समय पर अनुकूलन प्रक्रिया के हिस्से के रूप में आंतरिक-मॉड्यूल छूट पहले से ही हो सकती है। कुछ स्थितियों में, स्थानांतरण प्रक्रिया के भाग के रूप में लोड-समय पर विश्राम भी हो सकता है या गतिशील मृत-कोड उन्मूलन तकनीकों के साथ संयुक्त हो सकता है।
== {{anchor|Consolidator}}लिंकेज संपादक ==
== {{anchor|Consolidator}}लिंकेज संपादक ==
[[IBM]] सिस्टम/360 [[मेनफ़्रेम कंप्यूटर]] वातावरण में जैसे ओएस/360, जेड/आर्किटेक्चर मेनफ्रेम के लिए जेड/ओएस सहित, इस प्रकार के प्रोग्राम को लिंकेज संपादक के रूप में जाना जाता है। जैसा कि नाम से पता चलता है कि एक लिंकेज संपादक में अलग-अलग प्रोग्राम अनुभागों को जोड़ने, बदलने या हटाने की अनुमति देने की अतिरिक्त क्षमता होती है। ओएस/360 जैसे ऑपरेटिंग सिस्टम में प्रोग्राम के घटक अनुभागों के बारे में पूरक डेटा वाले निष्पादन योग्य लोड-मॉड्यूल के लिए प्रारूप होता है, ताकि एक व्यक्तिगत प्रोग्राम अनुभाग को बदला जा सके, और प्रोग्राम के अन्य भागों को अपडेट किया जा सके ताकि स्थानांतरित करने योग्य पते और अन्य संदर्भों को प्राप्त किया जा सके। प्रक्रिया के भाग के रूप में, लिंकेज संपादक द्वारा ठीक किया जाना चाहिए।
[[IBM|आईबीएम]] सिस्टम/360 [[मेनफ़्रेम कंप्यूटर]] वातावरण में, जैसे कि ओएस/360, z/आर्किटेक्चर मेनफ्रेम के लिए z/ओएस सहित, इस प्रकार के प्रोग्राम को लिंकेज संपादक के रूप में जाना जाता है। जैसा कि नाम से पता चलता है कि एक लिंकेज संपादक में अलग-अलग प्रोग्राम के अनुभागों को जोड़ने, बदलने या हटाने की अनुमति देने की अतिरिक्त क्षमता होती है। OS/360 जैसे ऑपरेटिंग सिस्टम में निष्पादन योग्य लोड-मॉड्यूल के लिए प्रारूप होता है जिसमें प्रोग्राम के घटक अनुभागों के बारे में पूरक डेटा होता है, जिससे कि एक व्यक्तिगत प्रोग्राम अनुभाग को बदला जा सके, और प्रोग्राम के अन्य भागों को अपडेट किया जा सके , जिससे कि स्थानांतरित करने योग्य पते और अन्य संदर्भों को प्राप्त किया जा सके और प्रक्रिया के भाग के रूप में अन्य संदर्भों को लिंकेज संपादक द्वारा ठीक किया जा सकता है।।
 
इसका एक फायदा यह है कि यह एक प्रोग्राम को सभी  मध्यवर्ती ऑब्जेक्ट फ़ाइलों को रखे बिना बनाए रखने की अनुमति देता है, या बिना बदले हुए प्रोग्राम अनुभागों को फिर से संकलित किए बिना। यह प्रोग्राम अपडेट को छोटी फाइलों (मूल रूप से [[कार्ड डेक (कंप्यूटिंग)]] एस) के रूप में वितरित करने की अनुमति देता है, जिसमें केवल ऑब्जेक्ट मॉड्यूल को प्रतिस्थापित किया जाता है। ऐसी प्रणालियों में, ऑब्जेक्ट कोड 80-बाइट पंच-कार्ड छवियों के रूप और प्रारूप में होता है, ताकि उस माध्यम का उपयोग करके सिस्टम में अपडेट समक्ष किए जा सकें। ओएस/360 के बाद के रिलीज और बाद के सिस्टम में, लोड-मॉड्यूल में अद्यतनों का पता लगाने योग्य रिकॉर्ड बनाने के लिए घटक मॉड्यूल के संस्करणों के बारे में अतिरिक्त डेटा होता है। यह पहले से लिंक किए गए लोड मॉड्यूल से एक [[ओवरले (प्रोग्रामिंग)]] संरचना को जोड़ने, बदलने या हटाने की भी अनुमति देता है।


लिंकेज संपादक शब्द का अर्थ यह नहीं लगाया जाना चाहिए कि प्रोग्राम टेक्स्ट संपादक की तरह यूजर-पारस्परिक, मोड में संचालित होता है। यह बैच-मोड निष्पादन के लिए अभिप्रेत है, उपयोगकर्ता द्वारा अनुक्रमिक रूप से व्यवस्थित फ़ाइलों में संपादित किए जा रहे संपादन आदेशों के साथ, जैसे कि [[छिद्रित कार्ड]], [[डायरेक्ट-एक्सेस स्टोरेज डिवाइस]], या [[चुंबकीय टेप]], और टेप का उपयोग अधिकतर ओएस की प्रारंभिक स्थापना के दौरान किया जाता था। .
इसका एक लाभ यह है कि यह सभी मध्यवर्ती फाइलों को रखे बिना, या बदले हुए प्रोग्राम अनुभागों को फिर से संकलित किए बिना एक प्रोग्राम को बनाए रखने की अनुमति देता है। यह प्रोग्राम अपडेट को छोटी फाइलों (मूल रूप से [[कार्ड डेक (कंप्यूटिंग)]] एस) के रूप में वितरित करने की अनुमति देता है, जिसमें केवल ऑब्जेक्ट मॉड्यूल को प्रतिस्थापित किया जाता है। ऐसी प्रणालियों में, ऑब्जेक्ट कोड 80-बाइट पंच-कार्ड छवियों के रूप और प्रारूप में होता है, जिससे कि उस माध्यम का उपयोग करके सिस्टम में अपडेट समक्ष किए जा सकें। ओएस/360 के बाद के रिलीज और बाद के सिस्टम में, अद्यतनों का पता लगाने के योग्य रिकॉर्ड बनाने के लिए, लोड-मॉड्यूल में घटक मॉड्यूल के संस्करणों के बारे में अतिरिक्त डेटा होता है। यह पहले से लिंक किए गए लोड मॉड्यूल से एक [[ओवरले (प्रोग्रामिंग)]] संरचना को जोड़ने, बदलने या हटाने की भी अनुमति देता है।


लिंकेज एडिटिंग ( आईबीएम नामकरण) या समेकन या संग्रह ([[इंटरनेशनल कंप्यूटर लिमिटेड]] नामकरण) लिंकेज संपादक या समेकनकर्ता के विभिन्न टुकड़ों को पुनर्स्थापन योग्य बाइनरी में संयोजित करने के कार्य को संदर्भित करता है, जबकि लक्ष्य पते पर एक पूर्ण बाइनरी में लोडिंग और स्थानांतरण को सामान्य रूप से एक अलग कोशिश माना जाता है।<ref name="Barron_1978_Consolidator"/>
"लिंकेज संपादक" शब्द का अर्थ यह नहीं लगाया जाना चाहिए कि प्रोग्राम टेक्स्ट संपादक जैसे यूजर-पारस्परिक मोड में संचालित होता है। यह बैच-मोड निष्पादन के लिए अभिप्रेत है, उपयोगकर्ता द्वारा अनुक्रमिक रूप से संगठित फ़ाइलों, [[छिद्रित कार्ड]], [[डायरेक्ट-एक्सेस स्टोरेज डिवाइस]], या [[चुंबकीय टेप]] में संपादन आदेशों की आपूर्ति की जा रही है, और टेप अधिकतर ओएस की प्रारंभिक स्थापना के समय उपयोग किए जाते थे।


लिंकेज एडिटिंग ( आईबीएम नामकरण) या समेकन या संग्रह ([[इंटरनेशनल कंप्यूटर लिमिटेड]] नामकरण), लिंकेज संपादक या समेकनकर्ता के विभिन्न टुकड़ों को पुनर्स्थापन योग्य बाइनरी में संयोजित करने के कार्य को संदर्भित करता है, जबकि लक्ष्य पते पर एक पूर्ण बाइनरी में लोडिंग और स्थानांतरण को सामान्य रूप से एक अलग प्रयास माना जाता है।<ref name="Barron_1978_Consolidator"/>


== सामान्य कार्यान्वयन ==
== सामान्य कार्यान्वयन ==


यूनिक्स और यूनिक्स जैसी प्रणालियों पर, लिंकर को एलडी के रूप में जाना जाता है। एलडी नाम की उत्पत्ति लोडर और लिंक संपादक हैं। लिंकिंग की प्रक्रिया के दौरान अन्य कार्यक्रमों से बाहरी प्रतीकों को लोड करने की प्रक्रिया का वर्णन करने के लिए लोडर शब्द का उपयोग किया गया था।<ref name="UNIX_V6_manuals"/>
यूनिक्स और यूनिक्स जैसी प्रणालियों पर, लिंकर को एलडी के रूप में जाना जाता है। एलडी नाम की उत्पत्ति लोडर और लिंक संपादक हैं। लिंकिंग की प्रक्रिया के समय अन्य कार्यक्रमों से बाहरी प्रतीकों को लोड करने की प्रक्रिया का वर्णन करने के लिए लोडर शब्द का उपयोग किया गया था।<ref name="UNIX_V6_manuals"/>
 
 


=== जीएनयू लिंकर ===
=== जीएनयू लिंकर ===
जीएनयू लिंकर (या जीएनयू एलडी) यूनिक्स कमांड एलडी का [[जीएनयू परियोजना]] का [[मुफ्त सॉफ्टवेयर]] कार्यान्वयन है। जीएनयू एलडी लिंकर चलाता है, जो एक सॉफ्टवेयर प्रोजेक्ट के संकलन के दौरान बनाई गई ऑब्जेक्ट फाइलों से निष्पादन योग्य फ़ाइल (या लाइब्रेरी) बनाता है। लिंकिंग प्रक्रिया पर अधिक नियंत्रण रखने के लिए एक लिंकर स्क्रिप्ट जीएनयू एलडी को पास की जा सकती है।<ref name="GNU_2018_Binutils"/>  जीएनयू लिंकर [[जीएनयू बाइनरी यूटिलिटीज]] (बिनुटिल्स) का भाग है। बिनुटिल्स में एलडी के दो संस्करण प्रदान किए गए हैं: पारंपरिक जीएनयू एलडी [[बाइनरी फाइल डिस्क्रिप्टर लाइब्रेरी]] पर आधारित है, और एक सुव्यवस्थित ईएलएफ-ओनली वर्जन जिसे [[सोना (लिंकर)]] कहा जाता है।
जीएनयू लिंकर (या जीएनयू एलडी) यूनिक्स कमांड एलडी का [[जीएनयू परियोजना]] के [[मुफ्त सॉफ्टवेयर]] का कार्यान्वयन है। जीएनयू एलडी लिंकर को चलाता है, जो एक सॉफ्टवेयर प्रोजेक्ट के संकलन के समय बनाई गई ऑब्जेक्ट फाइलों से निष्पादन योग्य फ़ाइल (या लाइब्रेरी) को बनाता है। लिंकिंग प्रक्रिया पर अधिक नियंत्रण रखने के लिए एक लिंकर स्क्रिप्ट जीएनयू एलडी को पास की जा सकती है। <ref name="GNU_2018_Binutils"/>  जीएनयू लिंकर [[जीएनयू बाइनरी यूटिलिटीज]] (बिनुटिल्स) का भाग है। बिनुटिल्स में एलडी के दो संस्करण प्रदान किए गए हैं जिसमे एक पारंपरिक जीएनयू एलडी जो की [[बाइनरी फाइल डिस्क्रिप्टर लाइब्रेरी]] पर आधारित है, और दुसरा सुव्यवस्थित ईएलएफ-ओनली संस्करण जिसे [[सोना (लिंकर)]] कहा जाता है।  
 
.जीएनयू एलडी की कमांड-लाइन और लिंकर स्क्रिप्ट सिंटैक्स अधिकांश यूनिक्स जैसी दुनिया में वास्तविक मानक है। [[एलएलवीएम]] परियोजना का लिंकर, एलएलडी, ड्रॉप-इन संगत होने के लिए डिज़ाइन किया गया है, और सीधे जीएनयू कंपाइलर के साथ इस्तेमाल किया जा सकता है। एक और ड्रॉप-इन रिप्लेसमेंट, मोल्ड, एक अत्यधिक समानांतर और तेज़ विकल्प है जो जीएनयू टूल द्वारा भी समर्थित है।
 


जीएनयू एलडी के कमांड-लाइन और लिंकर स्क्रिप्ट सिंटैक्स अधिकांश यूनिक्स जैसी दुनिया में वास्तविक मानक है। [[एलएलवीएम]] परियोजना के लिंकर, एलएलडी को ड्रॉप-इन संगत होने के लिए डिज़ाइन किया गया है, और सीधे जीएनयू कंपाइलर के साथ उपयोग किया जा सकता है। एक और ड्रॉप-इन रिप्लेसमेंट, मोल्ड, एक अत्यधिक समानांतर और तेज़ विकल्प है जो जीएनयू टूल द्वारा भी समर्थित है।


== यह भी देखें ==
== यह भी देखें ==
Line 97: Line 91:
== संदर्भ ==
== संदर्भ ==
{{Reflist|refs=
{{Reflist|refs=
<ref name="IBM_1972">{{cite book |publisher=[[IBM Corporation]] |title=IBM OS Linkage Editor and Loader |date=1972 |url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf |access-date=2020-03-07 |url-status=live |archive-url=https://web.archive.org/web/20200306230227/http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf |archive-date=2020-03-06}}</ref>
<ref name="IBM_1972">{{cite book |publisher=[[आईबीएम कॉर्पोरेशन]] |title=आईबीएम ओएस लिंकेज संपादक और लोडर |date=1972 |url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf |access-date=2020-03-07 |url-status=live |archive-url=https://web.archive.org/web/20200306230227/http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf |archive-date=2020-03-06}}</ref>
<ref name="BRF_1984">{{cite book |title=BRF-LINKER User Manual |id=ND-60.196.01. |date=August 1984}}</ref>
<ref name="BRF_1984">{{cite book |title=बीआरएफ-लिंकर उपयोगकर्ता मैनुअल|id=ND-60.196.01. |date=August 1984}}</ref>
<ref name="GNU_2018_Binutils">{{cite web |title=GNU Binutils: Linker Scripts |date=2018-07-18 |url=https://sourceware.org/binutils/docs/ld/Scripts.html |access-date=2019-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200306230349/https://sourceware.org/binutils/docs/ld/Scripts.html |archive-date=2020-03-06}}</ref>
<ref name="GNU_2018_Binutils">{{cite web |title=जीएनयू बिनुटिल्स: लिंकर स्क्रिप्ट्स |date=2018-07-18 |url=https://sourceware.org/binutils/docs/ld/Scripts.html |access-date=2019-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200306230349/https://sourceware.org/binutils/docs/ld/Scripts.html |archive-date=2020-03-06}}</ref>
<ref name="UNIX_V6_manuals">{{cite book |title=UNIX PROGRAMMER'S MANUAL |date=May 1975 |edition=6 |chapter=1. ld }}</ref>
<ref name="UNIX_V6_manuals">{{cite book |title=यूनिक्स प्रोग्रामर मैनुअल |date=May 1975 |edition=6 |chapter=1. ld }}</ref>
<ref name="Barron_1978_Consolidator">{{cite book |author-first=David William |author-last=Barron |author-link=David W. Barron |editor-first=J. John |editor-last=Floretin |title=Assemblers and Loaders |date=1978 |orig-year=1971, 1969 |edition=3 |publisher=[[Elsevier North-Holland Inc.]] |series=Computer Monographs |publication-place=New York, USA |location=[[University of Southampton]], Southampton, UK |isbn=0-444-19462-2 |lccn=78-19961 |chapter=5.7. Linkage editors and consolidators |pages=65–66}} (xii+100 pages)</ref>
<ref name="Barron_1978_Consolidator">{{cite book |author-first=David William |author-last=Barron |author-link=डेविड डब्ल्यू बैरोन |editor-first=J. John |editor-last=Floretin |title=असेंबलर और लोडर|date=1978 |orig-year=1971, 1969 |edition=3 |publisher=[[Elsevier North-Holland Inc.]] |series=कंप्यूटर मोनोग्राफ|publication-place=New York, USA |location=[[University of Southampton]], Southampton, UK |isbn=0-444-19462-2 |lccn=78-19961 |chapter=5.7. Linkage editors and consolidators |pages=65–66}} (xii+100 pages)</ref>
<ref name="Salomon_1992">{{cite book |author-first=David |author-last=Salomon |editor-first=Ian D. |editor-last=Chivers |title=Assemblers and Loaders |date=February 1993 |chapter=8.2.3 Automatic jump-sizing |pages=237–238 |orig-year=1992 |edition=1 |series=Ellis Horwood Series In Computers And Their Applications |publisher=[[Ellis Horwood Limited]] / [[Simon & Schuster International Group]] |location=California State University, Northridge, California, USA |publication-place=Chicester, West Sussex, UK |isbn=0-13-052564-2 |chapter-url=http://www.davidsalomon.name/assem.advertis/asl.pdf |access-date=2008-10-01 |url-status=live |archive-url=https://web.archive.org/web/20200323010358/http://www.davidsalomon.name/assem.advertis/asl.pdf |archive-date=2020-03-23}} (xiv+294+4 pages)</ref>
<ref name="Salomon_1992">{{cite book |author-first=David |author-last=Salomon |editor-first=Ian D. |editor-last=Chivers |title=असेंबलर और लोडर |date=February 1993 |chapter=8.2.3 Automatic jump-sizing |pages=237–238 |orig-year=1992 |edition=1 |series=कंप्यूटर और उनके अनुप्रयोगों में एलिस होरवुड श्रृंखला|publisher=[[Ellis Horwood Limited]] / [[Simon & Schuster International Group]] |location=California State University, Northridge, California, USA |publication-place=चिसेस्टर, वेस्ट ससेक्स, यूके|isbn=0-13-052564-2 |chapter-url=http://www.davidsalomon.name/assem.advertis/asl.pdf |access-date=2008-10-01 |url-status=live |archive-url=https://web.archive.org/web/20200323010358/http://www.davidsalomon.name/assem.advertis/asl.pdf |archive-date=2020-03-23}} (xiv+294+4 pages)</ref>
}}
}}


== आगे की पढाई ==
== आगे की पढाई ==
* {{cite journal |author-first1=Christopher W. |author-last1=Fraser |author-first2=David R. |author-last2=Hanson |author-link2=David Hanson (computer scientist) |title=A Machine Independent Linker |journal=Software: Practice and Experience |volume=12 |issue=4 |date=April 1982 |publisher=[[John Wiley & Sons Ltd]] |issn=1097-024X |pages=351–366 |doi=10.1002/spe.4380120407 |s2cid=206508204 }}
* {{cite journal |author-first1=क्रिस्टोफर डब्ल्यू. |author-last1=फ्रेजर |author-first2=डेविड आर. |author-last2=हैन्सन |author-link2=डेविड हैन्सन (कंप्यूटर वैज्ञानिक) |title=A Machine Independent Linker |journal=Software: Practice and Experience |volume=12 |issue=4 |date=April 1982 |publisher=[[John Wiley & Sons Ltd]] |issn=1097-024X |pages=351–366 |doi=10.1002/spe.4380120407 |s2cid=206508204 }}
* {{cite book |publisher=[[International Business Machines Corporation]] |title=Operating System 360 - Linkage Editor (E) - Program Logic Manual |id=Program number 360S-ED-510. File No. S360-31. Form Y28-6610-2. |date=1969-07-23 |orig-year=June 1967 |edition=3 |url=http://www.bitsavers.org/pdf/ibm/360/Y28-6610_LinkEdit(E)_PLM.pdf |access-date=2020-03-07 |url-status=dead |archive-url=https://web.archive.org/web/20071001000734/http://www.bitsavers.org/pdf/ibm/360/Y28-6610_LinkEdit(E)_PLM.pdf |archive-date=2007-10-01}}
* {{cite book |publisher=[[इंटरनेशनल बिजनेस मशीन कॉर्पोरेशन]] |title=ऑपरेटिंग सिस्टम 360 - लिंकेज एडिटर () - प्रोग्राम लॉजिक मैनुअल |id=Program number 360S-ED-510. File No. S360-31. Form Y28-6610-2. |date=1969-07-23 |orig-year=June 1967 |edition=3 |url=http://www.bitsavers.org/pdf/ibm/360/Y28-6610_LinkEdit(E)_PLM.pdf |access-date=2020-03-07 |url-status=dead |archive-url=https://web.archive.org/web/20071001000734/http://www.bitsavers.org/pdf/ibm/360/Y28-6610_LinkEdit(E)_PLM.pdf |archive-date=2007-10-01}}
* {{cite journal |author-first=Douglas W. |author-last=Jones |author-link=Douglas W. Jones |title=Assembly Language as Object Code |journal=Software: Practice and Experience |volume=13 |issue=8 |date=August 1983 |publisher=[[John Wiley & Sons Ltd]] |issn=1097-024X |pages=715–725 |doi=10.1002/spe.4380130806 |s2cid=42995338 }}
* {{cite journal |author-first=डगलस डब्ल्यू. |author-last=जोन्स |author-link=डगलस डब्ल्यू जोन्स |title=ऑब्जेक्ट कोड के रूप में असेंबली भाषा |journal=सॉफ्टवेयर: अभ्यास और अनुभव |volume=13 |issue=8 |date=August 1983 |publisher=[[जॉन विली एंड संस लिमिटेड]] |issn=1097-024X |pages=715–725 |doi=10.1002/spe.4380130806 |s2cid=42995338 }}
* {{cite book |author-last=Levine |author-first=John R. |author-link=John R. Levine |title=Linkers and Loaders |date=2000 |orig-year=October 1999 |edition=1 |publisher=[[Morgan Kaufmann]] |series=The Morgan Kaufmann Series in Software Engineering and Programming |location=San Francisco, USA |isbn=1-55860-496-0 |oclc=42413382 |url=https://www.iecc.com/linker/ |access-date=2020-01-12 |url-status=live |archive-url=https://archive.today/20121205032107/http://www.iecc.com/linker/ |archive-date=2012-12-05}} Code: [https://archive.today/20200114225034/https://linker.iecc.com/code.html][ftp://ftp.iecc.com/pub/linker/] Errata: [https://linker.iecc.com/<!-- https://archive.today/20200114224817/https://linker.iecc.com/ 2020-01-14 -->]
* {{cite book |author-last=लेविन |author-first=जॉन आर. |author-link=जॉन आर. लेविन |title=लिंकर और लोडर |date=2000 |orig-year=October 1999 |edition=1 |publisher=[[मॉर्गन कॉफ़मैन]] |series=सॉफ्टवेयर इंजीनियरिंग और प्रोग्रामिंग में मॉर्गन कॉफ़मैन श्रृंखला |location=सैन फ्रांसिस्को, यूएसए |isbn=1-55860-496-0 |oclc=42413382 |url=https://www.iecc.com/linker/ |access-date=2020-01-12 |url-status=live |archive-url=https://archive.today/20121205032107/http://www.iecc.com/linker/ |archive-date=2012-12-05}} Code: [https://archive.today/20200114225034/https://linker.iecc.com/code.html][ftp://ftp.iecc.com/pub/linker/] Errata: [https://linker.iecc.com/<!-- https://archive.today/20200114224817/https://linker.iecc.com/ 2020-01-14 -->]
* {{cite journal |author-first1=Leon |author-last1=Presser |author-link1=Leon Presser |author-first2=John R. |author-last2=White |title=Linkers and Loaders |journal=[[ACM Computing Surveys]] |volume=4 |number=3 |location=University of California, Santa Barbara, California, USA |date=September 1972 |pages=149–167 |doi=10.1145/356603.356605 |s2cid=5694671 |url=https://inst.eecs.berkeley.edu/~cs162/sp06/hand-outs/p149-presser-linker-loader.pdf |access-date=2020-03-07 |url-status=live |archive-url=https://web.archive.org/web/20200307001527/http://www-inst.eecs.berkeley.edu/~cs162/sp06/hand-outs/p149-presser-linker-loader.pdf |archive-date=2020-03-07}} (19 pages)
* {{cite journal |author-first1=लियोन |author-last1=प्रेशर |author-link1=लियोन प्रेशर |author-first2=जॉन आर. |author-last2=व्हाइट |title=Linkers and Loaders |journal=[[ACM Computing Surveys]] |volume=4 |number=3 |location=University of California, Santa Barbara, California, USA |date=September 1972 |pages=149–167 |doi=10.1145/356603.356605 |s2cid=5694671 |url=https://inst.eecs.berkeley.edu/~cs162/sp06/hand-outs/p149-presser-linker-loader.pdf |access-date=2020-03-07 |url-status=live |archive-url=https://web.archive.org/web/20200307001527/http://www-inst.eecs.berkeley.edu/~cs162/sp06/hand-outs/p149-presser-linker-loader.pdf |archive-date=2020-03-07}} (19 pages)
* {{cite journal |author-first=Norman |author-last=Ramsey |title=Relocating Machine Instructions by Currying |date=May 1996 |url=https://www.cs.tufts.edu/~nr/pubs/relocating.pdf |periodical=ACM SIGPLAN Notices |volume=31 |issue=5 |pages=226–236 |doi=10.1145/249069.231429 |archive-url=https://web.archive.org/web/20200518103430/https://www.cs.tufts.edu/~nr/pubs/relocating.pdf |archive-date=18 May 2020 |url-status=live}}
* {{cite journal |author-first=नॉर्मन |author-last=रैमसे |title=करींग द्वारा मशीन अनुदेशों को स्थानांतरित करना |date=May 1996 |url=https://www.cs.tufts.edu/~nr/pubs/relocating.pdf |periodical=ACM SIGPLAN Notices |volume=31 |issue=5 |pages=226–236 |doi=10.1145/249069.231429 |archive-url=https://web.archive.org/web/20200518103430/https://www.cs.tufts.edu/~nr/pubs/relocating.pdf |archive-date=18 May 2020 |url-status=live}}
 
 
 
==इस पेज में लापता आंतरिक लिंक की सूची==
 
*कोडांतरक (कम्प्यूटिंग)
*सोर्स कोड
*कंप्यूटर का प्रदर्शन
*डीएलएल नरक
*पिछड़ा संगत
*कार्यकारी प्रबंधक
*डिस्क भंडारण
*संकलन समय
*लोड होने का समय
*गतिशील डेड-कोड उन्मूलन
*UNIX- जैसे
*नाम की सजावट
== बाहरी कड़ियाँ ==
== बाहरी कड़ियाँ ==
{{Wiktionary|linker}}
* [[google:site:www.airs.com/blog/archives+"linkers+part"|इयान लांस जस्टिन की लिंकर्स ब्लॉग प्रविष्टियाँ]]
* [https://www.google.com/search?q=site%3Awww.airs.com%2Fblog%2Farchives+%22linkers+part%22 Ian Lance Justin's ''Linkers'' blog entries]
* [http://www.linuxjournal.com/article/6463 लिंकर और लोडर], a [[Linux Journal|लिनक्स जर्नल]] संदीप ग्रोवर का लेख
* [http://www.linuxjournal.com/article/6463 Linkers and Loaders], a [[Linux Journal]] article by Sandeep Grover
* [https://web.archive.org/web/20060808184333/http://www.dpgraph.com/assembly.html असेंबली भाषा विकास के लिए मुफ़्त टूल का संपूर्ण संग्रह कहां से प्राप्त करें इसकी एक और सूची]
* [https://web.archive.org/web/20060808184333/http://www.dpgraph.com/assembly.html Another Listing of Where to Get a Complete Collection of Free Tools for Assembly Language Development]
* [https://sourceware.org/binutils/docs/ld/index.html जीएनयू लिंकर मैनुअल]
* [https://sourceware.org/binutils/docs/ld/index.html GNU linker manual]
* [https://lld.llvm.org/ एलएलडी - एलएलवीएम लिंकर]
* [https://lld.llvm.org/ LLD - The LLVM Linker]
* {{man|1|ld|die.net|जीएनयू लिंकर}}
* {{man|1|ld|die.net|The GNU linker}}
{{Authority control}}


{{Application binary interface}}
[[Category:Articles with hatnote templates targeting a nonexistent page]]
{{Executables}}
[[Category:Articles with invalid date parameter in template]]
{{Unix commands}}
[[Category:CS1 location test]]
{{Authority control}}
[[Category:Collapse templates]]
[[श्रेणी:संकलक]]
[[Category:Lua-based templates]]
[[श्रेणी:कंप्यूटर पुस्तकालय]]
[[Category:Multi-column templates]]
[[श्रेणी: प्रोग्रामिंग भाषा कार्यान्वयन]]
[[Category:Navigational boxes| ]]
[[श्रेणी: उपयोगिता सॉफ्टवेयर प्रकार]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages using div col with small parameter]]
[[Category:Pages with empty portal template]]
[[Category:Pages with reference errors]]
[[Category:Pages with script errors]]
[[Category:Portal templates with redlinked portals]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates using TemplateData]]
[[Category:Templates using under-protected Lua modules]]
[[Category:Use dmy dates from January 2020]]
[[Category:Wikipedia articles needing clarification from March 2020]]
[[Category:Wikipedia fully protected templates|Div col]]
[[Category:Wikipedia metatemplates]]

Latest revision as of 17:17, 12 September 2023

लिंक करने की प्रक्रिया का एक उदाहरण। ऑब्जेक्ट फाइल्स और स्थिर पुस्तकालय को एक नई लाइब्रेरी या निष्पादन में असेंबल किया जाता है।

कम्प्यूटिंग में, एक लिंकर या लिंक संपादक एक कंप्यूटर सिस्टम सॉफ्टवेयर है जो एक या एक से अधिक ऑब्जेक्ट फ़ाइल (संकलक या असेंबलर (कंप्यूटिंग) द्वारा उत्पन्न) लेता है और उन्हें एक निष्पादन योग्य फ़ाइल, पुस्तकालय (कम्प्यूटिंग) फ़ाइल, या अन्य ऑब्जेक्ट फ़ाइल में जोड़ता है। एक सरल संस्करण जो अपने इनपुट/आउटपुट को सीधे मेमोरी में लिखता है, उसे लोडर कहा जाता है, यद्यपि लोडर (कंप्यूटिंग) को अधिकतर एक अलग प्रक्रिया माना जाता है।[1][2]

अवलोकन

कंप्यूटर प्रोग्राम अधिकतर कई भागों या मॉड्यूल से बने होते हैं, इन भागों/मॉड्यूल को एक ऑब्जेक्ट फ़ाइल के भीतर समाहित करने की आवश्यकता नहीं है और ऐसे विषयों में डिबग प्रतीक के माध्यम से एक दूसरे मॉड्यूल में पतों के रूप में एक दूसरे को संदर्भित करते हैं, जो निष्पादन के लिए लिंक किए जाने पर मेमोरी पतों में मैप किए जाते हैं।

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

बहुधा, एक ऑब्जेक्ट फ़ाइल में तीन प्रकार के प्रतीक हो सकते हैं:

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

कंपाइलरों के लिए, प्रत्येक ऑब्जेक्ट फ़ाइल एक इनपुट स्रोत कोड फ़ाइल को संकलित करने का परिणाम है। जब एक प्रोग्राम में कई अधिकांश ऑब्जेक्ट फ़ाइल होती हैं, तो प्रतीकों को हल करने के साथ-साथ, लिंकर इन फ़ाइलों को एक एकीकृत निष्पादन योग्य प्रोग्राम में जोड़ता है।

लिंकर्स, लाइब्रेरी (कंप्यूटिंग) या क्रम पुस्तकालय नामक संग्रह से ऑब्जेक्ट ले सकते हैं। अधिकांश लिंकर्स आउटपुट में पूरी लाइब्रेरी को सम्मिलित नहीं करते हैं, उनमें केवल फाइलें सम्मिलित होती है[clarification needed] जो अन्य ऑब्जेक्ट फाइलों या पुस्तकालयों द्वारा संदर्भित हैं। लाइब्रेरी लिंकिंग इस प्रकार एक पुनरावृत्त प्रक्रिया हो सकती है, जिसमें कुछ संदर्भित मॉड्यूल को जोड़ने के लिए अतिरिक्त मॉड्यूल की आवश्यकता होती है, और इसी तरह पुस्तकालय विविध उद्देश्यों के लिए निहित हैं, और एक या एक से अधिक पुस्तकालय प्रणाली बहुधा डिफ़ॉल्ट रूप में जुड़े होते हैं।

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

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

सिंट्रान III जैसे कुछ यूनिक्स प्रकारों पर, एक लिंकर (ऑब्जेक्ट फ़ाइलों को एक प्रोग्राम में असेंबल करना) द्वारा की जाने वाली प्रक्रिया को लोडर (कंप्यूटिंग) कहा जाता था (जैसा कि फ़ाइल पर निष्पादन योग्य कोड लोड करने में होता है)।[3]इसके अतिरिक्त, कुछ ऑपरेटिंग सिस्टम में, एक ही प्रोग्राम एक प्रोग्राम (गतिशील जुड़ाव) को जोड़ने और लोड करने के दोनों कार्यों को नियंत्रण करता है।

डायनेमिक लिंकिंग

कई ऑपरेटिंग सिस्टम वातावरण डायनेमिक लिंकिंग की अनुमति देते हैं, और कुछ अपरिभाषित प्रतीकों के संकल्प को तब तक रोकते हैं जब तक कि कोई प्रोग्राम नहीं चलाया जाता है। इसका अर्थ है कि निष्पादन योग्य कोड में अभी भी अपरिभाषित प्रतीक हैं, साथ ही ऑब्जेक्टओं या पुस्तकालयों की एक सूची है जो इनके लिए परिभाषा प्रदान करेगी। प्रोग्राम को लोड करने से ये ऑब्जेक्ट/लाइब्रेरी भी लोड होंगे, और अंतिम लिंकिंग निष्पादित करेंगे।

यह दृष्टिकोण दो लाभ प्रदान करता है:

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

इसकी हानिया भी हैं:

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

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

स्टेटिक लिंकिंग

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

स्थान परिवर्तन

चूंकि कंपाइलर के पास अंतिम आउटपुट में ऑब्जेक्ट्स के विन्यास के बारे में कोई जानकारी नहीं है, अतः यह छोटे या अधिक कुशल निर्देशों का लाभ नहीं उठा सकता है जो किसी अन्य ऑब्जेक्ट के पते पर आवश्यकता रखता है। उदाहरण के लिए, एक जंप निर्देश एक पूर्ण पते या वर्तमान स्थान से कमी को पूरी करना का संदर्भ दे सकता है, और इस कमी को लक्ष्य की दूरी के आधार पर अलग-अलग लंबाई के साथ व्यक्त किया जा सकता है। सबसे पहले रूढ़िवादी निर्देश (बहुधा प्लेटफॉर्म के आधार पर सबसे बड़ा सापेक्ष या पूर्ण संस्करण) उत्पन्न करके और विश्राम संकेत जोड़कर, अंतिम लिंक के समय छोटे या अधिक कुशल निर्देशों को प्रतिस्थापित करना संभव है। जंप अनुकूलतम के संबंध में इसे स्वचालित जंप-साइज़िंग भी कहा जाता है।[4] यह चरण केवल सभी इनपुट ऑब्जेक्ट्स को पढ़ने और अस्थायी पते नियुक्त करने के पश्चात ही किया जा सकता है, लिंकर छूट पास बाद में पतों को पुन: नियुक्त करता है, जो बदले में अधिक संभावित छूट देने की अनुमति दे सकता है। सामान्यतः प्रतिस्थापित अनुक्रम छोटे होते हैं, जो इस प्रक्रिया को ऑब्जेक्टओं के एक निश्चित क्रम को देखते हुए सदैव सर्वोत्तम समाधान पर अभिसरण करने की अनुमति देता है, यदि ऐसा नहीं होता है, तो छूट संघर्ष कर सकती हैं, और तब लिंकर को किसी भी विकल्प के लाभों को जांचना होगा।

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

लिंकेज संपादक

आईबीएम सिस्टम/360 मेनफ़्रेम कंप्यूटर वातावरण में, जैसे कि ओएस/360, z/आर्किटेक्चर मेनफ्रेम के लिए z/ओएस सहित, इस प्रकार के प्रोग्राम को लिंकेज संपादक के रूप में जाना जाता है। जैसा कि नाम से पता चलता है कि एक लिंकेज संपादक में अलग-अलग प्रोग्राम के अनुभागों को जोड़ने, बदलने या हटाने की अनुमति देने की अतिरिक्त क्षमता होती है। OS/360 जैसे ऑपरेटिंग सिस्टम में निष्पादन योग्य लोड-मॉड्यूल के लिए प्रारूप होता है जिसमें प्रोग्राम के घटक अनुभागों के बारे में पूरक डेटा होता है, जिससे कि एक व्यक्तिगत प्रोग्राम अनुभाग को बदला जा सके, और प्रोग्राम के अन्य भागों को अपडेट किया जा सके , जिससे कि स्थानांतरित करने योग्य पते और अन्य संदर्भों को प्राप्त किया जा सके और प्रक्रिया के भाग के रूप में अन्य संदर्भों को लिंकेज संपादक द्वारा ठीक किया जा सकता है।।

इसका एक लाभ यह है कि यह सभी मध्यवर्ती फाइलों को रखे बिना, या बदले हुए प्रोग्राम अनुभागों को फिर से संकलित किए बिना एक प्रोग्राम को बनाए रखने की अनुमति देता है। यह प्रोग्राम अपडेट को छोटी फाइलों (मूल रूप से कार्ड डेक (कंप्यूटिंग) एस) के रूप में वितरित करने की अनुमति देता है, जिसमें केवल ऑब्जेक्ट मॉड्यूल को प्रतिस्थापित किया जाता है। ऐसी प्रणालियों में, ऑब्जेक्ट कोड 80-बाइट पंच-कार्ड छवियों के रूप और प्रारूप में होता है, जिससे कि उस माध्यम का उपयोग करके सिस्टम में अपडेट समक्ष किए जा सकें। ओएस/360 के बाद के रिलीज और बाद के सिस्टम में, अद्यतनों का पता लगाने के योग्य रिकॉर्ड बनाने के लिए, लोड-मॉड्यूल में घटक मॉड्यूल के संस्करणों के बारे में अतिरिक्त डेटा होता है। यह पहले से लिंक किए गए लोड मॉड्यूल से एक ओवरले (प्रोग्रामिंग) संरचना को जोड़ने, बदलने या हटाने की भी अनुमति देता है।

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

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

सामान्य कार्यान्वयन

यूनिक्स और यूनिक्स जैसी प्रणालियों पर, लिंकर को एलडी के रूप में जाना जाता है। एलडी नाम की उत्पत्ति लोडर और लिंक संपादक हैं। लिंकिंग की प्रक्रिया के समय अन्य कार्यक्रमों से बाहरी प्रतीकों को लोड करने की प्रक्रिया का वर्णन करने के लिए लोडर शब्द का उपयोग किया गया था।[5]

जीएनयू लिंकर

जीएनयू लिंकर (या जीएनयू एलडी) यूनिक्स कमांड एलडी का जीएनयू परियोजना के मुफ्त सॉफ्टवेयर का कार्यान्वयन है। जीएनयू एलडी लिंकर को चलाता है, जो एक सॉफ्टवेयर प्रोजेक्ट के संकलन के समय बनाई गई ऑब्जेक्ट फाइलों से निष्पादन योग्य फ़ाइल (या लाइब्रेरी) को बनाता है। लिंकिंग प्रक्रिया पर अधिक नियंत्रण रखने के लिए एक लिंकर स्क्रिप्ट जीएनयू एलडी को पास की जा सकती है। [6] जीएनयू लिंकर जीएनयू बाइनरी यूटिलिटीज (बिनुटिल्स) का भाग है। बिनुटिल्स में एलडी के दो संस्करण प्रदान किए गए हैं जिसमे एक पारंपरिक जीएनयू एलडी जो की बाइनरी फाइल डिस्क्रिप्टर लाइब्रेरी पर आधारित है, और दुसरा सुव्यवस्थित ईएलएफ-ओनली संस्करण जिसे सोना (लिंकर) कहा जाता है।

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

यह भी देखें


संदर्भ

  1. आईबीएम ओएस लिंकेज संपादक और लोडर (PDF). आईबीएम कॉर्पोरेशन. 1972. Archived (PDF) from the original on 2020-03-06. Retrieved 2020-03-07.
  2. 2.0 2.1 Barron, David William (1978) [1971, 1969]. "5.7. Linkage editors and consolidators". Written at University of Southampton, Southampton, UK. In Floretin, J. John (ed.). असेंबलर और लोडर. कंप्यूटर मोनोग्राफ (3 ed.). New York, USA: Elsevier North-Holland Inc. pp. 65–66. ISBN 0-444-19462-2. LCCN 78-19961. (xii+100 pages)
  3. बीआरएफ-लिंकर उपयोगकर्ता मैनुअल. August 1984. ND-60.196.01.
  4. Salomon, David (February 1993) [1992]. "8.2.3 Automatic jump-sizing" (PDF). Written at California State University, Northridge, California, USA. In Chivers, Ian D. (ed.). असेंबलर और लोडर. कंप्यूटर और उनके अनुप्रयोगों में एलिस होरवुड श्रृंखला (1 ed.). चिसेस्टर, वेस्ट ससेक्स, यूके: Ellis Horwood Limited / Simon & Schuster International Group. pp. 237–238. ISBN 0-13-052564-2. Archived (PDF) from the original on 2020-03-23. Retrieved 2008-10-01. (xiv+294+4 pages)
  5. "1. ld". यूनिक्स प्रोग्रामर मैनुअल (6 ed.). May 1975.
  6. "जीएनयू बिनुटिल्स: लिंकर स्क्रिप्ट्स". 2018-07-18. Archived from the original on 2020-03-06. Retrieved 2019-01-18.

आगे की पढाई

बाहरी कड़ियाँ