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

SFML Discussion :

Problème linkage SFML 2.3.2 et Mingw


Sujet :

SFML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 12
    Points : 16
    Points
    16
    Par défaut Problème linkage SFML 2.3.2 et Mingw
    Salut à tous

    Voilà, je suis bloqué depuis quelque temps sur un problème alors que je souhaite compiler avec un makefile un petit bout de code pris sur le net avec la bibliothèque SFML 2.3.2

    Je précise que cela compilait et marchait sur Linux (avec un makefile équivalent, et si je n'ai pas glissé une erreur de syntaxe entretemps mais le problème vient du makefile/de l'installation de la SFML). Je suis sur Windows 7, Mingw installé avec codeblock


    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <SFML/Graphics.hpp>
     
    using namespace std;
     
    int main(){
     
        sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
        sf::CircleShape shape(100.f);
        shape.setFillColor(sf::Color::Green);
     
        while (window.isOpen()){
            sf::Event event;
            while (window.pollEvent(event)){
                if (event.type == sf::Event::Closed)
                    window.close();
            }
     
            window.clear();
            window.draw(shape);
            window.display();
        }
     
        return 0;
    }

    Le makefile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CPPFLAGS = -I C:\SFML-2.3.2\include
    LDFLAGS = -LC:\SFML-2.3.2\lib -lsfml-graphics -lsfml-window -lsfml-system -DSFML_DYNAMIC
     
    program : main.o
    	g++ ${LDFLAGS} main.o -o program.exe
     
    main.o: main.cpp
    	g++ -c main.cpp ${CPPFLAGS}
    et surtout, la sortie de mon makefile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    g++ -c main.cpp -I C:\SFML-2.3.2\include
    g++ -LC:\SFML-2.3.2\lib -lsfml-graphics -lsfml-window -lsfml-system -DSFML_DYNAMIC main.o -o program.exe
    main.o:main.cpp:(.text+0x145): undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
    main.o:main.cpp:(.text+0x175): undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
    main.o:main.cpp:(.text+0x1c3): undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
    main.o:main.cpp:(.text+0x20d): undefined reference to `_imp___ZN2sf11CircleShapeC1Efj'
    main.o:main.cpp:(.text+0x228): undefined reference to `_imp___ZN2sf5Color5GreenE'
    main.o:main.cpp:(.text+0x232): undefined reference to `_imp___ZN2sf5Shape12setFillColorERKNS_5ColorE'
    main.o:main.cpp:(.text+0x25a): undefined reference to `_imp___ZN2sf6Window5closeEv'
    main.o:main.cpp:(.text+0x27c): undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE'
    main.o:main.cpp:(.text+0x2b8): undefined reference to `_imp___ZN2sf5ColorC1Ehhhh'
    main.o:main.cpp:(.text+0x2d3): undefined reference to `_imp___ZN2sf12RenderTarget5clearERKNS_5ColorE'
    main.o:main.cpp:(.text+0x2f0): undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'
    main.o:main.cpp:(.text+0x304): undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'
    main.o:main.cpp:(.text+0x320): undefined reference to `_imp___ZN2sf6Window7displayEv'
    main.o:main.cpp:(.text+0x32f): undefined reference to `_imp___ZNK2sf6Window6isOpenEv'
    main.o:main.cpp:(.text+0x371): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
    main.o:main.cpp:(.text+0x3d1): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
    main.o:main.cpp:(.text+0x44b): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
    main.o:main.cpp:(.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0xe): undefined reference to `_imp___ZTVN2sf11CircleShapeE'
    main.o:main.cpp:(.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0x1c): undefined reference to `_imp___ZTVN2sf11CircleShapeE'
    main.o:main.cpp:(.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0x2c): undefined reference to `_imp___ZN2sf5ShapeD2Ev'
    collect2.exe: error: ld returned 1 exit status
    make: *** [program] Error 1
    J'ai simplement download la SFML puis je l'ai déplacé et j'ai fait mon makefile ci-dessus. Je précise que j'ai téléchargé plusieurs versions de la SFML, mais j'ai surtout essayé avec la version GCC 4.7.1 TDM (SJLJ) - 32-bit, ce qui semble correct d'après gcc -v et ce que j'ai pu lire sur l'installation avec Mingw/CodeBlock. Du coup je suis complètement perdu

    Merci d'avance à celui qui me répondra

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 062
    Points : 26 991
    Points
    26 991
    Billets dans le blog
    2
    Par défaut
    Salut,

    t'as essayé avec des slash plutôt que des antislash dans les chemins ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Salut,

    t'as essayé avec des slash plutôt que des antislash dans les chemins ?
    Dans les chemins ? J'ai C/C les chemins, je suis sous windows, et il me semble bien qu'il trouve les chemins et librairie là, sinon j'aurais un autre message d'erreur

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


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

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

    Informations forums :
    Inscription : mai 2008
    Messages : 24 504
    Points : 180 482
    Points
    180 482
    Billets dans le blog
    50
    Par défaut
    Bonjour,

    Avez-vous télécharger les bibliothèques en version 32 bits, ou en version 64 bits ? Si elles sont en 64 bits, le compilateur (qui est en 32bits) va les ignorer, car il ne peux pas les utiliser.
    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.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Ce que j'ai indiqué en gras est justement la version de la sfml que j'ai téléchargé. Et il le semble bien avoir GCC 32bits, même version.

    Après ça a bien l'air d'être un problème de compatibilité, ou alors j'ai oublié quelque chose dans la ligne de commande. Je reessayerai à nouveau une fois chez moi pour différentes versions de la sfml au cas où et si je trouve rien d'autres.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    je me permet de ré-up ce topic, car j'ai vraiment tout essayé... plusieurs versions de la SFML, j'ai même installé une autre version de GCC sans lien avec CodeBlock cette fois ci (Mingw 64 bits SEH) avec la version SFML qui va avec.

    Mais toujours la même erreur "undefined reference to (...)" Même si c'est bien un problème avec le linker, j'ai malgré tout l'impression que le problème ce situe a un autre niveau, peut être un truc tout bête...

    J'ai aussi mis -D SFML_DYNAMIC avec le CPPFLAGS au lieu du LDFLAGS

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


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

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

    Informations forums :
    Inscription : mai 2008
    Messages : 24 504
    Points : 180 482
    Points
    180 482
    Billets dans le blog
    50
    Par défaut
    Pour être certain que le compilateur trouve les fichiers, mettez le chemin vers les bibliothèques complètement en dur (chemin absolu, comprenant le chemin + le nom de fichier).
    Si cela ne marche pas, revenez, j'ai encore une piste et si cela marche, revenez aussi pour marquer la discussion en résolu.

    Certes la solution n'est pas propre, mais je crois que le compilateur ne cherche que des fichiers .a. Ou alors que lorsque l'on écrit -l, il ajoute "lib" au début du nom du fichier, ce qui n'est pas bon dans notre cas.
    Vérification faite -> A priori, ce n'est pas ce cas là, car les fichiers sont bien en .a et précédé de "lib".

    Dernière solution : installez un GCC avec le support du SJLJ.
    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.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Merci encore de votre aide.

    Malheureusement j'ai bien l'impression qu'il reconnait les librairies incluses (j'ai fait un test en remplaçant un sfml-xxxx.a par un fichier vide du même nom), le soucis vient je crois des fonctions qui devraient contenir le préfixe _imp___ d'après g++, mais ce n'est pas le cas apparemment. Enfin je n'en suis pas sûr non plus.

    Sinon je pense avoir déjà tester avec cette version de GCC, mais de toute façon c'est toujours le même problème, quelques soient les versions de la SFML et de GCC. Au pire je programmerai à l'école (vu que c'est pour un projet scolaire) ou je trouverai un autre OS/ordinateur chez moi, je commence à perdre patiente là

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


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

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

    Informations forums :
    Inscription : mai 2008
    Messages : 24 504
    Points : 180 482
    Points
    180 482
    Billets dans le blog
    50
    Par défaut
    Vous pouvez m'envoyer votre dossier de projet et je vais tacher de vérifier ce qui coince, mais bon, je n'ai pas la même configuration que vous.
    Sinon, avez-vous vu qu'il y avait des template de projet (projet pré configuré) : http://jeux.developpez.com/telecharg...ur-Code-Blocks
    Il suffit de prendre, de décompresser et d'ouvrir le fichier du projet et ça compile.

    (Pour avoir la version 2.3, il suffit de remplacer le dossier lib et le dossier include.)
    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.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2015
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Ahem.. Merci bien

    Je pensais me "simplifier" la vie en faisant ça manuellement et en utilisant un makefile de la même manière qu'a l'école, mais du coup cette solution était bien plus simple, et cela marche très bien...

    Du coup je vais me contenter de ça pour le moment, et je verrais peut-être un autre jour pour tenter de comprendre ce que j'ai mal fait (j'ai eu ma dose pour le moment), mais il s'agit sans doute d'une erreur stupide de ma part.

    Merci encore !

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


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

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

    Informations forums :
    Inscription : mai 2008
    Messages : 24 504
    Points : 180 482
    Points
    180 482
    Billets dans le blog
    50
    Par défaut
    Ah, bah tant mieux.
    Dernière indication : ce tutoriel qui explique en détail la compilation : http://alexandre-laurent.developpez....-bibliotheque/

    Bonne continuation.
    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. Problème linkage: $LD_LIBRARY_PATH non pris en compte !
    Par DeathMixer dans le forum Débuter
    Réponses: 9
    Dernier message: 07/06/2011, 10h21
  2. Problème linkage error
    Par pjmorce dans le forum Services Web
    Réponses: 0
    Dernier message: 04/02/2010, 14h42
  3. [SmartDevice] Problème linkage?
    Par Fabien25C dans le forum Visual C++
    Réponses: 2
    Dernier message: 20/10/2009, 23h35
  4. Problème linkage lors compilation
    Par scary dans le forum OpenGL
    Réponses: 10
    Dernier message: 14/03/2009, 20h04
  5. Problème internet lors de l'installation de MinGW 5.0.3
    Par eriandel dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/09/2006, 11h38

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