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
    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<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x145): undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x175): undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x1c3): undefined reference to `_imp___ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x20d): undefined reference to `_imp___ZN2sf11CircleShapeC1Efj'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x228): undefined reference to `_imp___ZN2sf5Color5GreenE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x232): undefined reference to `_imp___ZN2sf5Shape12setFillColorERKNS_5ColorE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x25a): undefined reference to `_imp___ZN2sf6Window5closeEv'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x27c): undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x2b8): undefined reference to `_imp___ZN2sf5ColorC1Ehhhh'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x2d3): undefined reference to `_imp___ZN2sf12RenderTarget5clearERKNS_5ColorE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x2f0): undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x304): undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x320): undefined reference to `_imp___ZN2sf6Window7displayEv'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x32f): undefined reference to `_imp___ZNK2sf6Window6isOpenEv'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x371): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x3d1): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text+0x44b): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0xe): undefined reference to `_imp___ZTVN2sf11CircleShapeE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.text$_ZN2sf11CircleShapeD1Ev[__ZN2sf11CircleShapeD1Ev]+0x1c): undefined reference to `_imp___ZTVN2sf11CircleShapeE'
    main.o:main.cpp<img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />.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

    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
    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

    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
    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
    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

    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
    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

    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
    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

    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.