Bonjour à tous,
Dans le cadre d'un projet scolaire je dois programmer un petit jeu en ADA.
Il se trouve que j'aimerais faire une interface graphique en SDL.
J'ai donc essayé AdaSDL dispo sur les serveurs de l'ensimag mais elle ne comporte beaucoup de fonctions, c'est pourquoi j'ai décidé d'essayer de faire l'interfaçage en C et Ada moi même.
ALors voila comment je fais, (suivant un cours trouvé sur le net: http://doc.ubuntu-fr.org/sdl)
Je veux appeler du C a partir d'ADa donc je ne crée pas de main() en C sinon erreur de compilation (testée )
Voici mon code C:
Code :
- #include <stdlib.h>
- #include <stdio.h>
- #include <SDL/SDL.h>
- void pause()
- {
- int continuer = 1;
- SDL_Event event;
- while (continuer)
- {
- SDL_WaitEvent(&event);
- switch(event.type)
- {
- case SDL_QUIT:
- continuer = 0;
- }
- }
- }
- int main_c(int argumentc)
- {
- SDL_Init(SDL_INIT_VIDEO);
- SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
- pause();
- SDL_Quit();
- return EXIT_SUCCESS;
- }
|
Et voici le code ada :
Code :
- with ada.text_io, Ada.integer_text_io, Interfaces.C;
- use ada.text_io, Ada.integer_text_io, Interfaces.C;
- procedure essaiADA is
- function appel_c(input: integer) return integer;
- pragma import(C, appel_c, "main_c" );
- result: integer;
- begin
- result:=appel_c(0);
- put(result);
- end essaiADA;
|
Au niveau de la syntaxe normalement il n'y a pas de problèmes ayant testé avec une fonction sans appel de fonctions SDL (est ce bien clair ... : )
Ensuite il faut que je cree le fichier objet du prog en C et que je compile mon .adb avec le .o , voici les lignes de commandes:
Code :
- gcc -g -c codec.c
- gnatmake -gnatf codeada.adb -cargs -g -largs -g codec.o
|
Et bam erreur de compilation, evidemment SDL pose un probleme.
J'ai donc fait un autre essai (avec une ligne piquée sur doc.ubuntu-fr.org/sdl)
Code :
- gcc `sdl-config --cflags --libs` -g -c codec.c
- gnatmake -gnatf codeada.adb -cargs -g -largs -g codec.o
|
Voici les erreurs de compilation que j'obtiens: (aucun message quoi que je fasse a la création du .o en C)
Code :
- gnatmake -gnatf essaiAda.adb -cargs -g -largs -g codeC.o
- codec.o: In function `pause':
- codeC.c:20: undefined reference to `SDL_WaitEvent'
- codeC.o: In function `main_c':
- codeC.c:32: undefined reference to `SDL_Init'
- codeC.c:34: undefined reference to `SDL_SetVideoMode'
- codeC.c:38: undefined reference to `SDL_Quit'
- collect2: ld a retourné 1 code d'état d'exécution
- gnatlink: error when calling /usr/bin/gcc-4.3
- gnatmake: *** link failed.
|
En fait je crois que je ne comprend rien a la compilation.
Quelqu'un est il en mesure de m'aider ?
Merci
Message édité par exeed le 13-04-2009 à 21:00:40