Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Erreur de compilation SDK
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Erreur de compilation SDK

Posté le 20/02/2021 12:31

Hello !!

Voici l'erreur :
Le SDK Casio a écrit :
Initializer should be constant


Cette erreur apparaît quand je déclare un tableau de pointeurs tout juste recopié du Sprite Coder :
1    const unsigned char Bibliotheques[]={0xff, 0xff, etc... };
2    const unsigned char Graphismes[]={0xff, 0xff, etc... };
3    const unsigned char LogoPlaneteCasio[]={0xff, 0xff, etc... };
4    const unsigned char Realisation[]={0xff, 0xff, etc};
5    const unsigned char Site[]={0x0, 0x0, etc... };
6
7    const unsigned char* ImagesCredits[]={Realisation, Graphismes, Bibliotheques, Site, LogoPlaneteCasio};


L'erreur apparaît à la ligne 7... Quelqu'un saurait-il résoudre cette erreur ? J'ai essayé diverses modif', mais rien ne marche...
Merci d'avance !


Lephenixnoir Hors ligne Administrateur Points: 22874 Défis: 149 Message

Citer : Posté le 20/02/2021 13:59 | #


Oui c'est un peu chiant ça, le compilateur et/ou le linker n'est pas très fort (ce SDK est assez vieux) donc il arrive pas à initialiser ImageCredits.

La raison, si tu veux, c'est que le compilateur doit produire dans le résultat de la compilation les octets qui serviront de valeur initiale à ImageCredits, et ces octets ce sont 4 octets contenant l'adresse de Realisation, 4 contenant l'adresse de Graphismes, etc. En gros il n'arrive pas à déterminer durant la compilation l'adresse qu'auront ces variables une fois le programme lancé.

C'est "normal" dans le sens où l'adresse n'est choisie que par le linker (une fois que tous les fichiers sont compilés), donc la valeur n'existe pas à ce stade. Si tu utilisais GCC pour compiler, il y arriverait, mais ne produirait pas les octets exacts, simplement une petite note pour que le linker insère la valeur au bon endroit après avoir choisi l'adresse. Visiblement les outils du SDK ne savent pas faire ça.

Peut-être que spécifier &Realisation, &Graphismes, etc pourrait aider, mais je ne suis pas sûr. Si ça ne marche pas, tu seras condamné à initialiser ton tableau toi-même :

int AddIn_main(...) {
    ImagesCredits[0] = Realisation;
    ImagesCredits[1] = Graphismes;
}

Il se peut aussi qu'il y ait une façon "propre" de le faire avec le SDK et que je l'aie simplement oubliée avec le temps. Tu pourrais regarder dans des vieux programmes pour voir si ça se faisait autrement.
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 20/02/2021 14:42 | #


Non, spécifier &Realisation ne fonctionne pas non plus...
Donc je l'ai initialisé "à la main" : ça compile et ça fonctionne sans problème
Merci Lephé !

Tu aurais une idée de quelques vieux programmes spécifiques ? que je fouille pas tous les add-ins de Planète Casio...
Lephenixnoir Hors ligne Administrateur Points: 22874 Défis: 149 Message

Citer : Posté le 20/02/2021 15:38 | #


J'ai regardé Gravity Duck mais il fait un truc très douteux où les données sont déclarées dans les fonctions mais non-static donc il y a un risque de copie. Tu peux voir dans les add-ins de Darks éventuellement.
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 20/02/2021 15:47 | #


Ok ! Merci !!

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2023 | Il y a 40 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd