Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu]Problème de link statique avec Codeblock e SFML 2.0  (Lu 7325 fois)

0 Membres et 1 Invité sur ce sujet

Dammaru

  • Invité
[Résolu]Problème de link statique avec Codeblock e SFML 2.0
« le: Juillet 15, 2013, 12:00:11 am »
Bonjour,

Tout d'abord, je n'ai pas trouvé de topic de présentation, donc désolé si je l'ai loupé, de poster comme ça.

Mon problème est le suivant :
J'ai 2 projets CodeBlocks. Le premier est une librarie statique utilisant SFML. Le 2ème est un programme de test avec juste un main. J'arrive à tout compiler et générer mon exécutable mais au lancement, il demande un DLL. Je pensais pourtant avoir fait le nécessaire pour que tout soit en statique :
- ma librarie est bien une Static Library
- dans les options de compilation de mon exécutable j'ai rajouté dans "#define" le mot clé "SFML_STATIC" comme indiqué dans le tutoriel.
- dans les Linker Settings de mon exécutable, j'ai mis dans l'ordre : ma librairie perso, sfml-graphics, sfml-window, sfml-system.
- les répertoires d'include et de lib sont ok
Dans ce cas j'obtiens donc un exe qui réclame une DLL "sfml-graphics-2.dll". Si je rajoute un -s au nom des lib sfml, le link échoue, il n'a pas l'air de trouver les lib.

Il y a forcément un truc que je fais pas bien, mais quoi? Une idée?

Je suis sous Windows, avec Codeblock, GCC, et SFML GCC 32 bits.

Merci!
« Modifié: Juillet 15, 2013, 09:04:49 pm par Dammaru »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #1 le: Juillet 15, 2013, 08:03:29 am »
Version de SFML téléchargée ? Message d'erreur exact?
Laurent Gomila - SFML developer

Dammaru

  • Invité
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #2 le: Juillet 15, 2013, 09:15:41 am »
J'ai essayé avec 2 versions de la SFML pour le même résultat :
- GCC 4.7 TDM (SJLJ) - 32 bits
- GCC 4.7 MinGW (DW2) - 32 bits

Hmm je suis pas un grand spécialiste des problématiques de compilo et de liens, donc je rame un peu. Pour le compilo que j'utilise dans Codeblocks, il est juste indiqué "GCC" je crois.

Quand au message d'erreur, je ne me souviens plus du contenu exact (je ne suis pas sur la machine en question là) mais c'est un popup au lancement qui indique qu'il lui manque sfml-graphics-2.dll. Si je copie les dll SFML a côté de mon exe, il demande ensuite les dll GCC. J'ai pas testé plus loin car je ne veux pas linker en dynamique, mais je dois pouvoir lancer mon programme si j'ajoute le chemin vers les dll GCC dans mon Path.

Et les messages d'erreur si je rajout "-s" au nom des libs dans les options de liens de mon programmes, ce sont des erreurs de liens vers plusieurs éléments SFML. Je vous posterais ça ce soir.

Merci de la réponse en tout cas  :)

Dammaru

  • Invité
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #3 le: Juillet 15, 2013, 07:48:37 pm »
Voilà mon log de compil complet (commande incluse)

Citer
mingw32-g++.exe -Wall -DSFML_STATIC  -O2     -I..\SFML-2.0\include -I"..\..\PC 2D projects" -I"C:\Program Files (x86)\CodeBlocks\MinGW\include"  -c "E:\Documents\Projets_persos\PC 2D projects\GraphicEngineTest\GraphicEngineMain.cpp" -o obj\Release\GraphicEngineMain.o
mingw32-g++.exe -L..\SFML-2.0\lib -L"..\..\PC 2D projects" -L"C:\Program Files (x86)\CodeBlocks\MinGW\lib"  -o bin\Release\GraphicEngineTest.exe obj\Release\GraphicEngineMain.o   -s  ..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a -lsfml-graphics-s -lsfml-window-s -lsfml-system-s
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0x1f): undefined reference to `_imp___ZN2sf12RenderTarget7setViewERKNS_4ViewE'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0x39): undefined reference to `_imp___ZN2sf6Window7displayEv'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0x4b): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0x5b): undefined reference to `_imp___ZN2sf12RenderWindowD1Ev'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0x6b): undefined reference to `_imp___ZN2sf12RenderWindowC1Ev'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0x7b): undefined reference to `_imp___ZN2sf12RenderWindowC1Ev'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0xd1): undefined reference to `_imp___ZN2sf6StringC1ERKSsRKSt6locale'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Engine2D.o):GrE_Engine2D.cpp:(.text+0xfd): undefined reference to `_imp___ZN2sf6Window6createENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Scene2D.o):GrE_Scene2D.cpp:(.text+0xd7): undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'
..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a(GrE_Scene2D.o):GrE_Scene2D.cpp:(.text+0xe9): undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'
collect2: ld returned 1 exit status

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #4 le: Juillet 15, 2013, 08:19:30 pm »
Là on ne voit qu'un fichier. Est-ce que tu compiles bien tout avec SFML_STATIC ?
Laurent Gomila - SFML developer

Dammaru

  • Invité
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #5 le: Juillet 15, 2013, 08:22:13 pm »
Oui, je n'ai qu'un fichier dans ce projet. Le reste est dans ma lib.
Voici le build log de la lib
Citer
mingw32-g++.exe -Wall -DSFML_STATIC  -g    -I..\SFML-2.0\include -I"C:\Program Files (x86)\CodeBlocks\MinGW\include"  -c "E:\Documents\Projets_persos\PC 2D projects\Simple2DGraphicEngine\GrE_Scene2D.cpp" -o obj\Debug\GrE_Scene2D.o
mingw32-g++.exe -Wall -DSFML_STATIC  -g    -I..\SFML-2.0\include -I"C:\Program Files (x86)\CodeBlocks\MinGW\include"  -c "E:\Documents\Projets_persos\PC 2D projects\Simple2DGraphicEngine\GrE_Engine2D.cpp" -o obj\Debug\GrE_Engine2D.o
ar.exe -r -s bin\Debug\libSimple2DGraphicEngine.a obj\Debug\GrE_Scene2D.o obj\Debug\GrE_Engine2D.o
ar.exe: creating bin\Debug\libSimple2DGraphicEngine.a
Output size is 243,72 KB

Il n'y a pas d'options de link dans la compilation de ma lib, mais ça me semble normal, vu que c'est un lib. Mais comme j'ai dit y a des notions qui m'échappe dans le fonctionnement de l'édition de liens.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #6 le: Juillet 15, 2013, 08:29:36 pm »
Il n'y a en effet de l'étape d'édition de liens lors de la création d'une bibliothèque statique, puisque ce n'est qu'une archive de fichiers compilés (.o). L'édition de liens n'intervient que lors de la construction d'un binaire (exécutable ou bibliothèque dynamique).

Pour en revenir à ton problème, visiblement le compilateur a généré des appels à la version dynamique de SFML (ça se voit au préfixe _imp___) dans ta bibliothèque. Pourtant tu définis bien SFML_STATIC. Donc je ne sais pas ;D

Essaye de tout nettoyer et recompiler à partir de zéro. Si tu as changé entre statique et dynamique il se peut que certains fichiers n'aient pas été recompilés alors qu'ils auraient dû, et du coup gardent une trace d'une configuration précédente.
Laurent Gomila - SFML developer

Dammaru

  • Invité
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #7 le: Juillet 15, 2013, 08:35:09 pm »
Tiens ta suggestion est bonne, me voilà avec un résultat différent :
Citer
mingw32-g++.exe -Wall -DSFML_STATIC  -O2    -I..\SFML-2.0\include -I"..\..\PC 2D projects" -I"C:\Program Files (x86)\CodeBlocks\MinGW\include"  -c "E:\Documents\Projets_persos\PC 2D projects\GraphicEngineTest\GraphicEngineMain.cpp" -o obj\Release\GraphicEngineMain.o
mingw32-g++.exe -L..\SFML-2.0\lib -L"..\..\PC 2D projects" -L"C:\Program Files (x86)\CodeBlocks\MinGW\lib"  -o bin\Release\GraphicEngineTest.exe obj\Release\GraphicEngineMain.o   -s  ..\Simple2DGraphicEngine\bin\Release\libSimple2DGraphicEngine.a -lsfml-graphics-s -lsfml-window-s -lsfml-system-s
..\SFML-2.0\lib/libsfml-graphics-s.a(ImageLoader.cpp.obj):ImageLoader.cpp:(.text+0x438e): undefined reference to `__chkstk_ms'
..\SFML-2.0\lib/libsfml-graphics-s.a(ImageLoader.cpp.obj):ImageLoader.cpp:(.text+0x4423): undefined reference to `__chkstk_ms'
..\SFML-2.0\lib/libsfml-graphics-s.a(ImageLoader.cpp.obj):ImageLoader.cpp:(.text+0x629a): undefined reference to `__chkstk_ms'
..\SFML-2.0\lib/libsfml-graphics-s.a(ImageLoader.cpp.obj):ImageLoader.cpp:(.text+0x75bc): undefined reference to `__chkstk_ms'
..\SFML-2.0\lib/libsfml-graphics-s.a(ImageLoader.cpp.obj):ImageLoader.cpp:(.text+0x7617): undefined reference to `__chkstk_ms'
..\SFML-2.0\lib/libsfml-graphics-s.a(ImageLoader.cpp.obj):ImageLoader.cpp:(.text+0x99f9): more undefined references to `__chkstk_ms' follow
collect2: ld returned 1 exit status

Je vais essayer de compiler en debug, juste au cas ou.

Edit : ImageLoader c'est pas un fichier de SFML ça. Il aurait du mal a linker avec les libs C++?
« Modifié: Juillet 15, 2013, 08:39:13 pm par Dammaru »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #8 le: Juillet 15, 2013, 08:39:56 pm »
Je suis sûr que Google sait plein de choses sur __chkstk_ms ;) Quand tu as un message d'erreur très spécifique n'hésite pas à Googler, ça marche à tous les coups.

Sinon tu as quelle version de gcc ?
Laurent Gomila - SFML developer

Dammaru

  • Invité
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #9 le: Juillet 15, 2013, 08:45:39 pm »
Excellent question. Le fait est que j'avais installé Codeblocks il y a de longs mois pour commencer à utiliser SFML 1.6. Du coup je me rappelle plus ce que j'avais installé et comment. Je vais essayer de réinstaller une version récente de Codeblocks avec une version de GCC compatible avec SFML.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #10 le: Juillet 15, 2013, 08:48:31 pm »
Si tu prends Code::Blocks 12.11 il te faudra la version TDM SJLJ de SFML.
Laurent Gomila - SFML developer

Dammaru

  • Invité
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #11 le: Juillet 15, 2013, 08:55:14 pm »
Ok ok, je vais faire comme ça.

D'ailleurs une petite question compilation : si je choisis un compilateur GCC 64bits (je sais pas si il existe sur Windows) et SFML TDM SJLJ 64 bits, cela signifie que mon programme ne pourra tourner que sur des architectures et OS 64 bits, j'ai bon?
Et si j'utilise les versions 32 bits, mon programme sera compatible sur les architecture 32 et 64 bits, mais peut-être moins optimisé pour l'architecture 64 bits?
Est-ce que je suis dans le vrai?

Je bosse sur un Seven 64 bits, et j'ai souvent eu des soucis avec de vieux jeux, et j'aimerais que mon projet ne rencontre pas les mêmes problèmes de compatibilité.

Dammaru

  • Invité
Re : Problème de link statique avec Codeblock e SFML 2.0
« Réponse #12 le: Juillet 15, 2013, 09:04:32 pm »
YEAHEAH!
En réinstallant Codeblocks 12.11 avec GCC et en utilisant la version correspondant de SFML, ça fonctionne, compile, link, se lance, et affiche une fenêtre!

Merci de ton aide, je passe le sujet en résolu  :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu]Problème de link statique avec Codeblock e SFML 2.0
« Réponse #13 le: Juillet 15, 2013, 09:53:53 pm »
Citer
D'ailleurs une petite question compilation : si je choisis un compilateur GCC 64bits (je sais pas si il existe sur Windows) et SFML TDM SJLJ 64 bits, cela signifie que mon programme ne pourra tourner que sur des architectures et OS 64 bits, j'ai bon?
Oui.

Citer
Et si j'utilise les versions 32 bits, mon programme sera compatible sur les architecture 32 et 64 bits, mais peut-être moins optimisé pour l'architecture 64 bits?
Est-ce que je suis dans le vrai?
On peut dire ça, oui.

Citer
En réinstallant Codeblocks 12.11 avec GCC et en utilisant la version correspondant de SFML, ça fonctionne, compile, link, se lance, et affiche une fenêtre!
Content que ça marche :)
Laurent Gomila - SFML developer

 

anything