C++ प्रोग्राम का कंपाइलेशन तीन चरणों में होता है:
- प्रीप्रोसेसिंग − सरल शब्दों में, एक C प्रीप्रोसेसर सिर्फ एक टेक्स्ट सब्स्टीट्यूशन टूल है और यह कंपाइलर को वास्तविक कंपाइलेशन से पहले आवश्यक प्री-प्रोसेसिंग करने का निर्देश देता है। यह #include, #define आदि जैसे प्रीप्रोसेसिंग डायरेक्टिव्स को संभालता है।
- कंपाइलेशन − कंपाइलेशन प्रीप्रोसेस्ड फ़ाइल्स पर होता है। कंपाइलर प्योर C++ सोर्स कोड को पार्स करता है और इसे असेंबली कोड में बदल देता है। यह बदले में असेंबलर को कॉल करता है जो असेंबली कोड को मशीन कोड (बाइनरी) में ऑब्जेक्ट फ़ाइल्स के रूप में बदल देता है। ये ऑब्जेक्ट फ़ाइल्स उन सिंबल्स को संदर्भित कर सकती हैं जो परिभाषित नहीं हैं। कंपाइलर तब तक त्रुटि नहीं देगा जब तक सोर्स कोड वेल-फॉर्म्ड न हो। सिंटैक्स एरर्स, फेल्ड ओवरलोड रिज़ॉल्यूशन एरर्स आदि इस चरण में होते हैं। ध्यान दें कि ये ऑब्जेक्ट फ़ाइल्स स्टेटिक लाइब्रेरी के रूप में भी उपयोग की जा सकती हैं।
- लिंकिंग − लिंकर कंपाइलर द्वारा उत्पन्न ऑब्जेक्ट फ़ाइल्स से अंतिम कंपाइलेशन आउटपुट उत्पन्न करता है। यह आउटपुट एक शेयर्ड (या डायनामिक) लाइब्रेरी या एक एक्जीक्यूटेबल हो सकता है। यह ऑब्जेक्ट फ़ाइल्स को अनडिफाइंड रेफरेंस को सही पतों से बदलकर लिंक करता है। ये सिंबल्स अन्य ऑब्जेक्ट फ़ाइल्स में या लाइब्रेरीज़ में परिभाषित होने चाहिए। यदि वे स्टैंडर्ड लाइब्रेरी के अलावा अन्य लाइब्रेरीज़ में परिभाषित हैं, तो आपको उन्हें कंपाइलर को आर्गुमेंट के रूप में स्पष्ट रूप से पास करना होगा ताकि वे मिल सकें और लिंक हो सकें।