[Aide SDK] Les erreurs de compilation
Posté le 15/05/2011 00:10
Suite aux nombreuses demande d'aide que je reçois concernant des messages d'erreur lors de compilation avec le SDK, je décide de créer ce topic qui aura pour but de recenser tous les messages d'erreur, de les expliquer, et de donner leur solution.
Premièrement, qu'est ce qu'une erreur de compilation ?
Ici, ce sont les 4 lignes qui commencent par le chemin de mon fichier source contenant les erreurs (Z:\home\pierre\a\a.c) suivi du numéro de la ligne contenant l'erreur.
Liste des erreurs
Illegal token ''<mot>''
Description : Une erreur de syntaxe a été rencontrée
avant <mot> (un point virgule manquant, une parenthèse en trop ...)
Solution : Arrêter de coder avec les pieds.
Undeclared name ''<nom>''
Description : Une variable est utilisée sans avoir été déclarée au préalable.
Solution : Déclarer la variable au début de la fonction.
Cannot convert parameter ''X''
Description : Le paramètre n°X envoyé à la fonction n'est pas du bon type, et ne peut pas être converti.
Solution : Vérifier quel type de variable demande la fonction, et lui envoyer une variable du bon type.
Illegal initializer type
Description : Une variable est initialisée avec un type incorrecte (exemple, un entier initialisé avec une chaîne de caractère)
Solution : Initialiser la variable avec une valeur CONSTANTE correcte.
Le compilateur Renesas utilisé par le SDK respecte la norme C89, qui spécifie qu'une variable doit être initialisée avec une valeur constante, et non une valeur de retour de fonction, ou un paramètre de la fonction.
Multiple variable declarations
Description : Une variable a déjà le même nom et la même portée que celle déclarée à la ligne de l'erreur.
(Deux variables peuvent avoir le même nom si elles n'ont pas la même portée)
Solution : Nommer la variable différemment.
Type not compatible for ''=''
Description : L'affectation d'une valeur à une variable a échouée car la valeur n'est pas d'un type compatible avec celui de la variable.
Solution : Si la valeur affectée est un retour de fonction, vérifier quel type de variable retourne la fonction.
Modifiable lvalue required for ''=''
Description : Un élément non modifiable (comme une fonction où une constante) est suivi d'un signe égal.
Solution : Seule les variables peuvent se voir affecter une valeur avec ''=''.
Index not integer
Description : utilisation d'un float ou d'un double dans l'index d'une case de tableau.
Solution : Caster en int, tableau[double] devient tableau[(int)double]
Number of parameters mismatch
Description : Trop ou pas assez de paramètres sont envoyés à la fonction.
Solution : Regarder ce que demande la fonction, et le respecter.
Undefined external symbol ''_<nom de fonction>''
Description : Une fonction est appelée, mais son implémentation n'a pas été compilée.
Solution : Vérifier l'orthographe du nom, vérifier si le fichier contenant la fonction est bien dans la fenêtre ''Files in project''. Si tout ça est bon, essayez d'éditer le fichier contenant l'implémentation de la fonction (ajouter un espace, le supprimer, sauvegarder), ça permettra au compilateur de re-compiler le fichier.
couldn't open ''<nom de fichier>''
Description : Un fichier inclu avec #include n'existe pas.
Solution : Lors de l'inclusion d'un fichier, il faut donner son
chemin relatif depuis le fichier contenant la directive #include
Empty source program
Description : Le fichier source est vide, et aucun compilateur n'aime ça.
Cannot open source file ''<nom de fichier>''
Description : Le fichier source présent dans la fenêtre ''Files in project'' du SDK n'existe pas.
Unrecognized preprocessing directive
Description : Une directive de préprocesseur (lignes commençant pas #) n'est pas correctement orthographiée.
Illegal preprocessor syntax
Description : Erreur de syntaxe dans une directive de préprocesseur.
Expected a file name
Description : Un nom de fichier est attendu (généralement une erreur de syntaxe dans une directive include)
Expected an identifier
Description : Un identifiant est attendu (généralement une erreur de syntaxe dans une directive define ou ifdef)
Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj""
Description : Ne jamais installer le SDK dans un dossier dont le chemin comporte des parenthèses ! Mettez-le dans C:\Programmes\CASIO par exemple.
Cette liste est incomplète, si vous rencontrez d'autres erreurs, vous pouvez les poster ici, elles seront ajoutées.
Voici une liste en anglais de toutes les erreurs possibles et imaginables. Cela ne vous donne pas forcément une bonne solution, mais ça peut vous aiguiller sur une piste
Dernière modification : 26/09/2013 (Dark Storm)
Fichier joint
Citer : Posté le 30/01/2015 23:25 | #
Un conseil : codez toujours en anglais : non seulement ça vous fait pratiquer, mais surtout vous n'avez pas de problèmes avec les accents
Ajouté le 30/01/2015 à 23:27 :
Ah oui : et surtout, ne mélangez jamais deux langues dans le code !
Je le dis parce que certains le font encore. (Ok je l'ai déjà fait, mais c'était y'a plus d'un an ou deux...
Citer : Posté le 06/05/2015 00:06 | #
Bonjour, ça fait pas mal de temps que je passe pas par ici . Bref, j'ai décidé de commencer un nouveau jeu ( j'espère de ne pas l'abandoner celui ci... ) et en compilant j'ai trouvé des erreurs de compilation, mais ce qui me fait poster ici c'est que le compilateur localise les erreurs dans les librairies standard:
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(25) : C2500 (E) Illegal token ";"
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(110) : C2139 (E) No parameter type
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(112) : C2139 (E) No parameter type
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(113) : C2500 (E) Illegal token "size_t"
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(114) : C2500 (E) Illegal token "size_t"
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(115) : C2125 (E) Function returning function
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(115) : C2500 (E) Illegal token ")"
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(116) : C2500 (E) Illegal token "size_t"
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(117) : C2125 (E) Function returning function
C:\CASIO\fx-9860G SDK\OS\SH\include\stdlib.h(117) : C2500 (E) Illegal token ")"
Évidemment je n'ai rien touché à ces fichiers (le SDK ne me laisse quand même pas les modifier). Quelqu'un sait ce qui pourrait se passer?
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 06/05/2015 09:24 | #
Ça m'est déjà arrivé. L'erreur viens sûrement de ton code ( que l'on a pas ) et le SDK localise les erreurs dans les libs standards car il y a sûrement un paramètres que tu passes a cette fonction ou quelque chose comme ça qu'il n'apprécie pas trop.
Citer : Posté le 06/05/2015 11:37 | #
T'as sans doute inclus un truc avec une erreur de syntaxe avant les headers standard.
Citer : Posté le 06/05/2015 13:32 | #
Effectivement il y avait une erreur syntaxe dans un des fichiers inclus avant la librairie standard (le SDK a quand même une façon très bizarre de localiser les erreurs ). Merci beaucoup.
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 06/05/2015 20:41 | #
Ben non, c'est normal. Tous les compilateurs feraient ça, parce que l'erreur ne se propage que dans les fichiers subséquents et ne peut donc pas être détectée tout de suite.
Citer : Posté le 06/05/2015 20:56 | #
Oui, mais tenant compte que l'erreur était un point virgule manquant à un prototype (oui, finalement ce n'était que ça), le compilateur devrait avoir planté à la ligne suivante ou à la fin du fichier, au lieu d'au fichier inclus suivant. Mais bon, je ne sais rien sur la détection d'erreurs par les compilateurs, donc probablement je me trompe
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 06/05/2015 20:59 | #
La gestion des erreurs n'est pas une chose facile. Ça dépend souvent des compilateurs.
Cependant, j'ai déjà eu ce genre de problèmes avec gcc par exemple.
Citer : Posté le 08/05/2015 19:15 | #
Moi non, c'est pour ça que je trouve bizarre. Probablement j'ai eu plus de chance.
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 19/06/2015 11:42 | #
Je crois que cette erreur n'est pas mise dans l'inventaire^^
** L2011 (E) Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj""
sa me mets sa, pourtant j'ai bien mis le fichier avec les autres librairies
Merci d'avance
Citer : Posté le 19/06/2015 11:47 | #
Ne jamais installer le SDK dans un chemin comportant des parenthèses !
Fiouh, on l'a dit des centaines de fois, comment est-ce que vous arrivez encore à le rater... ?
Citer : Posté le 19/06/2015 17:16 | #
Ajouté à la liste.
Citer : Posté le 28/08/2016 11:51 | #
J'ai comme message d'erreur : **L2300 (E) Duplicate symbol "_ML_vram_adress"in"C:\User......\Debug\test.obj
alors que je lance la commande ML_clear_sreen() et ML_clear_vram() de monochromelib (j'ai bien inclus monochromelib en début de programme)
Citer : Posté le 28/08/2016 11:56 | #
Cette erreur signifie que le code de la fonction ML_vram_adress() a été compilé en double ! As-tu bien inclus une seule fois MonochromeLib dans ton projet (Source files), et inclus uniquement l'en-tête ?
// et pas
#include "MonochromeLib.c"
Citer : Posté le 28/08/2016 12:00 | #
J'avais effectivement les deux mais maintenant avec seulement monochromelib.h j'ai undefined external symbol "ML_clear_vram" bon je vais regardé ce qui est au dessus.....
Ajouté le 28/08/2016 à 12:01 :
oups c'est pour "_ML_clear_vram" c'est ce qui est marqué
Citer : Posté le 28/08/2016 12:02 | #
Pour utiliser MonochromeLib, il faut modifier le fichier MonochromeLib.h et décommenter les define associés aux fonctions que tu veux utiliser.
La bibliothèque est assez lourde, ce système est fait pour ne pas avoir à utiliser plus que nécessaire.
Edit : Le '_' devant le nom est normal, ça ne fait aucune différence
Citer : Posté le 28/08/2016 12:04 | #
T'as bien ajouté MonochromeLib.c aux fichiers du projet ?
Citer : Posté le 28/08/2016 12:07 | #
j'ai bien ajouté monochromelib.c au fichier et j'ai décommenter les fonctions qui m'interressent
Citer : Posté le 28/08/2016 12:09 | #
Tiens, c'est curieux. Essaie la recompilation complète (Project > Rebuild All) ?
(La gestion des dépendances du SDK est broken)
Citer : Posté le 28/08/2016 12:09 | #
mais dans mon code j'appelle clear screen avant clear vram mais c'est clear vram qui bug
Ajouté le 28/08/2016 à 12:11 :
quand je rebuil all c'est le même problème mais pour clear screen
Ajouté le 28/08/2016 à 12:12 :
?????? bon au 2eme rebuild all ca a marché je sais pas pourquoi
Ajouté le 28/08/2016 à 12:13 :
Merci !!!! mais qu'es ce que tu voulais dire par "la gestion des dépendances du SDK est broken" ?
Citer : Posté le 28/08/2016 12:14 | #
Normalement quand on modifie un header, il faut tout recompiler. Le SDK ne l'a pas fait parce que le fichier d'en-tête n'a sans doute pas été ajouté dans "Files in project" dans ton projet, mais si tu l'ajoutes il renvoie des erreurs inutiles. D'où la remarque.