C प्रोग्राम सोर्स कोड से एक्जीक्यूटेबल बनने तक चार मुख्य चरणों से गुजरता है।
कंपाइलेशन पाइपलाइन
Source Code (.c)
│
▼
Preprocessor (cpp) → Expanded Source (.i)
│
▼
Compiler (cc1) → Assembly (.s)
│
▼
Assembler (as) → Object Code (.o / .obj)
│
▼
Linker (ld) → Executable (a.out / .exe)
│
▼
Loader → Process in RAM
विस्तृत चरण
1. प्रीप्रोसेसिंग (Preprocessing)
- इनपुट:
.cफाइल - आउटपुट:
.i(एक्सपैंडेड सोर्स) - कार्य:
#includeफाइल्स इन्सर्ट,#defineमैक्रोज़ एक्सपैंड,#ifकंडीशनल कंपाइलेशन, कमेंट्स हटाना। - कमांड:
gcc -E file.c -o file.i
2. कंपाइलेशन (Compilation)
- इनपुट:
.i - आउटपुट:
.s(असेंबली कोड) - कार्य: सिंटैक्स चेक, सेमेंटिक एनालिसिस, इंटरमीडिएट रिप्रेजेंटेशन, असेंबली जनरेशन।
- कमांड:
gcc -S file.i -o file.s
3. असेंबली (Assembly)
- इनपुट:
.s - आउटपुट:
.o/.obj(ऑब्जेक्ट फाइल, मशीन कोड) - कार्य: असेंबली निर्देशों को बाइनरी मशीन कोड में अनुवाद, सिंबल टेबल बनाना।
- कमांड:
gcc -c file.s -o file.o
4. लिंकिंग (Linking)
- इनपुट: एक या अधिक
.oफाइल्स + लाइब्रेरीज - आउटपुट: एक्जीक्यूटेबल (
a.out,.exe) - कार्य: सिंबल रिजॉल्यूशन (फंक्शन/वेरिएबल रेफरेंसेस), एड्रेस बाइंडिंग, लाइब्रेरी कोड जोड़ना (स्टेटिक/डायनामिक)।
- कमांड:
gcc file.o -o program
5. लोडिंग (Loading) - OS द्वारा
- एक्जीक्यूटेबल को रैम में लोड करता है।
- डायनामिक लाइब्रेरीज लोड करता है।
- स्टैक/हीप सेटअप,
mainपर कंट्रोल ट्रांसफर।
एक कमांड में
gcc program.c -o program # सभी चरण स्वचालित
मेमोरी लेआउट (रनटाइम)
देखें लेख: "Memory Layout of C Programs" (ID: 1005077201)।