Avatar ·

كيف تعمل عملية الترجمة والربط في C++؟

مرحباً بالجميع! لقد بدأت تعلم C++ منذ فترة ليست طويلة، وأصبحت مرتبكاً بشأن ما يحدث بعد أن أضغط على زر "Build" أو أقوم بتشغيل g++ في الطرفية. لقد كتبت برنامجاً بسيطاً من ملفين: `main.cpp` و `utils.cpp`. في `utils.cpp` لدي دالة `void sayHello()` تطبع "Hello!" في وحدة التحكم. في `main.cpp` أعلنت هذه الدالة كدالة خارجية (`extern void sayHello();`) واستدعيتها. عندما أترجم هذا الأمر باستخدام `g++ main.cpp utils.cpp -o program`، كل شيء يعمل. لكنني لا أفهم ما الذي يفعله المترجم بالضبط، وما الذي يفعله الرابط. لماذا، إذا أخطأت في كتابة إعلان الدالة (على سبيل المثال، كتبت `sayHelllo`)، سأحصل على خطأ في مرحلة الربط، وليس في مرحلة الترجمة؟ ومن أين تأتي ملفات .o التي تظهر أحياناً في مجلد المشروع؟ ما يربكني بشكل خاص هو