IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Compilation avec gcc (mingw) , erreur de link? [SDL 2.0]


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Par défaut Compilation avec gcc (mingw) , erreur de link?
    Bonjour,

    j'essaie de compiler un projet en C utilisant la SDL2 mais cela échoue.

    L'architecture de mon projet ( la même que dans ce lien http://alexandre-laurent.developpez....configuration/) est la suivante :

    include
    - SDL2
    - - …
    - - tous les fichiers .h de la SDL
    - - …
    lib
    -libSDL2*.a (ce qui donne : libSDL2.a, libSDL2.dll.a, libSDL2_test.a, libSDL2main.a)
    src
    - main.c
    SDL2.dll (pour Windows)

    Tous ces .a, .h et .dll proviennent de SDL2-2.0.3/i686-w64-mingw32 extrait du package SDL2-devel-2.0.3-mingw.tar.gz téléchargé sur https://www.libsdl.org/download-2.0.php
    (Ils semblent donc être compatibles avec un MinGW 32 bit)

    Le fichier main.c contient le code de test de la page: http://alexandre-laurent.developpez....ration/#LIII-A

    J'utilise gcc pour compiler en ligne de commande (sous windows), installé avec MinGW ( depuis le site officiel). (gcc fonctionne sur des code en C n'utilisant pas SDL)
    La commande utilisée est gcc -Wall -Wextra -L./lib -I./include -lSDL2-2.0 src/main.c -o main lancée depuis la racine des 3 dossiers précédents.

    Après avoir lancé cette commande , j'obtient le message d'erreur suivant (outre les warnings concernant l'absence d'utilisation des arguments de main):
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lSDL2-2.0
    collect2.exe: error: ld returned 1 exit status


    Je ne comprend pas ce qui cloche, en cherchant j'ai cru comprendre que l'erreur était lors de l'édition des liens (ld.exe) et que donc celui-ci ne trouve pas lSLD2-2.0 ( lu comme libSDL2-2.0).
    J'ai essayé d'ajouter -lmingw32 à la commande, comme conseillé à la fin du tutoriel précédent mais cela est resté sans effet.
    j'ai aussi essayer d'écrire -lSDL2-2.0 comme -lSDL2 -lSDL.dll -lSDL2_test -lSDL2main mais la compilation affiche alors un tas de undefined reference à des fonctions SDL.

    Voila, voila, si une âme généreuse pouvait se pencher sur mon problème

    edit: J'ai aussi modifié le header SDL_platform.h contenu dans include/SDL2/ à l'aide de ceci http://hg.libsdl.org/SDL/rev/e217ed463f25 pour corriger une erreur entre windows8 (je crois) et la version 2.0.3 de la SDL
    La modification s'est faite avec succès ( deux lignes à remplacer) et a corrigé l'erreur, donc je ne pense pas que mon problème vienne de là.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 158
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Je pense que vous avez choisi les fichiers .lib en version 64bits (du dossier lib/x64). Sachant que vous utilisez MinGW32, le compilateur ne peux pas les lire, car l'architecture n'est pas compatible.
    Ainsi, pour corriger votre soucis, il faut prendre les fichiers du dossier lib/x86 (les .lib et pensez bien à remplacer la DLL aussi).
    Et ainsi, le compilateur (plus précisément ld, qui est l'éditeur de lien) trouvera bien la SDL2
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Par défaut
    Merci pour votre réponse! Cependant je n'ai pas réussi à résoudre mon problème..

    Tout d'abord, j'ai corrigé la commande que j'ai énoncée dans mon message précédent en:
    gcc -Wall -Wextra -L./lib -I./include src/main.c -o main -lmingw32 -lSDL2-2.0
    car d'après http://www.mingw.org/wiki/specify_th..._linker_to_use , le -l<name> doit se trouver après le fichier.c pour éviter des undefined reference.

    Cette commande renvoie toujours la même erreur que précedemment.

    Concernant les .lib (ou .a), je suis un peu perdu: Dans le dossier SDL2-2.0.3 pour mingw, suivant les conseils de http://alexandre-laurent.developpez....configuration/ au II-A-1., j'ai pris les fichiers présents dans le dossier i686...( pour 32 bit) et non pas dans le dossier x86_64...( pour une archi 64 bits)
    Dans votre message, vous évoquez les dossiers lib/x86 et lib/x64 qui eux, se situent à la racine du dossier SDL2-2.0.3.

    Il y a donc dans le dossier SDL2-2.0.3 trois endroits différents où prendre des fichiers .lib | .h | .dll, etc.. : Soit dans le dossier i686..., soit dans le dossier x86_64, soit dans les dossier include et lib à la racine de SDL2-2.0.3
    Lesquels prendre?

    J'ai essayé la compilation avec ceux de i686... ou ceux de la racine et j'obtient toujours l'erreur: cannot find -lSDL2-2.0
    La commande gcc -Wall -Wextra -L./lib -I./include src/main.c -o main -lmingw32 -lSDL2 -lSDL2.dll -lSDL2_test -lSDL2main renvoie encore un tas d'undefined reference.

    Edit: hop, hop j'édite, la compilation a finalement réussie avec les fichiers du dossier i686... et la commande ( -lSDL2main a été avancé) gcc -Wall -Wextra -L./lib -I./include src/main.c -o main -lmingw32 -lSDL2 -lSDL2main -lSDL2.dll -lSDL2_test, je me doute qu'il doit y avoir une histoire de dépendance que je n'ai pas saisie..
    Je passe le topic en Résolu, mais s'il y a une explication quant à cette compilation et aux trois endroits différents évoqués plus haut, je prend!
    Merci pour votre aide.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 158
    Billets dans le blog
    152
    Par défaut
    Ah oui, désolé, hier j'ai été un peu vite en vérifiant l'archive de la SDL. En effet, le dossier i686_w64 est celui qu'il faut prendre, lorsque vous avec un Windows 64 bits. Maintenant, c'est presque toujours le cas.
    L'autre dossier (lib/...) c'est pour les Windows en 32 bits (comme Windows XP par exemple).
    Après, je me demande pourquoi ils appellent tous leurs dossiers mingw32, il faudra que je fasse des tests supplémentaires.

    Le dossier a prendre, dépend de votre configuration.

    -lSDL2_test
    n'est pas utile.
    Je pense que l'ordre est important, même si je n'en suis pas sur à 100 %, mais c'est surtout, vous auriez peut être pu le remarqué car je pense que les erreurs changent au fur et à mesure de vos essais.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de compilation avec gcc
    Par KINGINFO dans le forum Débuter
    Réponses: 6
    Dernier message: 08/01/2009, 15h52
  2. compilation avec gcc sous MinGW
    Par mackla dans le forum MinGW
    Réponses: 0
    Dernier message: 09/11/2008, 10h34
  3. Erreur de compilation avec GCC
    Par Neuromancien2 dans le forum C
    Réponses: 7
    Dernier message: 20/08/2007, 09h54
  4. compilation avec gcc: erreur inhabituelle
    Par artatum dans le forum C
    Réponses: 4
    Dernier message: 12/10/2005, 17h13
  5. compilation avec gcc : erreurs bizard !!!
    Par CodeurNé dans le forum C
    Réponses: 2
    Dernier message: 23/09/2005, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo