SDL.h: No such file or directory

Signaler
Messages postés
146
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
4 mars 2021
-
Messages postés
146
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
4 mars 2021
-
Bonjour, j'ai un problème en essayant d'inclure la SDL avec
#include <SDL.h>


mon fichier main.c est dans le dossier: projetSDL > src > main.c
tandis que la SDL se trouve à: projetSDL > include > SDL.h

auriez-vous une solution?

5 réponses

Messages postés
5478
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 mars 2021
928
Salut,

Essaye dans ce cas :

#include "../include/SDL.h"


Dal
Messages postés
146
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
4 mars 2021
1
Salut, merci pour ta réponse.

J'ai essayé, mais ça m'indique toujours une erreur:
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status


je ne sais vraiment plus quoi faire :/
une autre suggestion ?
Messages postés
5478
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 mars 2021
928
Cette erreur est une erreur de liaison renvoyée par ld (l'éditeur de liens) et non pas par ton compilateur (gcc je suppose).

Cela signifie que ta compilation s'est bien passée et que ton #include a bien permis au compilateur de trouver ton fichier SDL.h, sinon tu aurais eu une erreur du compilateur.

Tu as donc progressé :-)

Cette erreur de l'éditeur de liens indique une erreur de configuration de ton projet (ou un problème dans ta ligne de commande si tu compiles à la main).

Il va falloir que tu nous en dises plus sur ce que tu fais :
  • la façon dont tu compiles : utilises-tu un EDI comme Codeblocks ou un autre (si oui, lequel)
  • si tu compiles à la main, quelle est la ligne de commande que tu tapes
  • il faudra qu'on vérifie que c'est bien un programme "console" que tu fais
  • tu devrais poster le code source que tu essayes de compiler pour qu'on comprenne mieux ce que tu fais


Tu devrais commencer par une code très simple pour tester ton installation.
Messages postés
146
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
4 mars 2021
1
J'utilise Visual Studio Code et je compile tout simplement en cliquant sur "Run Code". Mon compilateur est mingw

Le code est le suivant:
#include "../include/SDL.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>


int main(int argc,char **argv){
    
    printf("bonjour");    

    return 0;
}


à partir du moment où j'enlève la ligne
#include "../include/SDL.h"
tout fonctionne très bien

comment vérifier que c'est un programme console ?
Messages postés
5478
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 mars 2021
928
Ton programme ne met en oeuvre aucune fonction de la SDL. Tu devrais utiliser un programme minimal ouvrant une fenêtre graphique, attendant quelques secondes et refermant cette fenêtre. Cela te permettra de vérifier que ton installation fonctionne.

Je n’utilise pas Visual Studio Code, mais je vais essayer de te donner des indications utiles.

Je suppose que ton MinGW est correctement installé et que gcc est accessible sur le PATH de WIndows ou que tu lances VS Code à partir de l'environnement MinGW.

Comme tu utilises MinGW, tu dois disposer de la SDL2 conçue pour MinGW en obtenant SDL2-devel-2.0.14-mingw.tar.gz (MinGW 32/64-bit) disponible là :

https://www.libsdl.org/download-2.0.php

Disons que tu compiles des binaires en 32 bits. Décompresses ce fichier et extrait le contenu de i686-w64-mingw32\ dans un répertoire de ton choix, par exemple : c:\mingw_dev_lib\SDL2\i686-w64-mingw32\

Note que dans ce cas, tes include pour la SDL2 seront dans c:\mingw_dev_lib\SDL2\i686-w64-mingw32\include et tes binaires de la SDL2 dans c:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib

Disons aussi que tu veux compiler un programme minimal test_sdl.c :

#include <SDL2/SDL.h>
#include <stdio.h>

const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 600;

int main(int arc, char ** argv) {

    if (SDL_Init( SDL_INIT_VIDEO ) < 0) {
        printf("SDL_Init failed: %s\n", SDL_GetError());
    } else {
        SDL_CreateWindow(
            "SDL2 Demo",
            SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
            SCREEN_WIDTH, SCREEN_HEIGHT,
            SDL_WINDOW_SHOWN
        );
        
        SDL_Delay(2000);
    }
    
    return 0;
}


Tes options de compilation devraient ressembler à ceci si elles étaient passées en ligne de commande :

gcc test_sdl.c -o test_sdl.exe -Ic:\mingw_dev_lib\SDL2\i686-w64-mingw32\include\SDL2 -Lc:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2


Tu peux éventuellement tester déjà ces options de compilation à partir du terminal de VS Code.

Une fois que tu as vérifié que cela compile sans erreurs et que ton programme test_sdl.exe fonctionne (copie le fichier SDL2.dll dans le répertoire de l'exécutable pour le lancer - il se trouve dans i686-w64-mingw32/bin/), tu peux te créer un Makefile ou utiliser le système de build de Visual Studio Code, avec un tasks.json comprenant ces options :

https://code.visualstudio.com/docs/cpp/config-mingw#_build-helloworldcpp

si tu veux lancer cette compilation en cliquant sur "Run Code" sur VS Code.
Messages postés
5478
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 mars 2021
928
ou juste

gcc test_sdl.c -o test_sdl.exe -Ic:\mingw_dev_lib\SDL2\i686-w64-mingw32\include\SDL2 -Lc:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2    
Messages postés
146
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
4 mars 2021
1
j'ai bien suivi ces étapes pour l'installation de la SDL (path windows, libsld.org, 32 bits, etc.)

j'ai également essayé avec le code que tu proposes (qui permet de générer une fenêtre), voici les résultats que j'ai obtenu:

en faisant
gcc test_sdl.c -o test_sdl.exe -Ic:\mingw_dev_lib\SDL2\i686-w64-mingw32\include\SDL2 -Lc:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2
j'obtiens:
Au caractère Ligne:1 : 137
+ ... ude\SDL2 -Lc:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib -w -Wl,-subsyst ...
+                                                                 ~
Argument manquant dans la liste de paramètres.
Au caractère Ligne:1 : 148
+ ... c:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib -w -Wl,-subsystem,windows  ...
+                                                                 ~
Argument manquant dans la liste de paramètres.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingArgument




en faisant
gcc test_sdl.c -o test_sdl.exe -Ic:\mingw_dev_lib\SDL2\i686-w64-mingw32\include\SDL2 -Lc:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2
j'obtiens:
gcc.exe: error: test_sdl.c: No such file or directory


et sinon, si je clique sur Run Code, j'obtiens:
main.c:1:22: fatal error: SDL2/SDL.h: No such file or directory
 #include <SDL2/SDL.h>
                      ^
compilation terminated.


je ne vois pas quoi faire de plus...

est-ce qu'il y a quelque chose à configurer côté projet, avec Visual Studio Code ?
Messages postés
5478
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 mars 2021
928
j'ai bien suivi ces étapes pour l'installation de la SDL (path windows, libsld.org, 32 bits, etc.)

Tu prends la lib 32 bits si ton MinGW est en 32 bits, si c'est MinGW64 que tu as installé, tu prends la lib 64 bist et tu adaptes les instructions.

gcc.exe: error: test_sdl.c: No such file or directory


Cela indique qu'il n'y a pas de fichier
test_sdl.c
dans le répertoire courant.

est-ce qu'il y a quelque chose à configurer côté projet, avec Visual Studio Code

Tu peux, comme je l'ai indiqué, configurer le système de build de Visual Studio Code, avec un tasks.json comprenant les bonnes options si tu veux lancer cette compilation en cliquant sur "Run Code" sur VS Code. Le lien précédemment fournit t'indique :

https://code.visualstudio.com/docs/cpp/config-mingw#_build-helloworldcpp

concrètement, pour toi, si la 2ème ligne de compilation manuelle fonctionne en indiquant le bon emplacement de fichier source .c, cela devrait être quelque chose comme (extrait) :


(...)
"command": "C:\\chemin\\vers\\mingw\\bin\\gcc.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-Ic:\mingw_dev_lib\SDL2\i686-w64-mingw32\include\SDL2",
"-Lc:\mingw_dev_lib\SDL2\i686-w64-mingw32\lib",
"-lmingw32",
"-lSDL2main",
"-lSDL2"
],
(...)


Je suis sous Linux et il m'est difficile de tester tout cela.

J'ai trouvé ce tutoriel qui pourrait t'être utile :

https://programmer.help/blogs/vscode-sdl2-configuration-tutorial.html
Messages postés
146
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
4 mars 2021
1 >
Messages postés
5478
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
3 mars 2021

Je vais essayer ça de mon côté, merci!