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

Auteur Sujet: Problème d'ajout SFML comme bibliothèque externe sur CLion  (Lu 5178 fois)

0 Membres et 1 Invité sur ce sujet

bokoblin

  • Newbie
  • *
  • Messages: 24
    • Voir le profil
Problème d'ajout SFML comme bibliothèque externe sur CLion
« le: Juillet 19, 2016, 08:07:05 pm »
Bonjour, j'essaye depuis hier d'ajouter la SFML sur CLion à un projet importé (qui fonctionnait avec Code::Blocks), mais je ne connais pas bien le fonctionnement du CMakeLists.txt. J'ai donc essayé en me basant sur des sujets similaires mais j'obtiens les erreurs suivantes :

"C:\Program Files (x86)\JetBrains\CLion 2016.1.3\bin\cmake\bin\cmake.exe" --build C:\Users\Arthur\.CLion2016.1\system\cmake\generated\runner-f97632df\f97632df\Debug --target all -- -j 4
[  3%] Linking CXX executable runner.exe
CMakeFiles\runner.dir/objects.a(AnimatedGraphicElement.cpp.obj): In function `AnimatedGraphicElement::AnimatedGraphicElement(sf::Texture&, float, float, float, float, std::vector<sf::Rect<int>, std::allocator<sf::Rect<int> > > const&)':
D:/Arthur/Documents/IUT/Prog Objet/Projet/POO-Runner/runner/Sources/AnimatedGraphicElement.cpp:15: undefined reference to `__imp__ZN2sf6Sprite14setTextureRectERKNS_4RectIiEE'
CMakeFiles\runner.dir/objects.a(AnimatedGraphicElement.cpp.obj): In function `AnimatedGraphicElement::AnimatedGraphicElement(AnimatedGraphicElement const&)':
D:/Arthur/Documents/IUT/Prog Objet/Projet/POO-Runner/runner/Sources/AnimatedGraphicElement.cpp:28: undefined reference to `__imp__ZN2sf6Sprite14setTextureRectERKNS_4RectIiEE'
CMakeFiles\runner.dir/objects.a(AnimatedGraphicElement.cpp.obj): In function `AnimatedGraphicElement::sync()':
D:/Arthur/Documents/IUT/Prog Objet/Projet/POO-Runner/runner/Sources/AnimatedGraphicElement.cpp:67: undefined reference to `__imp__ZN2sf6Sprite14setTextureRectERKNS_4RectIiEE'
CMakeFiles\runner.dir/objects.a(AnimatedGraphicElement.cpp.obj):AnimatedGraphicElement.cpp:(.rdata$_ZTV22AnimatedGraphicElement[_ZTV22AnimatedGraphicElement]+0x20): undefined reference to `sf::Sprite::draw(sf::RenderTarget&, sf::RenderStates) const'
CMakeFiles\runner.dir/objects.a(Button.cpp.obj): In function `Button::Button(std::vector<sf::Rect<int>, std::allocator<sf::Rect<int> > > const&, sf::Texture&, float, float, float, float, bool)':
D:/Arthur/Documents/IUT/Prog Objet/Projet/POO-Runner/runner/Sources/Button.cpp:14: undefined reference to `__imp__ZN2sf6Sprite14setTextureRectERKNS_4RectIiEE'

(...)

D:/Arthur/Documents/IUT/Prog Objet/Projet/POO-Runner/runner/Sources/Text.cpp:665: undefined reference to `__imp__ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\runner.dir\build.make:852: recipe for target 'runner.exe' failed
mingw32-make.exe[2]: *** [runner.exe] Error 1
mingw32-make.exe[1]: *** [CMakeFiles/runner.dir/all] Error 2
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/runner.dir/all' failed
makefile:82: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 2

==============================================

Voici le contenu de mon CMakeLists.txt :

cmake_minimum_required(VERSION 3.5)
project(runner)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(EXECUTABLE_NAME ${PROJECT_NAME})

set(SFMLDIR "C:/Program Files/SFML-2.3.2")
set(PUGIDIR "${PROJECT_SOURCE_DIR}/Libs/pugixml-1.7/")

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${SFMLDIR}/cmake/Modules/")
set(SFML_LIBRARIES "${SFMLDIR}/lib")
set(SFML_INCLUDE_DIR "${SFMLDIR}/include")

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PUGIDIR}/cmake/Modules/")
set(PUGI_LIBRARIES "${PUGIDIR}/src")
set(PUGI_INCLUDE_DIR "${PUGIDIR}/src")

set(SOURCE_FILES
    Sources/AnimatedGraphicElement.cpp
    Sources/AnimatedGraphicElement.h
    Sources/Bonus.cpp
    Sources/Bonus.h
(...)
    Sources/Text.cpp
    Sources/Text.h
    Sources/View.cpp
    Sources/View.h)

add_executable(runner ${SOURCE_FILES})

find_package(PUGI)
find_package(SFML 2 COMPONENTS system window graphics network audio)

include_directories("${PUGIDIR}/src" ${SFML_INCLUDE_DIR})
target_link_libraries(${EXECUTABLE_NAME} "${PUGIDIR}/src" ${SFML_LIBRARIES})

====================================

Note : J'essaye aussi de linker la bibliothèque PugiXml avec les mêmes erreurs

Merci d'avance

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #1 le: Juillet 19, 2016, 11:35:36 pm »
je suis pas un "pro" du cmake, j'utilise toujours :

cmake_minimum_required(VERSION 2.6)
set(PROJECT_NAME CeQueTuVeut)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#Configuration du projet
project(${PROJECT_NAME})


#Includes
include_directories(include)

set(SFML_DEPENDENCIES   -lsfml-window
                                                -lsfml-graphics
                                                -lsfml-audio
                                                -lsfml-network
                                                -lsfml-system                                                                                  
                                                )

#Configuration de l'exécutable
file(
        GLOB_RECURSE
        source_files
        src/*
)


add_executable(
        ${PROJECT_NAME}
        ${source_files}
)

target_link_libraries(
        ${PROJECT_NAME}
        ${SFML_DEPENDENCIES}
        )
 

& ca marche pour une dépendance dynamique avec c++11 activé avec g++ ou mingw sous windows.
avec une structure de projet simple :

- Root
--include
--src
--build
-CMakeLists.txt

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #2 le: Juillet 20, 2016, 07:55:37 am »
Citer
set(SFML_LIBRARIES "${SFMLDIR}/lib")
set(SFML_INCLUDE_DIR "${SFMLDIR}/include")
Je ne sais pas si cela a un rapport avec ton problème, mais en tout cas cela ne sert à rien puisque ces variables vont être définies automatiquement par l'appel à find_package(SFML ...). Que contient la variable SFML_LIBRARIES après configuration ? Est-ce que c'est correct ou pas ?

Citer
set(SFML_DEPENDENCIES   -lsfml-window
                        -lsfml-graphics
                        -lsfml-audio
                        -lsfml-network
                        -lsfml-system                                          
                        )
Cela suppose tout un tas de choses. Il faut utiliser find_package(SFML ...) pour être vraiment générique.
Laurent Gomila - SFML developer

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #3 le: Juillet 20, 2016, 01:47:31 pm »
Citer
Cela suppose tout un tas de choses
cela suppose entre autre que la sfml est installé (pour windows ) dans les dossiers du compilateur ( include & lib & bin ) , sous linux, pas de soucis. c'est automatique.
je ne veut pas de la SFML dans des dossiers comme "program files", d'ou la non utilisation du module. :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #4 le: Juillet 20, 2016, 07:25:25 pm »
Citer
cela suppose entre autre que la sfml est installé (pour windows ) dans les dossiers du compilateur ( include & lib & bin ) , sous linux, pas de soucis. c'est automatique.
Non. Beaucoup de gens compilent et installent leurs bibliothèques dans leur home. Il se peut aussi que certains chemins d'installation "standard" pour le système ne le soient pas pour le compilateur et l'éditeur de liens.

Cela suppose aussi que tu utilises la variante release/shared de SFML.
Laurent Gomila - SFML developer

bokoblin

  • Newbie
  • *
  • Messages: 24
    • Voir le profil
Re : Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #5 le: Juillet 20, 2016, 09:34:35 pm »

Citer
set(SFML_LIBRARIES "${SFMLDIR}/lib")
set(SFML_INCLUDE_DIR "${SFMLDIR}/include")
Je ne sais pas si cela a un rapport avec ton problème, mais en tout cas cela ne sert à rien puisque ces variables vont être définies automatiquement par l'appel à find_package(SFML ...). Que contient la variable SFML_LIBRARIES après configuration ? Est-ce que c'est correct ou pas ?
Je ne savais pas si c'était utile ou non c'est pour ça que je les ai laissé mais je vais les enlever si ils ne servent à rien.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #6 le: Juillet 20, 2016, 10:03:53 pm »
Citation de: Laurent
Que contient la variable SFML_LIBRARIES après configuration ? Est-ce que c'est correct ou pas ?
Laurent Gomila - SFML developer

bokoblin

  • Newbie
  • *
  • Messages: 24
    • Voir le profil
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #7 le: Juillet 20, 2016, 10:08:48 pm »
Comment je peux faire ?

Edit: J'ai trouvé. Cela donne :

-- SFML_LIBRARIES=C:/Program Files/SFML-2.3.2/lib;

Mais cela ne marche pas j'ai pu afficher aussi :

-- SFML_CONFIG_HPP_INPUT=C:/Program Files/SFML-2.3.2/include/SFML/Config.hpp
-- SFML_FOUND=FALSE
-- SFML_GRAPHICS_FOUND=FALSE
-- SFML_GRAPHICS_LIBRARY=
-- SFML_GRAPHICS_LIBRARY=
-- SFML_GRAPHICS_LIBRARY_DEBUG=
« Modifié: Juillet 20, 2016, 10:14:43 pm par bokoblin »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #8 le: Juillet 20, 2016, 10:55:32 pm »
Ajoute l'argument REQUIRED à find_package(SFML ...). Ca provoquera une erreur fatale si SFML n'est pas trouvée -- ce qui semble être le cas ici.

Si SFML n'est pas installée dans un endroit standard, il faut aider un peu CMake en définissant la variable SFML_ROOT.
Laurent Gomila - SFML developer

bokoblin

  • Newbie
  • *
  • Messages: 24
    • Voir le profil
Re : Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #9 le: Juillet 20, 2016, 11:03:53 pm »
Ajoute l'argument REQUIRED à find_package(SFML ...). Ca provoquera une erreur fatale si SFML n'est pas trouvée -- ce qui semble être le cas ici.

Si SFML n'est pas installée dans un endroit standard, il faut aider un peu CMake en définissant la variable SFML_ROOT.

============================

Ca marche avec SFML_ROOT , j'ai plus que des messages liés à PugiXml, je dois donc faire de même.
Merci



Revoici le cmakelists.txt au cas où :

cmake_minimum_required(VERSION 3.5)

#Configuration du projet
set(PROJECT_NAME runner)
project(${PROJECT_NAME})
set(EXECUTABLE_NAME ${PROJECT_NAME})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#include_directories("${PROJECT_SOURCE_DIR}/Libs")

set(SFMLDIR "C:/Program Files/SFML-2.3.2")
set(SFML_ROOT "C:/Program Files/SFML-2.3.2")

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${SFMLDIR}/cmake/Modules/")
set(SFML_LIBRARIES "${SFMLDIR}/lib")
set(SFML_INCLUDE_DIR "${SFMLDIR}/include")

set(SOURCE_FILES
    Sources/AnimatedGraphicElement.cpp
    Sources/AnimatedGraphicElement.h

(...)

    Sources/View.cpp
    Sources/View.h
        )

add_executable(runner ${SOURCE_FILES})

#find_package(PUGI)
find_package(SFML 2 COMPONENTS system window graphics audio REQUIRED)

include_directories( ${SFML_INCLUDE_DIR} )

target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
« Modifié: Juillet 20, 2016, 11:08:04 pm par bokoblin »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #10 le: Juillet 21, 2016, 08:30:21 am »
Citer
set(SFMLDIR "C:/Program Files/SFML-2.3.2")
Ca c'est inutile.

Citer
set(SFML_ROOT "C:/Program Files/SFML-2.3.2")
Ca on évite généralement de le mettre dans le fichier CMakeLists.txt, on le garde pour les variables "dynamiques" (comme ça ton projet peut être utilisé ailleurs que sur ton propre PC).
Laurent Gomila - SFML developer

bokoblin

  • Newbie
  • *
  • Messages: 24
    • Voir le profil
Re : Re : Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #11 le: Juillet 21, 2016, 08:00:13 pm »
Citer
set(SFMLDIR "C:/Program Files/SFML-2.3.2")
Ca c'est inutile.

Citer
set(SFML_ROOT "C:/Program Files/SFML-2.3.2")
Ca on évite généralement de le mettre dans le fichier CMakeLists.txt, on le garde pour les variables "dynamiques" (comme ça ton projet peut être utilisé ailleurs que sur ton propre PC).

Ok j'ai rectifié CMakeList, merci.
Edit: C'est bon Build success, après ça plante au démarrage, impossible de débugger, ça plante avant la première ligne du main.cpp :/
« Modifié: Juillet 22, 2016, 06:48:28 pm par bokoblin »

tleger1958

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
    • E-mail
Re: Problème d'ajout SFML comme bibliothèque externe sur CLion
« Réponse #12 le: Juin 27, 2017, 04:25:43 pm »
Si ça bug toujours, va voir ici : https://oxymeos.shost.ca/article.php?a_propos=travailler_avec_la_SFML_dans_CLion

Ça a marché pour moi.
« Modifié: Juin 27, 2017, 05:03:49 pm par tleger1958 »