¿Cómo funciona el proceso de compilación y linking en C++?
¡Hola a todos! Empecé a estudiar C++ no hace mucho, y tengo confusión sobre lo que sucede después de que presiono el botón "Build" o ejecuto g++ en la terminal.
Escribí un programa simple de dos archivos: `main.cpp` y `utils.cpp`. En `utils.cpp` tengo una función `void sayHello()`, que imprime "Hello!" en la consola. En `main.cpp` declaro esta función como externa (`extern void sayHello();`) y la llamo.
Cuando compilo esto con el comando `g++ main.cpp utils.cpp -o program`, todo funciona. Pero no entiendo qué hace exactamente el compilador y qué hace el linker. ¿Por qué, si cometo un error tipográfico en la declaración de la función (por ejemplo, escribo `sayHelllo`), obtengo un error en la etapa de linking y no en la compilación? ¿Y de dónde vienen los archivos .o que a veces aparecen en la carpeta del proyecto?
Me confunde especialmente que en algunos IDE veo pasos separados: "Compiling main.cpp...", "Compiling utils.cpp...", y luego "Linking...". ¿Por qué se necesitan tantos pasos? ¿Por qué no se puede hacer todo de una vez? Agradecería