Problème
Erreur pendant la compilation d’un projet avec le compilateur XC32 de Microchip :
c:/microchip/xc32/v1.40/bin/bin/../../lib/gcc/pic32mx/4.8.3/../../../../pic32mx/lib\libc.a(stdclean_simple.o):(.bss+0x0): first defined here
Explication
C’est un bug de la version 1.40 du compilateur XC32. Le problème est lié à la fonction exit() et à certaines fonctions de la bibliothèque standard stdio.
Solution
Pour corriger le bug, il va falloir modifier le fichier libc.a fournit avec XC32. Mais, comme ce compilateur est livré avec plusieurs fichiers libc.a, il faut trouver le bon. Pour ce faire, il suffit d’analyser le chemin donné dans le message d’erreur.
Identification le bon fichier libc.a
Dans l’exemple décrit précédemment :
Simplifions le chemin vers le fichier libc.a en supprimant successivement les chemins relatifs :
Une dernière itération et voici le chemin du fichier fautif :
Nous pouvons maintenant appliquer un correctif à ce fichier.
Application le correctif
/!\ Avant toute chose, faite une copie de ce fichier dans son dossier d’origine.
Ensuite, copiez le fichier libc.a dans un dossier temporaire. Par exemple D:\temp
Ouvrir une Invite de commandes avec Windows et se placer dans le dossier temporaire :
Puis exécutez successivement les commandes suivantes :
Voici la méthode en image :
Replacez le fichier libc.a modifié dans son dossier d’origine.
Conclusion
Vous pouvez maintenant compiler à nouveau votre projet, le message d’erreur ne doit plus apparaitre.
La solution décrite dans ce billet est inspirée par une discussion du forum officiel de Microchip :
Bug in XC32 standard libraries? (stdclean_full.o and stdclean_simple.o both linking)
Ce problème sera sans doute corrigé avec la prochaine version du compilateur XC32.