Problème de compilation en c avec sdl2
lwdu76
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
lwdu76 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
lwdu76 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
Salut,
j'ai un problème de compilation, je ne sais si l'erreur vient de l'importation de mes fichiers (normalement ils sont dézippés en "tar.gz") ou bien avec l'exécution de cette commande gcc src\main.c -o bin/prog -I include -L lib -lmingw32 -lSDL2main -lSDL2 j'ai installé la bibliothèque de développement pour sdl2 en version 2.0.14 et la bibliothèque de développement pour sdl2_fgx en version 1.0.4.
je vous joins les fichiers pour me dire ce qu'il ne va pas et en même temps l'erreur de compilation avec l'exécution de la commande.
les 4 codes sont inclus dans le fichier source qui est lui même inclus dans le fichier morpion et dans le fichier morpion on retrouve le fichier bin, include ( j'ai suprimmé le sous dossier sdl2 et inclus les fichiers directement dedans) et aussi le fichier lib.
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
j'ai un problème de compilation, je ne sais si l'erreur vient de l'importation de mes fichiers (normalement ils sont dézippés en "tar.gz") ou bien avec l'exécution de cette commande gcc src\main.c -o bin/prog -I include -L lib -lmingw32 -lSDL2main -lSDL2 j'ai installé la bibliothèque de développement pour sdl2 en version 2.0.14 et la bibliothèque de développement pour sdl2_fgx en version 1.0.4.
je vous joins les fichiers pour me dire ce qu'il ne va pas et en même temps l'erreur de compilation avec l'exécution de la commande.

#include <stdlib.h> #include <stdio.h> #include <SDL.h> #include "./game.h" #include "./logic.h" #include "./rendering.h" int main(int argc, char *argv[]) { if (SDL_Init(SDL_INIT_VIDEO) != 0) { fprintf(stderr, "Could not initialize sdl2: %s\n", SDL_GetError()); return EXIT_FAILURE; } SDL_Window *window = SDL_CreateWindow("Procedural", 100, 100, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL) { fprintf(stderr, "SDL_CreateWindow Error: %s\n", SDL_GetError()); return EXIT_FAILURE; } SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (renderer == NULL) { SDL_DestroyWindow(window); fprintf(stderr, "SDL_CreateRenderer Error: %s\n", SDL_GetError()); return EXIT_FAILURE; } game_t game = { .board = { EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY }, .player = PLAYER_X, .state = RUNNING_STATE }; SDL_Event e; while (game.state != QUIT_STATE) { while (SDL_PollEvent(&e)) { switch (e.type) { case SDL_QUIT: game.state = QUIT_STATE; break; case SDL_MOUSEBUTTONDOWN: click_on_cell(&game, e.button.y / CELL_HEIGHT, e.button.x / CELL_WIDTH); break; default: {} } } SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); render_game(renderer, &game); SDL_RenderPresent(renderer); } SDL_DestroyWindow(window); SDL_Quit(); return EXIT_SUCCESS; }
#include <math.h> #include <SDL.h> #include <SDL2_gfxPrimitives.h> #include "./game.h" #include "./rendering.h" const SDL_Color GRID_COLOR = { .r = 255, .g = 255, .b = 255 }; const SDL_Color PLAYER_X_COLOR = { .r = 255, .g = 50, .b = 50 }; const SDL_Color PLAYER_O_COLOR = { .r = 50, .g = 100, .b = 255 }; const SDL_Color TIE_COLOR = { .r = 100, .g = 100, .b = 100 }; void render_grid(SDL_Renderer *renderer, const SDL_Color *color) { SDL_SetRenderDrawColor(renderer, color->r, color->g, color->b, 255); for (int i = 1; i < N; ++i) { SDL_RenderDrawLine(renderer, i * CELL_WIDTH, 0, i * CELL_WIDTH, SCREEN_HEIGHT); SDL_RenderDrawLine(renderer, 0, i * CELL_HEIGHT, SCREEN_WIDTH, i * CELL_HEIGHT); } } void render_x(SDL_Renderer *renderer, int row, int column, const SDL_Color *color) { const float half_box_side = fmin(CELL_WIDTH, CELL_HEIGHT) * 0.25; const float center_x = CELL_WIDTH * 0.5 + column * CELL_WIDTH; const float center_y = CELL_HEIGHT * 0.5 + row * CELL_HEIGHT; thickLineRGBA(renderer, center_x - half_box_side, center_y - half_box_side, center_x + half_box_side, center_y + half_box_side, 10, color->r, color->g, color->b, 255); thickLineRGBA(renderer, center_x + half_box_side, center_y - half_box_side, center_x - half_box_side, center_y + half_box_side, 10, color->r, color->g, color->b, 255); } void render_o(SDL_Renderer *renderer, int row, int column, const SDL_Color *color) { const float half_box_side = fmin(CELL_WIDTH, CELL_HEIGHT) * 0.25; const float center_x = CELL_WIDTH * 0.5 + column * CELL_WIDTH; const float center_y = CELL_HEIGHT * 0.5 + row * CELL_HEIGHT; filledCircleRGBA(renderer, center_x, center_y, half_box_side + 5, color->r, color->g, color->b, 255); filledCircleRGBA(renderer, center_x, center_y, half_box_side - 5, 0, 0, 0, 255); } void render_board(SDL_Renderer *renderer, const int *board, const SDL_Color *player_x_color, const SDL_Color *player_o_color) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { switch (board[i * N + j]) { case PLAYER_X: render_x(renderer, i, j, player_x_color); break; case PLAYER_O: render_o(renderer, i, j, player_o_color); break; default: {} } } } } void render_running_state(SDL_Renderer *renderer, const game_t *game) { render_grid(renderer, &GRID_COLOR); render_board(renderer, game->board, &PLAYER_X_COLOR, &PLAYER_O_COLOR); } void render_game_over_state(SDL_Renderer *renderer, const game_t *game, const SDL_Color *color) { render_grid(renderer, color); render_board(renderer, game->board, color, color); } void render_game(SDL_Renderer *renderer, const game_t *game) { switch (game->state) { case RUNNING_STATE: render_running_state(renderer, game); break; case PLAYER_X_WON_STATE: render_game_over_state(renderer, game, &PLAYER_X_COLOR); break; case PLAYER_O_WON_STATE: render_game_over_state(renderer, game, &PLAYER_O_COLOR); break; case TIE_STATE: render_game_over_state(renderer, game, &TIE_COLOR); break; default: {} } }
#ifndef RENDERING_H_ #define RENDERING_H_ void render_game(SDL_Renderer *renderer, const game_t *game); #endif // RENDERING_H_
#ifndef LOGIC_H_ #define LOGIC_H_ void click_on_cell(game_t *game, int row, int column); #endif // LOGIC_H_
les 4 codes sont inclus dans le fichier source qui est lui même inclus dans le fichier morpion et dans le fichier morpion on retrouve le fichier bin, include ( j'ai suprimmé le sous dossier sdl2 et inclus les fichiers directement dedans) et aussi le fichier lib.
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
A voir également:
- Problème de compilation en c avec sdl2
- Code blocks avec compilateur - Télécharger - Langages
- Breach compilation c'est quoi - Guide
- Compiler plusieurs pdf en un seul - Guide
- Compilation error: expected unqualified-id before '{' token ✓ - Forum C++
- Problème Compilation Dev-C++ - Forum C++
5 réponses
Tu utilises la commande
Si tu as plusieurs fichiers sources, il faut tous les compiler.
gcc src\main.c -o bin/prog -I include -L lib -lmingw32 -lSDL2main -lSDL2, cette commande demande la compilation d'un seul fichier, nommé
src\main.c.
Si tu as plusieurs fichiers sources, il faut tous les compiler.
Salut,
les 4 codes sont inclus dans le fichier source qui est lui même inclus dans le fichier morpion et dans le fichier morpion on retrouve le fichier bin, include ( j'ai suprimmé le sous dossier sdl2 et inclus les fichiers directement dedans) et aussi le fichier lib.
Tout d'abord des précisions terminologiques pour qu'on se comprenne bien.
ensuite, tu présentes 4 codes, mais tu n'indiques pas le nom des fichiers qui correspondent à ces codes.
Le fichier rendering.h contient le prototype de la fonction render_game() que le linker ne trouve pas (cf. ta capture avec le message d'erreur). Tu as l'implémentation de cette fonction dans le deuxième fichier (qu'on suppose s'appeler rendering.c - s'il s'appelle autrement, adapte). Tu dois donc compiler ce fichier, en l'indiquant au compilateur dans ta ligne de commande (ce que tu ne fais pas, car tu indiques seulement main.c).
Le fichier logic.h contient le prototype de la fonction click_on_cell() que le linker ne trouve pas (cf. ta capture avec le message d'erreur). Aucun des codes sources que tu postes ne contient cependant l'implémentation de cette fonction. Tu as besoin de disposer de ce fichier, dont on va supposer que le nom est logic.c (trouve le fichier qui contient l'implémentation de click_on_cell() et adapte si nécessaire). Tu dois donc compiler ce fichier, en l'indiquant au compilateur dans ta ligne de commande (ce que tu ne fais pas, car tu indiques seulement main.c).
Donc, en supposant que tu aies bien les fichiers src/rendering.c et src/logic.c et qu'ils contiennent bien ce que l'on suppose qu'ils contiennent, ta ligne de commande devrait être, en partant de celle proposée par Dalfab :
Dal
les 4 codes sont inclus dans le fichier source qui est lui même inclus dans le fichier morpion et dans le fichier morpion on retrouve le fichier bin, include ( j'ai suprimmé le sous dossier sdl2 et inclus les fichiers directement dedans) et aussi le fichier lib.
Tout d'abord des précisions terminologiques pour qu'on se comprenne bien.
- main.c est un fichier (file en anglais)
- src/ bin/ sont des répertoires (directory en anglais), et non des fichiers, les répertoires sont parfois aussi appelés "dossiers" sous Windows
ensuite, tu présentes 4 codes, mais tu n'indiques pas le nom des fichiers qui correspondent à ces codes.
- supposons que le premier est main.c
- supposons que le deuxième est rendering.c
- supposons que le troisième est rendering.h
- supposons que le quatrième est logic.h
Le fichier rendering.h contient le prototype de la fonction render_game() que le linker ne trouve pas (cf. ta capture avec le message d'erreur). Tu as l'implémentation de cette fonction dans le deuxième fichier (qu'on suppose s'appeler rendering.c - s'il s'appelle autrement, adapte). Tu dois donc compiler ce fichier, en l'indiquant au compilateur dans ta ligne de commande (ce que tu ne fais pas, car tu indiques seulement main.c).
Le fichier logic.h contient le prototype de la fonction click_on_cell() que le linker ne trouve pas (cf. ta capture avec le message d'erreur). Aucun des codes sources que tu postes ne contient cependant l'implémentation de cette fonction. Tu as besoin de disposer de ce fichier, dont on va supposer que le nom est logic.c (trouve le fichier qui contient l'implémentation de click_on_cell() et adapte si nécessaire). Tu dois donc compiler ce fichier, en l'indiquant au compilateur dans ta ligne de commande (ce que tu ne fais pas, car tu indiques seulement main.c).
Donc, en supposant que tu aies bien les fichiers src/rendering.c et src/logic.c et qu'ils contiennent bien ce que l'on suppose qu'ils contiennent, ta ligne de commande devrait être, en partant de celle proposée par Dalfab :
gcc src\main.c src\rendering.c et src\logic.c -o bin\prog -I include -L lib -lmingw32 -lSDL2main -lSDL2
Dal
Peux-tu copier coller sur le forum la commande de compilation et tous les messages d'erreur qui suivent au lieu de faire une capture ?
Peux-tu confirmer que mes suppositions sont correctes ?
(...)
fonction click_on_cell() que le linker ne trouve pas (cf. ta capture avec le message d'erreur). Aucun des codes sources que tu postes ne contient cependant l'implémentation de cette fonction. Tu as besoin de disposer de ce fichier, dont on va supposer que le nom est logic.c (trouve le fichier qui contient l'implémentation de click_on_cell() et adapte si nécessaire)
D'où vient ton code ? Manifestement, ce n'est pas toi qui l'a programmé.
Peux-tu confirmer que mes suppositions sont correctes ?
- supposons que le premier est main.c
- supposons que le deuxième est rendering.c
- supposons que le troisième est rendering.h
- supposons que le quatrième est logic.h
(...)
fonction click_on_cell() que le linker ne trouve pas (cf. ta capture avec le message d'erreur). Aucun des codes sources que tu postes ne contient cependant l'implémentation de cette fonction. Tu as besoin de disposer de ce fichier, dont on va supposer que le nom est logic.c (trouve le fichier qui contient l'implémentation de click_on_cell() et adapte si nécessaire)
D'où vient ton code ? Manifestement, ce n'est pas toi qui l'a programmé.
Si tu n'indiques pas quelle est la commande de compilation et tous les messages d'erreur qui suivent, je ne peux pas t'aider. Les tous premiers messages sont souvent les plus signifiants.
Si tu ne confirmes pas comment s'appellent tes fichiers et ce qu'ils contiennent, et si tu disposes du fichier contenant l'implémentation de click_on_cell() et son nom, là encore, je ne peux pas t'aider.
Je ne vais pas répéter ces questions à l'infini, c'est toi qui vois si tu veux de l'aide.
Les auteurs de vidéos parfois fournissent des liens vers des URL permettant de récupérer les sources des projets réalisés.
Si tu ne confirmes pas comment s'appellent tes fichiers et ce qu'ils contiennent, et si tu disposes du fichier contenant l'implémentation de click_on_cell() et son nom, là encore, je ne peux pas t'aider.
Je ne vais pas répéter ces questions à l'infini, c'est toi qui vois si tu veux de l'aide.
Les auteurs de vidéos parfois fournissent des liens vers des URL permettant de récupérer les sources des projets réalisés.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
OK, donc en supposant que tu as les fichiers include dans "include" et tes binaires de la bibliothèque SDL2 et de sdl2_fgx dans lib, essaye ceci :
Sinon, il y a aussi des instructions dans le fichier README.md pour utiliser CMake.
Dal
gcc -o bin/prog src\main.c src\rendering.c src\logic.c -I include -L lib -D_REENTRANT -lSDL2 -lSDL2_gfx
Sinon, il y a aussi des instructions dans le fichier README.md pour utiliser CMake.
Dal
Merci