Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1832 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C/SDL] undefined reference to mes fonction

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/SDL] undefined reference to mes fonction

n°1958802
Cpowa
Posté le 19-01-2010 à 19:03:54  profilanswer
 

Salut,
 
J'ai des erreurs à la compilation de mon programme:

Code :
  1. ||=== pendule, Debug ===|
  2. obj\Debug\main.o||In function `SDL_main':|
  3. taire\Bureau\pendule\main.c|36|undefined reference to `_affichePoint'|
  4. taire\Bureau\pendule\main.c|49|undefined reference to `_calculeAcc'|
  5. taire\Bureau\pendule\main.c|50|undefined reference to `_eulerVit'|
  6. taire\Bureau\pendule\main.c|51|undefined reference to `_eulerPos'|
  7. taire\Bureau\pendule\main.c|56|undefined reference to `_affichePoint'|
  8. obj\Debug\evenement.o||In function `affichePoint.4':|
  9. taire\Bureau\pendule\evenement.c|135|undefined reference to `_disque'|
  10. ||=== Build finished: 6 errors, 0 warnings ===|


 
Je compile avec code::blocks, Le projet est bien en mode realase et debug, ainsi que tout mes fichiers.
 
Voici mes sources:
main.c

Code :
  1. #include <stdio.h>
  2. #include <SDL/SDL.h>
  3. #include "graphique.h"
  4. #include <math.h>
  5. #include "evenement.h"
  6. #include "commun.h"
  7. int main(int argc, char *argv[])
  8. {
  9.   double point[NB_PROP][NBPART];
  10.   int  i, continuer=1, vecteur=0;
  11.   SDL_Event event;
  12. /*Initialisation de la SDL et ouverture de la fenêtre graphique avec redirection des erreurs vers la sortie standard*/
  13.   if(SDL_Init(SDL_INIT_VIDEO)==-1){
  14.     fprintf(stderr, "Erreur à l'initialisation de la SDL: %s \n", SDL_GetError());
  15.     exit(EXIT_FAILURE);
  16.   }
  17.   ecran=SDL_SetVideoMode(800, 800, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  18.   if(ecran==NULL){
  19.     fprintf(stderr, "Erreur à l'initilisation du mode graphique: %s\n", SDL_GetError());
  20.     exit(EXIT_FAILURE);
  21.   }
  22.   SDL_WM_SetCaption("Pendule élastique", NULL);
  23. /*#################################################################################################################*/
  24.   initCouleurs(ecran);
  25.   effacerEcran();
  26.   init(point, ecran);
  27.   affichePoint(point, vecteur);
  28.   SDL_Flip(ecran);
  29.   attendTouche();
  30. /*--------=========#####Boucle principale du programme######========-------*/
  31.   while(continuer){
  32.     for(i=0; i<NBPART; i++){
  33.       calculeAcc(i, point);
  34.       eulerVit(i, point);
  35.       eulerPos(i, point);
  36.     }
  37.                                            /*On calcul les positions*/
  38.     effacerEcran();
  39.     affichePoint(point, vecteur);
  40.     ligne(400, 400, point[POSX][0], point[POSY][0], couleurs[C_NOIR]);                    /*On affiche les particules */
  41.     ligne(point[POSX][0], point[POSY][0], point[POSX][1], point[POSY][1], couleurs[C_NOIR]);
  42.     SDL_Flip(ecran);
  43.     SDL_Delay(DELAI_MS);
  44.     appuisSurV(&vecteur, event);
  45.     quitterOuEchap(&continuer, event);
  46.   }
  47. /*##################################################################################*/
  48.   SDL_Quit();
  49.   return EXIT_SUCCESS;
  50. }


 
graphique.c

Code :
  1. #include <SDL/SDL.h>
  2. #include "graphique.h"
  3. /*Procédure: Permet d'utiliser les couleurs plus facilement en appellant la fonction au début du programme
  4.   Données: Aucunes
  5.   Précondition: Avoir initialisé la SDL
  6. */
  7. void initCouleurs(SDL_Surface *v_ecran)
  8. {
  9.   couleurs[C_NOIR]          = SDL_MapRGB(v_ecran->format, 0x00, 0x00, 0x00);
  10.   couleurs[C_BLEU_FONCE]    = SDL_MapRGB(v_ecran->format, 0x00, 0x00, 0x80);
  11.   couleurs[C_VERT_FONCE]    = SDL_MapRGB(v_ecran->format, 0x00, 0x80, 0x00);
  12.   couleurs[C_CYAN_FONCE]    = SDL_MapRGB(v_ecran->format, 0x00, 0x80, 0x80);
  13.   couleurs[C_ROUGE_FONCE]   = SDL_MapRGB(v_ecran->format, 0x80, 0x00, 0x00);
  14.   couleurs[C_MAGENTA_FONCE] = SDL_MapRGB(v_ecran->format, 0x80, 0x00, 0x80);
  15.   couleurs[C_OCRE]          = SDL_MapRGB(v_ecran->format, 0x80, 0x80, 0x00);
  16.   couleurs[C_GRIS_CLAIR]    = SDL_MapRGB(v_ecran->format, 0xC0, 0xC0, 0xC0);
  17.   couleurs[C_GRIS]          = SDL_MapRGB(v_ecran->format, 0x80, 0x80, 0x80);
  18.   couleurs[C_BLEU]          = SDL_MapRGB(v_ecran->format, 0x00, 0x00, 0xFF);
  19.   couleurs[C_VERT]          = SDL_MapRGB(v_ecran->format, 0x00, 0xFF, 0x00);
  20.   couleurs[C_CYAN]          = SDL_MapRGB(v_ecran->format, 0x00, 0xFF, 0xFF);
  21.   couleurs[C_ROUGE]         = SDL_MapRGB(v_ecran->format, 0xFF, 0x00, 0x00);
  22.   couleurs[C_MAGENTA]       = SDL_MapRGB(v_ecran->format, 0xFF, 0x00, 0xFF);
  23.   couleurs[C_JAUNE]         = SDL_MapRGB(v_ecran->format, 0xFF, 0xFF, 0x00);
  24.   couleurs[C_BLANC]         = SDL_MapRGB(v_ecran->format, 0xFF, 0xFF, 0xFF);
  25. }
  26. /*Procédure: Affiche un pixel de couleur donnée
  27.   Données: Coordonées du pixel et code couleur
  28.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32bit,
  29.                 les coordonnées du pixel doivent se situer dans la fenêtre
  30. */
  31. void setPixel(int x, int y, Uint32 coul)
  32. {
  33.   *((Uint32*)(POINTEUR_SURFACE->pixels) + x + y * POINTEUR_SURFACE->w) = coul;
  34. }
  35. /*Procédure: Affiche un pixel de couleur donnée de façon sécurisée
  36.   Données: Coordonées du pixel et code couleur
  37.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32bit
  38. */
  39. void setPixelVerif(int x, int y, Uint32 coul)
  40. {
  41.   if (x >= 0 && x < POINTEUR_SURFACE->w &&
  42.       y >= 0 && y < POINTEUR_SURFACE->h)
  43.     setPixel(x, y, coul);
  44. }
  45. /*Procédure: Affiche une barre de dimensions données
  46.   Données: coordonnées du point supérieur gauche, largeur, hauteur et le code couleur.
  47.   Préconditions: Avoir initialisé la SDL et le mode graphique
  48. */
  49. void barre(int x, int y, int w, int h, Uint32 coul)
  50. {
  51.   SDL_Rect r;
  52.   r.x = x;
  53.   r.y = y;
  54.   r.w = w;
  55.   r.h = h;
  56.   SDL_FillRect(POINTEUR_SURFACE, &r, coul);
  57. }
  58. /*Procédure: Remplit la fenêtre en blanc
  59.   Données: Aucunes
  60.   Préconditions: Avoir initialisé la SDL et le mode graphique
  61. */
  62. void effacerEcran(void)
  63. {
  64.   SDL_FillRect(POINTEUR_SURFACE, NULL, couleurs[C_BLANC]);
  65. }
  66. /*Fonction: Echange deux variables d'entiers.
  67.   Données: deux entiers
  68.   Effet de bord: sur les deux variables
  69. */
  70. void echangerEntiers(int* x, int* y)
  71. {
  72.   int t = *x;
  73.   *x = *y;
  74.   *y = t;
  75. }
  76. /*Procédure: Trace une ligne quelconque
  77.   Données: Coordonnées du premier point, du second point et code couleur
  78.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32 bit.
  79. */
  80. void ligne(int x1, int y1, int x2, int y2, Uint32 coul)
  81. {
  82.   int d, dx, dy, aincr, bincr, xincr, yincr, x, y;
  83.   if (abs(x2 - x1) < abs(y2 - y1)) {
  84.     /* parcours par l'axe vertical */
  85.     if (y1 > y2) {
  86.       echangerEntiers(&x1, &x2);
  87.       echangerEntiers(&y1, &y2);
  88.     }
  89.     xincr = x2 > x1 ? 1 : -1;
  90.     dy = y2 - y1;
  91.     dx = abs(x2 - x1);
  92.     d = 2 * dx - dy;
  93.     aincr = 2 * (dx - dy);
  94.     bincr = 2 * dx;
  95.     x = x1;
  96.     y = y1;
  97.     setPixelVerif(x, y, coul);
  98.     for (y = y1+1; y <= y2; ++y) {
  99.       if (d >= 0) {
  100. x += xincr;
  101. d += aincr;
  102.       } else
  103. d += bincr;
  104.       setPixelVerif(x, y, coul);
  105.     }
  106.   } else {
  107.     /* parcours par l'axe horizontal */
  108.     if (x1 > x2) {
  109.       echangerEntiers(&x1, &x2);
  110.       echangerEntiers(&y1, &y2);
  111.     }
  112.     yincr = y2 > y1 ? 1 : -1;
  113.     dx = x2 - x1;
  114.     dy = abs(y2 - y1);
  115.     d = 2 * dy - dx;
  116.     aincr = 2 * (dy - dx);
  117.     bincr = 2 * dy;
  118.     x = x1;
  119.     y = y1;
  120.     setPixelVerif(x, y, coul);
  121.     for (x = x1+1; x <= x2; ++x) {
  122.       if (d >= 0) {
  123. y += yincr;
  124. d += aincr;
  125.       } else
  126. d += bincr;
  127.       setPixelVerif(x, y, coul);
  128.     }
  129.   }
  130. }
  131. /*Procédure: Trace un cercle
  132.   Données: Coordonnées du centre, rayon et code couleur
  133.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32bit,
  134. */
  135. void cercle(int cx, int cy, int rayon, int coul)
  136. {
  137.   int d, y, x;
  138.   d = 3 - (2 * rayon);
  139.   x = 0;
  140.   y = rayon;
  141.   while (y >= x) {
  142.     setPixelVerif(cx + x, cy + y, coul);
  143.     setPixelVerif(cx + y, cy + x, coul);
  144.     setPixelVerif(cx - x, cy + y, coul);
  145.     setPixelVerif(cx - y, cy + x, coul);
  146.     setPixelVerif(cx + x, cy - y, coul);
  147.     setPixelVerif(cx + y, cy - x, coul);
  148.     setPixelVerif(cx - x, cy - y, coul);
  149.     setPixelVerif(cx - y, cy - x, coul);
  150.     if (d < 0)
  151.       d = d + (4 * x) + 6;
  152.     else {
  153.       d = d + 4 * (x - y) + 10;
  154.       y--;
  155.     }
  156.     x++;
  157.   }
  158. }


 
graphique.h

Code :
  1. #ifndef GRAPHIQUE_H
  2. #define GRAPHIQUE_H
  3. /*nom du pointeur (de type SDL_Surface) qui va stocker la surface qui correspond à toute la fenêtre,
  4.   utilisé dans quasiment toutes les fonctions de ce fichier. Il faudra donc pour utiliser la plupart
  5.   des modules de ce fichier récupérer le pointeur renvoyé par SDL_SetVideoMode
  6. */
  7. #define POINTEUR_SURFACE ecran
  8. enum
  9. {
  10.   C_NOIR, C_BLEU_FONCE, C_VERT_FONCE, C_CYAN_FONCE, C_ROUGE_FONCE,
  11.   C_MAGENTA_FONCE, C_OCRE, C_GRIS_CLAIR, C_GRIS, C_BLEU, C_VERT,
  12.   C_CYAN, C_ROUGE, C_MAGENTA, C_JAUNE, C_BLANC,
  13.   NB_COULEURS
  14. };
  15. SDL_Surface* POINTEUR_SURFACE;
  16. Uint32 couleurs[NB_COULEURS]; /*tableau global servant à la fonction  InitCouleurs()*/
  17. /*Procédure: Permet d'utiliser les couleurs plus facilement en appellant la fonction au début du programme
  18.   Données: Aucunes
  19.   Précondition: Avoir initialisé la SDL
  20. */
  21. void initCouleurs(SDL_Surface *v_ecran);
  22. /*Procédure: Affiche un pixel de couleur donnée
  23.   Données: Coordonées du pixel et code couleur
  24.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32bit,
  25.                 les coordonnées du pixel doivent se situer dans la fenêtre
  26. */
  27. void setPixel(int x, int y, Uint32 coul);
  28. /*Procédure: Affiche un pixel de couleur donnée de façon sécurisée
  29.   Données: Coordonées du pixel et code couleur
  30.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32bit
  31. */
  32. void setPixelVerif(int x, int y, Uint32 coul);
  33. /*Procédure: Affiche une barre de dimensions données
  34.   Données: coordonnées du point supérieur gauche, largeur, hauteur et le code couleur.
  35.   Préconditions: Avoir initialisé la SDL et le mode graphique
  36. */
  37. void barre(int x, int y, int w, int h, Uint32 coul);
  38. /*Procédure: Remplit la fenêtre en blanc
  39.   Données: Aucunes
  40.   Préconditions: Avoir initialisé la SDL et le mode graphique
  41. */
  42. void effacerEcran(void);
  43. /*Fonction: Echange deux variables d'entiers.
  44.   Données: deux entiers
  45.   Effet de bord: sur les deux variables
  46. */
  47. void echangerEntiers(int* x, int* y);
  48. /*Procédure: Trace une ligne quelconque
  49.   Données: Coordonnées du premier point, du second point et code couleur
  50.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32 bit.
  51. */
  52. void ligne(int x1, int y1, int x2, int y2, Uint32 coul);
  53. /*Procédure: Trace un cercle
  54.   Données: Coordonnées du centre, rayon et code couleur
  55.   Préconditions: Avoir initialisé la SDL et le mode graphique en 32bit,
  56. */
  57. void cercle(int cx, int cy, int rayon, int coul);
  58. #endif


 
evenement.c

Code :
  1. #include <math.h>
  2. #include <SDL/SDL.h>
  3. #include "graphique.h"
  4. #include "evenement.h"
  5. #include "commun.h"
  6. /*Procédure: Permet à l'utilisateur d'initialiser les particules (position, vitesse et rayon)
  7.   Données: Tableau, et adresse de la surface contenant l'écran
  8.   EB: modification des cases du tableau aux lignes indiquées
  9.   Précondition: Avoir initialisé la SDL
  10. */
  11. void init(double point[][NBPART], SDL_Surface *ecran)
  12. {
  13.   int  i;
  14.   double x, y, vx, vy, masse, constante_raideur, longueur_vide;
  15.   for(i=0; i<NBPART; i++){
  16.   /*  printf("Position initiale en cm x,y \n" );
  17.     scanf("%lf", &x);
  18.     scanf("%lf", &y);
  19.     point[POSX][i]=x;
  20.     point[POSY][i]=y;
  21.     printf("Vitesse initiale en m/s x,y \n" );
  22.     scanf("%lf", &vx);
  23.     scanf("%lf", &vy);
  24.     point[VITX][i]=vx;
  25.     point[VITY][i]=vy;
  26.     printf("Masse en kg \n" );
  27.     scanf("%lf", &masse);
  28.     nuage[MASSE][i]=masse;
  29.     printf("Constante de raideur en N/m \n" );
  30.     scanf("%lf", &constante_raideur);
  31.     point[CONSTANTE_RAIDEUR][i]=constante_raideur;
  32.     printf("longueur a vide en cm \n" );
  33.     scanf("%lf", &longueur_vide);
  34.     point[LONGUEUR_VIDE][i]=longueur_vide;
  35.     point[COULEUR][i]=couleurs[C_ROUGE];
  36.     point[ACCX][i]=0;
  37.     point[ACCY][i]=0;
  38.     */
  39.     point[POSX][i]=600;
  40.     point[POSY][i]=400;
  41.     point[VITX][i]=0;
  42.     point[VITY][i]=0;
  43.     point[ACCX][i]=0;
  44.     point[ACCY][i]=0;
  45.     point[MASSE][i]=1;
  46.     point[COULEUR][i]=couleurs[C_CYAN];
  47.     point[CONSTANTE_RAIDEUR][i]=50;
  48.     point[LONGUEUR_VIDE][i]=100;
  49. }
  50. /*Procédure: Affiche un vecteur vitesse depuis le centre d'un particule
  51.   Donnée: le tableau contenant les vitesses et la position et le n° de la colonne de la particule
  52.   EB: Auncun
  53.   Précondition: Avoir initialisé la SDL
  54. */
  55. void afficheUneVitesse(double point[][NBPART], int j)
  56. {
  57.   ligne(point[POSX][j], point[POSY][j],point[POSX][j]+point[VITX][j],point[POSY][j]+point[VITY][j],  couleurs[C_JAUNE]);
  58. }
  59. /*Procédure: calcule la position d'une particule
  60.   Donné: indice de la particule et tableau où sont rangés les vitesses et les positions des particules
  61.   EB: modifie les cases correspondant aux positions dans le tableau des particules
  62.   Préconditions: Avoir initialisé la vitesse et la position des particules
  63. */
  64. void calculeAcc(int indice, double point[][NBPART])
  65. {
  66.   point[ACCX][indice]=(-1*point[CONSTANTE_RAIDEUR][indice]/point[MASSE][indice])*(sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400))-point[LONGUEUR_VIDE][indice])*((point[POSX][indice]-400)/sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400)))-(COEF_FROTTEMENT/point[MASSE][indice])*point[VITX][indice];
  67.   point[ACCY][indice]=g-(-1*point[CONSTANTE_RAIDEUR][indice]/point[MASSE][indice])*(sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400))-point[LONGUEUR_VIDE][indice])*((point[POSY][indice]-400)/sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400)))-(COEF_FROTTEMENT/point[MASSE][indice])*point[VITY][indice];
  68. }
  69. void eulerVit(int indice, double point[][NBPART])
  70. {
  71.   point[VITX][indice]=point[VITX][indice]+DT*point[ACCX][indice];
  72.   point[VITY][indice]=point[VITY][indice]+DT*point[ACCY][indice];
  73. }
  74. /*Procédure: calcule la position d'une particule
  75.   Donné: indice de la particule et tableau où sont rangés les vitesses et les positions des particules
  76.   EB: modifie les cases correspondant aux positions dans le tableau des particules
  77.   Préconditions: Avoir initialisé la vitesse et la position des particules
  78. */
  79. void eulerPos(int indice, double point[][NBPART])
  80. {
  81.   point[POSX][indice]=point[POSX][indice]+DT*point[VITX][indice];
  82.   point[POSY][indice]=point[POSY][indice]+DT*point[VITY][indice];
  83. }
  84. /*Procédure: Affiche toutes les particules avec leur vecteurs vitesse ou non
  85.   Données: tableau où sont stockés la position et le vecteur vitesse des particules
  86.            booléen pour le cercle et le vecteur
  87.   EB: aucun
  88.   Préconditions: avoir initialisé la vitesse et la position des particules ainsi que la SDL.
  89. */
  90. void affichePoint(double point[][NBPART], int Vecteur)
  91. {
  92.   int i;
  93.   for(i=0; i<NBPART; i++){
  94.     disque(point[POSX][i],point[POSY][i], 10, point[COULEUR][i]);
  95.     }
  96.     if(Vecteur)
  97.       afficheUneVitesse(point, i);
  98.   }
  99. }
  100. /*Procédure: vérifié si la touche echape est pressée ou si on a un évènement SDL_QUIT (clique sur la croix)
  101.              sans bloquer l'éxecution du programme
  102.   Données: Adresse de la varible de boucle et variable de l'évènement.
  103.   EB: mise à zéro de la variable si un des deux évènement est détecté.
  104.   Préconditions: avoir initialisé la SDL
  105. */
  106. void quitterOuEchap(int *continuer, SDL_Event event)
  107. {
  108.   SDL_PollEvent(&event);
  109.   switch(event.type){
  110.     case SDL_QUIT:
  111.       *continuer = 0;
  112.        break;
  113.     case SDL_KEYDOWN:
  114.       switch (event.key.keysym.sym){
  115.         case SDLK_ESCAPE:
  116.           *continuer = 0;
  117.           break;
  118.       }
  119.        break;
  120.   }
  121. }
  122. void appuisSurV(int *vecteur, SDL_Event event)
  123. {
  124.   SDL_PollEvent(&event);
  125.   switch(event.type){
  126.     case SDL_KEYDOWN:
  127.       switch (event.key.keysym.sym){
  128.         case SDLK_v:
  129.           *vecteur = 0;
  130.           break;
  131.       }
  132.        break;
  133.   }
  134. }
  135. /*Procédure: Attend jusqu'à l'appuie sur une touche
  136.   Précondition: Avoir initialisé la SDL
  137. */
  138. void attendTouche(void)
  139. {
  140.   int continuer=1;
  141.   SDL_Event event;
  142.   while (continuer){
  143.         SDL_WaitEvent(&event);
  144.         switch(event.type){
  145.           case SDL_KEYDOWN:
  146.             continuer = 0;
  147.             break;
  148.         }
  149.   }
  150. }


 
evenement.h

Code :
  1. #ifndef EVENEMENT_H
  2. #define EVENEMENT_H
  3. #include "commun.h"
  4. /*Procédure: Permet à l'utilisateur d'initialiser les particules (position, vitesse et rayon)
  5.   Données: Tableau, et adresse de la surface contenant l'écran
  6.   EB: modification des cases du tableau aux lignes indiquées
  7.   Précondition: Avoir initialisé la SDL
  8. */
  9. void init(double point[][NBPART], SDL_Surface *ecran);
  10. /*Procédure: Affiche un vecteur vitesse depuis le centre d'un particule
  11.   Donnée: le tableau contenant les vitesses et la position et le n° de la colonne de la particule
  12.   EB: Auncun
  13.   Précondition: Avoir initialisé la SDL
  14. */
  15. void afficheUneVitesse(double point[][NBPART], int j);
  16. void calculeAcc(int indice, double point[][NBPART]);
  17. void eulerVit(int indice, double point[][NBPART]);
  18. void eulerPos(int indice, double point[][NBPART]);
  19. /*Procédure: Affiche les particuels avec leur vecteurs vitesse ou non
  20.   Données: tableau où sont stockés la position et le vecteur vitesse des particules,
  21.            booléen pour le cercle et le vecteur
  22.   EB: aucun
  23.   Préconditions: avoir initialisé la vitesse et la position des particules ainsi que la SDL.
  24. */
  25. void affichePoint(double point[][NBPART], int Vecteur);
  26. /*Procédure: vérifié si la touche echape est pressée ou si on a un évènement SDL_QUIT (clique sur la croix)
  27.              sans bloquer l'éxecution du programme
  28.   Données: Adresse de la varible de boucle et variable de l'évènement.
  29.   EB: mise à zéro de la variable si un des deux évènement est détecté.
  30.   Préconditions: avoir initialisé la SDL
  31. */
  32. void quitterOuEchap(int *continuer, SDL_Event event);
  33. void appuisSurV(int *vecteur, SDL_Event event);
  34. /*Procédure: Attend jusqu'à l'appuie sur une touche
  35.   Précondition: Avoir initialisé la SDL
  36. */
  37. void attendTouche(void);
  38. #endif


 
commun.h

Code :
  1. #ifndef COMMUN_H
  2. #define COMMUN_H
  3. #define COEF_FROTTEMENT 0
  4. #define g 9.81
  5. #define NBPART 1
  6. #define DT 0.1
  7. #define DELAI_MS 5
  8. #define DELAI_S 0.005
  9. enum
  10. {
  11.   POSX=0, POSY, VITX, VITY, ACCX, ACCY, MASSE, CONSTANTE_RAIDEUR, LONGUEUR_VIDE, COULEUR,
  12.   NB_PROP
  13. };
  14. #endif


 
 
Merci pour votre aide.

mood
Publicité
Posté le 19-01-2010 à 19:03:54  profilanswer
 

n°1958808
Joel F
Real men use unique_ptr
Posté le 19-01-2010 à 19:19:00  profilanswer
 

t'as bien ajouter tes .c à ta cible ?
 
et bon, compiler en ligne de commande, au debut ca forme :o

n°1958809
theshockwa​ve
I work at a firm named Koslow
Posté le 19-01-2010 à 19:20:39  profilanswer
 

Cpowa a écrit :

Code :
  1. void calculeAcc(int indice, double point[][NBPART])
  2. {
  3.   point[ACCX][indice]=(-1*point[CONSTANTE_RAIDEUR][indice]/point[MASSE][indice])*(sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400))-point[LONGUEUR_VIDE][indice])*((point[POSX][indice]-400)/sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400)))-(COEF_FROTTEMENT/point[MASSE][indice])*point[VITX][indice];
  4.   point[ACCY][indice]=g-(-1*point[CONSTANTE_RAIDEUR][indice]/point[MASSE][indice])*(sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400))-point[LONGUEUR_VIDE][indice])*((point[POSY][indice]-400)/sqrt((point[POSX][indice]-400)*(point[POSX][indice]-400)+(point[POSY][indice]-400)*(point[POSY][indice]-400)))-(COEF_FROTTEMENT/point[MASSE][indice])*point[VITY][indice];
  5. }



WTF ? [:pingouino]  
 
 
tu es sur que tu compiles bien tous tes sources ? Parce que là, on dirait que tu buildes juste ton main avec SDL, mais que tu n'as pas inclus les.o de tes autres fichiers .c
 
Edit : grillé en beauté =o

Message cité 1 fois
Message édité par theshockwave le 19-01-2010 à 19:21:07

---------------
last.fm
n°1958811
Cpowa
Posté le 19-01-2010 à 19:29:12  profilanswer
 

Joel F a écrit :

t'as bien ajouter tes .c à ta cible ?
 
et bon, compiler en ligne de commande, au debut ca forme :o


 
 
je compilais en commande quand j'étais sous OpenSuSE
 
Tout mes fichiers sont bien ajoutés au projet.
 


Oui je sais, c'est l'accélération d'un pendule-ressort, j'en ai chié pour écrire ça  :o  
 

theshockwave a écrit :


tu es sur que tu compiles bien tous tes sources ? Parce que là, on dirait que tu buildes juste ton main avec SDL, mais que tu n'as pas inclus les.o de tes autres fichiers .c
 
Edit : grillé en beauté =o


Oui, comme je l'ai dit.
 
 
 
 
 
 
Je précise que les 3/4 des sources proviennent d'un autre prog SDL que j'ai fait il y a un an et que j'ai réutilisé.
Et ce programme fonctionne parfaitement.
 
Mais comme par hasard les fonctions listées dans le log sont celles que j'ai modifiées/réécrites/crées.
Pourtant elles sont bonnes.


Message édité par Cpowa le 19-01-2010 à 19:30:08
n°1958812
tpierron
Posté le 19-01-2010 à 19:31:53  profilanswer
 

Oué, elle est tordue cette erreur.
 
Dans Evenement.c:init() tu as oublié une accolade fermante (certainement celle de la boucle for). Ce qui fait que toutes les fonctions déclarés sont locales à init() (extension de gcc, je suppose), ce qui fait que ça foire à l'édition des liens.
 
  [:tinostar] Et tu as une accolade en trop dans affichePoint().

Message cité 1 fois
Message édité par tpierron le 19-01-2010 à 19:33:25
n°1958813
Cpowa
Posté le 19-01-2010 à 19:37:14  profilanswer
 

tpierron a écrit :

Oué, elle est tordue cette erreur.
 
Dans Evenement.c:init() tu as oublié une accolade fermante (certainement celle de la boucle for). Ce qui fait que toutes les fonctions déclarés sont locales à init() (extension de gcc, je suppose), ce qui fait que ça foire à l'édition des liens.
 
  [:tinostar] Et tu as une accolade en trop dans affichePoint().


Tu sais que je t'aime toi  :love:  :love:  :love:  :love:  :love:  :love:  :love:  :love:  :love:  :love:  :love:  :love:

n°1958815
Cpowa
Posté le 19-01-2010 à 19:44:38  profilanswer
 

j'ai une autre question qui n'a rien à voir.
 
Vous savez comment on affiche la console avec un programme SDL ?
J'ai cherché partout mais j'ai pas trouvé.
J'en ai besoin pour passer des données au programme.
 
Quand je compile en "console application" j'ai bien la console qui s'affiche mais impossible d'afficher quoi que ce soit dedans avec des printf

n°1958818
tpierron
Posté le 19-01-2010 à 20:09:04  profilanswer
 

Mouais, faut voir ce que tu veux faire avec. Si c'est juste pour un peu de debug, normallement si tu passes par le wizard de code::blocks pour créer un projet SDL, en compilant en mode DEBUG, la console sera présente (et les lectures/écriture fonctionneront). En release, la console est désactivée.
 
J'ai la flemme de voir le détail, je pense qu'il y un module de démarrage custom. Cela dit, c'est juste pour le debug, car un fgets va te figer ta fenêtre SDL (notamment aucun refresh lorsque la fenêtre MS-DOS passera inévitablement au premier plan). Si tu as la flemme de faire une vraie interface (d'autant que c'est un peu la bidouille pour faire cohabiter comctl32 et SDL en même temps), passe par un fichier texte ou des paramètres en ligne de commande.

Message cité 1 fois
Message édité par tpierron le 19-01-2010 à 20:11:32
n°1958824
Cpowa
Posté le 19-01-2010 à 20:26:36  profilanswer
 

tpierron a écrit :

Si tu as la flemme de faire une vraie interface (d'autant que c'est un peu la bidouille pour faire cohabiter comctl32 et SDL en même temps), passe par un fichier texte ou des paramètres en ligne de commande.


C'est plus par manque de temps que la flèmme.
J'aimerais bien les passer en ligne de commande, mais comment je fais ?  :D

n°1958831
Joel F
Real men use unique_ptr
Posté le 19-01-2010 à 20:39:03  profilanswer
 

int main(int argc, const char** argv) :E

Message cité 1 fois
Message édité par Joel F le 19-01-2010 à 20:39:17
mood
Publicité
Posté le 19-01-2010 à 20:39:03  profilanswer
 

n°1958839
Cpowa
Posté le 19-01-2010 à 21:12:54  profilanswer
 

Joel F a écrit :

int main(int argc, const char** argv) :E


 
il aime pas, il me met 4erreurs

Code :
  1. taire\Bureau\pendule\main.c|11|error: conflicting types for 'SDL_main'|
  2. C:\Program Files\CodeBlocks\SDL-1.2.14\include\SDL\SDL_main.h|57|error: previous declaration of 'SDL_main' was here|
  3. taire\Bureau\pendule\main.c|11|error: conflicting types for 'SDL_main'|
  4. C:\Program Files\CodeBlocks\SDL-1.2.14\include\SDL\SDL_main.h|57|error: previous declaration of 'SDL_main' was here|
  5. ||=== Build finished: 4 errors, 0 warnings ===|


Et je suppose que c'est pas portable ?

n°1958844
Joel F
Real men use unique_ptr
Posté le 19-01-2010 à 21:55:33  profilanswer
 

non mais attend, t'as deja ouvert un livre de C ou bien ?
Regarde le code que tu as posté, tu as DEJA le bon prototype.
RTFM là quoi [:pingouino]

n°1958846
tpierron
Posté le 19-01-2010 à 21:58:15  profilanswer
 

Euh, il ne faut pas mettre de "const" dans le prototype de main.
 
La première version de ton main() était correcte. Pour passer les arguments depuis Code::Blocks utilise le menu "Project => Set program's argument".

n°1958852
Cpowa
Posté le 19-01-2010 à 22:31:49  profilanswer
 

Joel F a écrit :

non mais attend, t'as deja ouvert un livre de C ou bien ?


oui y a longtemps  :o  

Joel F a écrit :


Regarde le code que tu as posté, tu as DEJA le bon prototype.
RTFM là quoi [:pingouino]


Oui mais je captais pas pourquoi tu me filais un prototype foireux  
 

tpierron a écrit :

Euh, il ne faut pas mettre de "const" dans le prototype de main.
 
La première version de ton main() était correcte. Pour passer les arguments depuis Code::Blocks utilise le menu "Project => Set program's argument".


merci  :jap:  

n°1958858
Joel F
Real men use unique_ptr
Posté le 19-01-2010 à 22:50:49  profilanswer
 

tpierron a écrit :

Euh, il ne faut pas mettre de "const" dans le prototype de main.


je me  gourres-je avec C++ ?


Message édité par Joel F le 19-01-2010 à 22:50:59

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C/SDL] undefined reference to mes fonction

 

Sujets relatifs
Bibliothèque 3D haut niveau en C.Visual Studio 2010 - C# Directx - forcer le mode x86
Récupérer un int en dehors de la fonction.[C] Ecriture dans un fichier
[ C# ] Librairie de calcul de statistiqueHooking d'une appli flash en C++
Coder un nouveau compilateur C++passage de référence en param de fonctions
Utiliser des fonctions C# pour Excel[C#][DirectInput] Programmation d'un joystick
Plus de sujets relatifs à : [C/SDL] undefined reference to mes fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR