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

C++ Discussion :

Mingw et SFML problème


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut Mingw et SFML problème
    Bonjour,

    Je suis actuellement sous Ubuntu 12.04 et je suis sur un projet de c++ incluant de la SFML. J'aimerais aujourd'hui passer ce projet sur Windows, et donc faire un executable .exe. J'utilise mingw, voila comment je compile:

    i586-mingw32msvc-g++ *.cpp -o mon_executable.exe -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio -Wall -Wextra -Werror -O2

    Il compile et me sort donc bien mon .exe.
    Or quand je l'execute "wine ./mon_executable.exe"
    J'ai cette erreur la,

    err:module:import_dll Library sfml-graphics-2.dll (which is needed by L"Z:\\home\\toto\\totoprojet\\mon_executable.exe") not found
    err:module:import_dll Library sfml-system-2.dll (which is needed by L"Z:\\home\\toto\\totoprojet\\mon_executable.exe") not found
    err:module:import_dll Library sfml-window-2.dll (which is needed by L"Z:\\home\\toto\\totoprojet\\tmon_executable.exe") not found
    err:module:LdrInitializeThunk Main exe initialization for L"Z:\\home\\toto\\totoprojet\\mon_executable.exe" failed, status c0000135

    Quelqu'un peut-il m'aider s'il vous plait ?

  2. #2
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Bonjour,

    Le binaire ne trouve pas les DLL. Sous windows, le binaire va chercher les dll d'abord a la racine du binaire, s'il ne trouve pas dans il parcourt les repertoires systeme et s'il ne trouve toujours pas il parcourt les repertoires de la variable d'environnement PATH.

    A toi de lui dire ou sont les dll.

  3. #3
    Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Merci de ta réponse, sais tu comment puis-je lier mes dll à mon executable quand je compile ? (statiquement donc).

  4. #4
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Les DLL sont des bibliothèques chargées dynamiquement. Elle ne sont pas lier statiquement au binaire.

    Mais tu peux lier statiquement des bibliothèques .lib (sous windows) ou .a (sous unix) afin ne les inclure directement dans le binaire.

  5. #5
    Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Ok, j'ai donc compilé comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i586-mingw32msvc-g++ *.cpp -L /usr/i586-mingw32msvc/bin/sfml-audio-2.dll /usr/i586-mingw32msvc/bin/sfml-graphics-2.dll /usr/i586-mingw32msvc/bin/sfml-system-2.dll
    J'ai lu sur certains sites qu'il fallait mettre tous les .dll dans le dossier ou se trouve l'executable, ce que j'ai fait, mais il avait l'air de merder encore plus. Donc tous mes .dll se trouve dans le repertoire à mettre: /usr/i586-mingw32mscv/bin.

    Je compile, et voici ce qu'il me donne:
    /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/libstdc++.a(stubs.o):(.text+0x160): multiple definition of `_powf'
    /tmp/ccES6eRT.o:Brain.cpp:(.text$powf[_powf]+0x0): first defined here
    /tmp/ccES6eRT.o:Brain.cpp:(.text+0x341): undefined reference to `__imp___ZN2sf5Mouse15isButtonPressedENS0_6ButtonE'
    /tmp/ccES6eRT.o:Brain.cpp:(.text+0x356): undefined reference to `__imp___ZN2sf5Mouse11getPositionERKNS_6WindowE'
    /tmp/ccARR2FE.o:Game.cpp:(.text+0x7df): undefined reference to `__imp___ZN2sf5Mouse11getPositionERKNS_6WindowE'
    /tmp/ccARR2FE.o:Game.cpp:(.text+0x88f): undefined reference to `__imp___ZN2sf5Mouse11getPositionERKNS_6WindowE'
    /tmp/ccAZXOI2.o:main.cpp:(.text+0x29b): undefined reference to `__imp___ZN2sf9VideoModeC1Ejjj'
    /tmp/ccAZXOI2.o:main.cpp:(.text+0x3e7): undefined reference to `__imp___ZN2sf6Window5closeEv'
    /tmp/ccAZXOI2.o:main.cpp:(.text+0x572): undefined reference to `__imp___ZN2sf6Window9pollEventERNS_5EventE'
    /tmp/ccAZXOI2.o:main.cpp:(.text+0x5d9): undefined reference to `__imp___ZN2sf6Window7displayEv'
    /tmp/ccAZXOI2.o:main.cpp:(.text+0x5ed): undefined reference to `__imp___ZNK2sf6Window6isOpenEv'
    /tmp/ccyjc1wh.o:Menu.cpp:(.text+0x42d): undefined reference to `__imp___ZN2sf5Mouse11getPositionERKNS_6WindowE'
    /tmp/ccqWi9LI.o:MenuModule.cpp:(.text+0x242): undefined reference to `__imp___ZN2sf5Mouse11getPositionERKNS_6WindowE'
    /tmp/cc8rEyMa.o:MenuOptions.cpp:(.text+0x3e0): undefined reference to `__imp___ZN2sf5Mouse11getPositionERKNS_6WindowE'
    /tmp/cckJ6zRB.o:MenuSuccess.cpp:(.text+0x3e0): undefined reference to `__imp___ZN2sf5Mouse11getPositionERKNS_6WindowE'
    collect2: ld returned 1 exit status

    C'est un peu indigeste comme erreur, une idée ?

  6. #6
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Essaie avec i586-mingw32msvc-gcc.

    Ensuite pour tes erreurs de link, tu ne peux pas utiliser des dll qui ont un format de fichier et un encodage propre aux OS Microsoft, donc tu ne peux pas les utiliser pour compiler ton projet alors que tu es sous un autre OS. Si tu veux utiliser Wine, il faut peut-être effectivement que tu place les dll dans le répertoire de ton projet .exe, et linker avec les lib dynamiques (.so ou .sh, etc selon ton OS) adaptées, mais j'ai un gros doute sur le résultat où la faisabilité. La meilleure solution reste comme déjà évoqué que tu link statiquement les libs de la SFML.

  7. #7
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Citation Envoyé par Kaamui Voir le message
    Essaie avec i586-mingw32msvc-gcc.
    Pourquoi utiliser le compilateur C s'il fait du Cpp ?

    Je pense que ton problème vient des conventions de nommage des methodes dans la DLL.

    Il faut surement retravailler la Dll pour que les nom des fonctions soient dans la bonne convention.
    => http://www.mingw.org/wiki/CreateImportLibraries

    Citation Envoyé par Kaamui Voir le message
    Ensuite pour tes erreurs de link, tu ne peux pas utiliser des dll qui ont un format de fichier et un encodage propre aux OS Microsoft, donc tu ne peux pas les utiliser pour compiler ton projet alors que tu es sous un autre OS. Si tu veux utiliser Wine, il faut peut-être effectivement que tu place les dll dans le répertoire de ton projet .exe, et linker avec les lib dynamiques (.so ou .sh, etc selon ton OS) adaptées, mais j'ai un gros doute sur le résultat où la faisabilité. La meilleure solution reste comme déjà évoqué que tu link statiquement les libs de la SFML.
    Y'a pas d'encodage propre Microsoft, mais des conventions de nommage différentes que l'on peut choisir sous windows.

  8. #8
    Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Je vais me debrouiller, merci pour vos réponses !

  9. #9
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i586-mingw32msvc-g++ *.cpp -L /usr/i586-mingw32msvc/bin/  -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio

  10. #10
    Membre du Club
    Homme Profil pro
    Ergonome
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    J'avais déjà essayé et il m'avait mis cette erreur:

    /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/libstdc++.a(stubs.o):(.text+0x160): multiple definition of `_powf'
    /tmp/ccbLh5RD.o:Brain.cpp:(.text$powf[_powf]+0x0)first defined here
    collect2: ld returned 1 exit status
    Et cela ne vient pas du fichier brain.cpp car j'ai compilé avec la sfml sous codeblocks avec windows aujourd'hui et ça marchait. Enfin bref, j'ai donc mon .exe mais en passant sous windows ... J'aurais aimé faire ça depuis mon cher Ubuntu mais bon ...

  11. #11
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Citation Envoyé par gnto Voir le message
    Pourquoi utiliser le compilateur C s'il fait du Cpp ?
    Parce que j'ai trouvé une source sur le net (ici) qui contournait le problème comme ceci. Je voulais donc savoir s'il s'agissait de la même raison, et j'aurais pu renvoyer un semblant d'explication en plus de la source, rejoignant ainsi Koala01 qui a encore une fois eu le nez extrêmement fin . En utilisant libstdc au lieu de libstdc++ on évite de rencontrer le problème de la deuxième définition de powf.

    Citation Envoyé par gnto Voir le message
    Je pense que ton problème vient des conventions de nommage des methodes dans la DLL.

    Il faut surement retravailler la Dll pour que les nom des fonctions soient dans la bonne convention.
    => http://www.mingw.org/wiki/CreateImportLibraries
    Pourquoi faire simple quand on peut faire compliqué... je ne penses pas que la solution à un problème de linkage soit de "retravailler" les dlls de la SFML.. Koala01 semble avoir trouvé la bonne explication, le compilateur se mélange.

    Citation Envoyé par gnto Voir le message
    Y'a pas d'encodage propre Microsoft, mais des conventions de nommage différentes que l'on peut choisir sous windows.
    Ok.

  12. #12
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Citation Envoyé par Kaamui Voir le message
    Parce que j'ai trouvé une source sur le net (ici) qui contournait le problème comme ceci.
    Quitte a passer encore une fois pour un extrémiste, je résonne en terme de contrainte. Je ne connais pas toutes les contraintes mais changer de techno parce qu'on ne comprend pas ce qui se passe est plus couteux en terme de temps que de chercher la vérité (selon moi et je peux me tromper). Après s'il y a du temps pourquoi pas.

    Citation Envoyé par Kaamui Voir le message
    Pourquoi faire simple quand on peut faire compliqué... je ne penses pas que la solution à un problème de linkage soit de "retravailler" les dlls de la SFML.
    Ici je parlais des "undefined reference to `__imp___ZN2sf5Mouse15isButtonPressedENS0_6ButtonE'" et ca c'était avant de corriger la ligne de commande GCC.
    Je suis intervenu car j'ai déjà rencontré des problèmes sous mingw sur des dll compiler avec MSVC et avec une convention stdcall ou cdecl. Mais le problème n'est pas la car la commande n'était pas la bonne et je suis allé trop vite en besogne.

Discussions similaires

  1. [SFML] Problème double-buffer
    Par black is beautiful dans le forum SFML
    Réponses: 2
    Dernier message: 04/11/2014, 08h39
  2. [SFML] Problème de fluidité lors du déplacement de la vue
    Par maxime3112 dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 12/02/2012, 00h22
  3. [SFML]Problème Tile Mapping
    Par Charvalos dans le forum Bibliothèques
    Réponses: 19
    Dernier message: 30/09/2010, 10h44
  4. [SFML] Problème avec affichage en thread
    Par black is beautiful dans le forum SFML
    Réponses: 0
    Dernier message: 05/05/2009, 10h33

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