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

Auteur Sujet: Problème de compilation avec cmake sous windows  (Lu 3698 fois)

0 Membres et 1 Invité sur ce sujet

ibtiss

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Problème de compilation avec cmake sous windows
« le: Juillet 16, 2014, 12:50:35 pm »
Bonjour,

J'essaye de compiler la SFML dans un projet de manière statique en utilisant CMake. Pour ce faire, j'utilise les sources de la SFML. Sous linux, tout va bien la compilation a lieu et le programme s'éxecute sans soucis. Par contre, sous windows j'éprouve des difficultées. J'utilise windows 7 64bits avec qt creator et mingw

J'ai tout d'abord essayé avec les sources de la SFML disponibles depuis le site (SFML-2.1) et CMake retourne des erreurs qui proviennent de Macros.cmake qui se trouve dans le dossier cmake. Il me marque en effet : ligne 24 : string - no output variable specified. Cette erreur est présente à chaque fois que la macro sfml_static_add_libraries est appelée.

J'ai ensuite essayé avec les sources disponibles sur github. Dans ce cas, CMake s'éxécute correctement et c'est au moment de compiler que rien ne va plus car j'obtiens des erreurs du type : undifined reference to '_imp__ZN2sf'

Dans tous les cas j'utilise le fichier CMakeLists.txt suivant (au nom du dossier de la SFML près):

cmake_minimum_required(VERSION 2.8)

project(sfml_test)

option(BUILD_SHARED_LIBS FALSE BOOL)
if(WINDOWS)
        option(SFML_USE_STATIC_STD_LIBS TRUE BOOL)
endif()
add_subdirectory(SFML-master)

include_directories(
        SFML-master/include
)

add_executable(sfml_test
        main.cpp
)

target_link_libraries(sfml_test
        sfml-graphics
        sfml-window
        sfml-audio
        sfml-system
)

Après des recherches sur divers forums, je n'ai pas trouvé de solution à mon problème. Je sais que lier la sfml de cette manière n'est pas forcément le mieux mais c'est impératif dans mon projet.

Merci d'avance pour vos réponses.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de compilation avec cmake sous windows
« Réponse #1 le: Juillet 16, 2014, 12:59:58 pm »
Citer
j'obtiens des erreurs du type : undifined reference to '_imp__ZN2sf'
Ca peut aider d'avoir les vrais noms ;)

Sinon, pourquoi est-ce que tu ne compiles pas SFML à part ? C'est assez inhabituel ce que tu fais.
Laurent Gomila - SFML developer

ibtiss

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Problème de compilation avec cmake sous windows
« Réponse #2 le: Juillet 16, 2014, 02:09:04 pm »
Merci pour cette réponse rapide.

Voici les vrais noms :
undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
undefined reference to `_imp___ZN2sf6WindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
undefined reference to `_imp___ZNK2sf6Window6isOpenEv'
undefined reference to `_imp___ZN2sf6WindowD1Ev'

et le programme qui va avec :
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

int main ()
{
    sf::Window App (sf::VideoMode (800, 600, 32), "SFML_Testing");

    while (App.isOpen ())
    {

    }
   
    return 0;
}
 

Et du coup je ne compile pas la SFML à part car le programme est destiné à être utilisé par des personnes  qui ne connaissent pas grand chose à la programmation et ils doivent pouvoir faire quelques modifications simples dans le programme et de plus le programme doit pouvoir être mis en place sur différentes machines qui n'ont pas le même système d'exploitation et ceci après mon départ. C'est déjà beaucoup leur demander de compiler juste le programme alors si en plus ils doivent installer séparément les librairies, je ne suis vraiment pas sûr qu'ils y arriveront. Jusque là c'est la meilleure solution que j'ai trouvé mais je reste ouvert à toutes les propositions.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de compilation avec cmake sous windows
« Réponse #3 le: Juillet 16, 2014, 02:48:02 pm »
A mon avis, BUILD_SHARED_LIBS est écrasé par les fichiers CMake de SFML. Ca se voit car ton exécutable essaye de lier aux bibliothèques dynamiques de SFML.

Essaye de mettre BUILD_SHARED_LIBS à false lorsque tu invoques CMake, plutôt que directement dans ton fichier de build.
Laurent Gomila - SFML developer

ibtiss

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Problème de compilation avec cmake sous windows
« Réponse #4 le: Juillet 16, 2014, 03:27:15 pm »
Très bien je vais essayer ça merci

ibtiss

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Problème de compilation avec cmake sous windows
« Réponse #5 le: Juillet 16, 2014, 06:30:14 pm »
Bon du coup j'ai essayé de mettre BUILD_SHARED_LIBS à false lorsque j'invoque CMake mais j'obtiens toujours le même résultat. J'ai donc tenté de modifier directement la valeur par défaut de BUILD_SHARED_LIBS dans le CMakeLists.txt de la SFML et ça n'a pas marché non plus.

En tout cas dans les fichiers produits par CMake, je retrouve tous les fichiers produits sous linux concernant la SFML sous windows,  notament les fichiers libsfml-audio.a, etc.

Donc si je comprend bien, la partie compilation de la librairie se déroule bien et c'est au moment ou j'essaye de lier le programme que ça ne va plus. c'est donc au moment ou j'appelle target_link_libraries() qu'au lieu de chercher les librairies statiques il cherhce les librairies dynamiques? Es-ce que tu vois d'où ce problème pourrait venir?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de compilation avec cmake sous windows
« Réponse #6 le: Juillet 16, 2014, 09:00:01 pm »
Non. Ce sont les bibliothèques dynamiques qui sont compilées, donc peu importe ce que tu fais pour ton exécutable, ça ne marchera pas si tu t'attends à avoir des bibliothèques statiques.

Si tu compiles SFML séparément avec BUILD_SHARED_LIBS=false ça produit bien les bibliothèques statiques non ?
Laurent Gomila - SFML developer

ibtiss

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Problème de compilation avec cmake sous windows
« Réponse #7 le: Juillet 17, 2014, 02:09:42 pm »
Non ce sont bien les librairies statiques qui sont compilées, que je mette BUILD_SHARED_LIBS a false en argument à cmake ou que je le mette dans mon CMakeLists.txt, j'obtiens le même résultat c'est à dire que dans le dossier lib obtenu j'ai des *.a.

Si je compile la SFML séparément j'obtiens également les *.a dans le dossier lib créé donc tout semble se dérouler de la même manière en tout cas de ce que j'ai pu en voir.

Du coup j'ai eu l'idée de rajouter #define SFML_STATIC dans mon programme, ce que je ne faisais pas jusque là et le problème semble réglé, la compilation se déroule bien.

Merci beaucoup en tout cas pour le temps que tu m'as accordé.

PS: Je ne sais pas si il y a un moyen de marquer le sujet comme résolu sur ce forum, mais c'est le cas
« Modifié: Juillet 17, 2014, 02:13:03 pm par ibtiss »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème de compilation avec cmake sous windows
« Réponse #8 le: Juillet 17, 2014, 02:40:45 pm »
Ah oui en effet, c'était tout bête en fait. Désolé de ne pas l'avoir vu tout de suite.
Laurent Gomila - SFML developer

ibtiss

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Problème de compilation avec cmake sous windows
« Réponse #9 le: Juillet 17, 2014, 03:37:19 pm »
Il n'y a pas de soucis, c'est déja formidable que tu prennes le temps de répondre aux problèmes rencontrés par les gens.