একটি C++ প্রোগ্রামের কম্পাইলেশন তিন ধাপে সম্পন্ন হয়:
- প্রিপ্রসেসিং − সহজ ভাষায়, একটি C প্রিপ্রসেসর শুধু একটি টেক্সট সাবস্টিটিউশন টুল এবং এটি কম্পাইলারকে আসল কম্পাইলেশনের আগে প্রয়োজনীয় প্রিপ্রসেসিং করার নির্দেশ দেয়। এটি #include, #define ইত্যাদি প্রিপ্রসেসিং ডিরেক্টিভ হ্যান্ডেল করে।
- কম্পাইলেশন − কম্পাইলেশন প্রিপ্রসেসড ফাইলগুলোর ওপর সম্পন্ন হয়। কম্পাইলার পিউর C++ সোর্স কোড পার্স করে এবং এটিকে অ্যাসেম্বলি কোডে রূপান্তর করে। এটা আবার অ্যাসেম্বলারকে কল করে যা অ্যাসেম্বলি কোডকে মেশিন কোড (বাইনারি) এ রূপান্তর করে অবজেক্ট ফাইল হিসেবে। এই অবজেক্ট ফাইলগুলো এমন সিম্বলে রেফার করতে পারে যা ডিফাইন করা নেই। কম্পাইলার এরর দেবে না যদি না সোর্স কোড ভালো ফর্মড না হয়। সিনট্যাক্স এরর, ফেইলড ওভারলোড রেজোলিউশন এরর ইত্যাদি এই ধাপে হয়। এছাড়া এই অবজেক্ট ফাইলগুলো স্ট্যাটিক লাইব্রেরি হিসাবেও ব্যবহার করা যায়।
- লিংকিং − লিংকার কম্পাইলার তৈরি করা অবজেক্ট ফাইল থেকে ফাইনাল কম্পাইলেশন আউটপুট তৈরি করে। এই আউটপুট হতে পারে শেয়ার্ড (অথবা ডাইনামিক) লাইব্রেরি বা এক্সিকিউটেবল। এটি অবজেক্ট ফাইলগুলো লিংক করে অনডিফাইনড রেফারেন্সগুলো সঠিক অ্যাড্রেস দিয়ে রিপ্লেস করে। এই সিম্বলগুলো অন্য অবজেক্ট ফাইল বা লাইব্রেরিতে ডিফাইন থাকতে পারে। যদি সেগুলো স্ট্যান্ডার্ড লাইব্রেরি ছাড়া অন্য লাইব্রেরিতে ডিফাইন থাকে, তবে আপনাকে সেগুলো কম্পাইলারকে আর্গুমেন্ট হিসেবে স্পষ্টভাবে পাস করতে হবে যাতে সেগুলো খুঁজে পাওয়া যায় এবং লিংক করা যায়।