كيف تعمل عملية التجميع والربط في 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 التي تظهر أحياناً في مجلد المشروع؟
ما يربكني بشكل خاص هو