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