Avatar ·

Comment fonctionne le processus de compilation et d'édition de liens en C++ ?

Bonjour à tous ! J'ai commencé à étudier le C++ il n'y a pas longtemps, et je suis confus quant à ce qui se passe après avoir cliqué sur le bouton "Build" ou lancé g++ dans le terminal. J'ai écrit un programme simple composé de deux fichiers : `main.cpp` et `utils.cpp`. Dans `utils.cpp`, j'ai une fonction `void sayHello()` qui affiche "Hello!" dans la console. Dans `main.cpp`, je déclare cette fonction comme externe (`extern void sayHello();`) et je l'appelle. Quand je compile cela avec la commande `g++ main.cpp utils.cpp -o program`, tout fonctionne. Mais je ne comprends pas ce que fait exactement le compilateur, et ce que fait l'éditeur de liens. Pourquoi, si je fais une faute de frappe dans la déclaration de la fonction (par exemple, j'écris `sayHelllo`), obtiendrai-je une erreur à l'étape d'édition de liens, et non à la compilation ? Et d'où viennent les fichiers .o qui apparaissent parfois dans le dossier du projet ? Ce qui me trouble particulièrement, c'est que dans certains IDE, je vois des étapes séparées : "Compiling main.cpp...", "Compiling utils.cpp...", puis "Linking...". Pourquoi tant d'étapes sont-elles nécessaires ? Pourquoi ne pas tout faire en une seule fois ? Je serais reconnaissant