Table of Contents
compilation क्या है?
संकलन स्रोत कोड को ऑब्जेक्ट कोड में बदलने की एक प्रक्रिया है। यह कंपाइलर की मदद से किया जाता है। संकलक वाक्य-रचना या संरचनात्मक त्रुटियों के लिए स्रोत कोड की जाँच करता है, और यदि स्रोत कोड त्रुटि-मुक्त है, तो यह ऑब्जेक्ट कोड उत्पन्न करता है।
सी compilation प्रक्रिया वस्तु कोड या मशीन कोड में इनपुट के रूप में लिए गए स्रोत कोड को परिवर्तित करती है। संकलन प्रक्रिया को चार चरणों में विभाजित किया जा सकता है, अर्थात्, Pre-processing, Compiling, Assembling और Linking।
प्रीप्रोसेसर स्रोत कोड को इनपुट के रूप में लेता है, और यह स्रोत कोड से सभी टिप्पणियों को हटा देता है। प्रीप्रोसेसर प्रीप्रोसेसर निर्देश लेता है और उसकी व्याख्या करता है। उदाहरण के लिए, यदि , निर्देश कार्यक्रम में उपलब्ध है, तो प्रीप्रोसेसर निर्देश की व्याख्या करता है और इस निर्देश को ‘stdio.h’ फ़ाइल की सामग्री से प्रतिस्थापित करता है।
निम्नलिखित चरण हैं जिनके माध्यम से हमारा कार्यक्रम एक निष्पादन योग्य रूप में परिवर्तित होने से पहले गुजरता है:
Preprocessor
Compiler
Assembler
Linker
Preprocessor
सोर्स कोड वह कोड होता है जो टेक्स्ट एडिटर में लिखा होता है और सोर्स कोड फाइल को “.c” एक्सटेंशन दिया जाता है। यह स्रोत कोड पहले प्रीप्रोसेसर को दिया जाता है, और फिर प्रीप्रोसेसर इस कोड को विस्तारित करता है। कोड का विस्तार करने के बाद, विस्तारित कोड कंपाइलर को पास किया जाता है।
Compiler
प्रीप्रोसेसर द्वारा विस्तारित कोड को कंपाइलर को पास किया जाता है। कंपाइलर इस कोड को असेंबली कोड में परिवर्तित करता है। या हम कह सकते हैं कि सी कंपाइलर प्री-प्रोसेस्ड कोड को असेंबली कोड में बदल देता है।
Assembler
असेंबली का उपयोग करके असेंबली कोड को ऑब्जेक्ट कोड में बदल दिया जाता है। कोडांतरक द्वारा उत्पन्न ऑब्जेक्ट फ़ाइल का नाम स्रोत फ़ाइल के समान है। डॉस में ऑब्जेक्ट फ़ाइल का विस्तार ‘.obj,’ है और UNIX में, एक्सटेंशन ‘ओ’ है। यदि स्रोत फ़ाइल का नाम ‘hello.c’ है, तो ऑब्जेक्ट फ़ाइल का नाम ‘hello.obj’ होगा।
Linker
मुख्य रूप से, C में लिखे गए सभी प्रोग्राम पुस्तकालय कार्यों का उपयोग करते हैं। ये लाइब्रेरी फ़ंक्शंस पूर्व-संकलित हैं, और इन लाइब्रेरी फ़ाइलों का ऑब्जेक्ट कोड ‘.lib’ (या ‘.a) एक्सटेंशन के साथ संग्रहीत किया जाता है। लिंकर का मुख्य कार्य हमारे प्रोग्राम के ऑब्जेक्ट कोड के साथ लाइब्रेरी फ़ाइलों के ऑब्जेक्ट कोड को संयोजित करना है। कभी-कभी स्थिति तब उत्पन्न होती है जब हमारा कार्यक्रम अन्य फाइलों में परिभाषित कार्यों को संदर्भित करता है; तब लिंकर इसमें बहुत महत्वपूर्ण भूमिका निभाता है। यह इन फाइलों के ऑब्जेक्ट कोड को हमारे प्रोग्राम से जोड़ता है। इसलिए, हम यह निष्कर्ष निकालते हैं कि लिंकर का काम हमारे प्रोग्राम के ऑब्जेक्ट कोड को लाइब्रेरी फ़ाइलों और अन्य फ़ाइलों के ऑब्जेक्ट कोड के साथ जोड़ना है। लिंकर का आउटपुट निष्पादन योग्य फ़ाइल है। निष्पादन योग्य फ़ाइल का नाम स्रोत फ़ाइल के समान है, लेकिन केवल उनके एक्सटेंशन में भिन्न है। DOS में, निष्पादन योग्य फ़ाइल का विस्तार ‘.exe’ है, और UNIX में, निष्पादन योग्य फ़ाइल को ‘a.out’ नाम दिया जा सकता है। उदाहरण के लिए, यदि हम किसी प्रोग्राम में प्रिंटफ () फ़ंक्शन का उपयोग कर रहे हैं, तो लिंकर आउटपुट फाइल में अपना संबद्ध कोड जोड़ता है।
आइए एक उदाहरण के माध्यम से समझते हैं।
- #include <stdio.h>
- int main()
- {
- printf(“Hello javaTpoint”);
- return 0;
- }
अब, हम उपरोक्त कार्यक्रम का एक प्रवाह आरेख बनाएंगे:

उपरोक्त प्रवाह आरेख में, किसी कार्यक्रम को निष्पादित करने के लिए निम्नलिखित कदम उठाए जाते हैं:
सबसे पहले, इनपुट फ़ाइल, अर्थात्, hello.c, प्रीप्रोसेसर को पास की जाती है, और प्रीप्रोसेसर स्रोत कोड को विस्तारित स्रोत कोड में परिवर्तित करता है। विस्तारित स्रोत कोड का विस्तार hello.i होगा।
विस्तारित स्रोत कोड कंपाइलर को दिया जाता है, और कंपाइलर इस विस्तारित स्रोत कोड को असेंबली कोड में परिवर्तित करता है। असेंबली कोड का विस्तार hello.s होगा।
यह असेंबली कोड असेंबलर को भेजा जाता है, जो असेंबली कोड को ऑब्जेक्ट कोड में परिवर्तित करता है।
ऑब्जेक्ट कोड के निर्माण के बाद, लिंकर निष्पादन योग्य फ़ाइल बनाता है। लोडर निष्पादन के लिए निष्पादन योग्य फ़ाइल को लोड करेगा।