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

Auteur Sujet: Configurer Eclipse pour la SFML sous Linux.  (Lu 7599 fois)

0 Membres et 1 Invité sur ce sujet

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Configurer Eclipse pour la SFML sous Linux.
« le: Septembre 06, 2013, 10:25:15 am »
Bonjour.
Je souhaiterais utiliser la bibliothèque SFML sur mon ordinateur sous Linux en utilisant mon IDE Éclipse, seulement je rencontre quelques difficultés au niveau de l'installation. J'ai suivi le tutoriel officiel (et me suis aidé de deux autres tutoriels : tutoriel 1, tutoriel 2) pour ce qui est de l'installation à savoir :
  • J'ai téléchargé l'archive "SFML-2.1-linux-gcc-32bits.tar.bz2" que j'ai décompressé.
  • J'ai copié manuellement en lignes de commandes les dossier dans leurs emplacements respectifs (les includes dans /usr/include, les lib dans /usr/lib, et share dans /usr/share)
Puis dans l'IDE Éclipse j'y ai ajouté les liens suivants :
  • Les includes path : "/usr/include/SFML"
  • Les librairies : "/usr/lib/libsfml-system.so"
  • Les library search path : "/usr/lib"
Seulement lorsque je compile j'obtiens les erreurs suivantes :
**** Build of configuration Debug for project Cpp_SFML_test ****

make all
Building target: Cpp_SFML_test
Invoking: GCC C++ Linker
g++ -L/usr/lib -o"Cpp_SFML_test"  ./main.o   -l/usr/lib/libsfml-system.so
/usr/bin/ld: cannot find -l/usr/lib/libsfml-system.so
collect2: ld returned 1 exit status
make: *** [Cpp_SFML_test] Erreur 1
 
Pourtant j'ai vérifié le fichier existe bel et bien.

De plus j'ai remarqué qu'il n'y avait pas de fichier .dll dans l'archive, du coup comment une fois le programme compilé et l'exécutable généré je vais faire pour assurer le fonctionnement de mon futur programme ?

Je vous remercie tous d'avance.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Configurer Eclipse pour la SFML sous Linux.
« Réponse #1 le: Septembre 06, 2013, 10:53:02 am »
Citer
J'ai copié manuellement en lignes de commandes les dossier dans leurs emplacements respectifs (les includes dans /usr/include, les lib dans /usr/lib, et share dans /usr/share)
Ca devrait être dans /usr/local plutôt que dans /usr (qui est réservé à ce que le système installe automatiquement), mais bon ça c'est pas trop grave.

Citer
Les includes path : "/usr/include/SFML"
Ca devrait être "/usr/include" (puisque "SFML" fait partie de ce que tu inclus, par exemple <SFML/Graphics.hpp>). Donc rien du tout puisque c'est déjà un chemin standard du compilateur.

Citer
Les librairies : "/usr/lib/libsfml-system.so"
Plutôt "sfml-system", de sorte que sur la ligne de commande tu aies "-lsfml-system", qui sera interprété comme "libsfml-system.so" et correctement trouvé puisque tu as "/usr/lib" dans tes chemins de recherche de l'éditeur de liens.

Citer
De plus j'ai remarqué qu'il n'y avait pas de fichier .dll dans l'archive
Sous Linux ce sont les fichiers .so.
Laurent Gomila - SFML developer

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : Configurer Eclipse pour la SFML sous Linux.
« Réponse #2 le: Septembre 06, 2013, 04:46:50 pm »
Merci Laurent pour tes indications.
J'ai fait les modifications que tu m'as indiqué, et maintenant j'ai des erreurs de compilation (c'est bon signe donc :) ). J'essaye de compiler le code-test proposé dans le tutoriel mais à la compilations, j'ai des erreurs sur les objets "RenderWindow" et "CircleShape".

**** Build of configuration Debug for project Cpp_SFML_test ****

make all
Building target: Cpp_SFML_test
Invoking: GCC C++ Linker
g++ -L/usr/lib -o"Cpp_SFML_test"  ./main.o   -lsfml-system
./main.o: In function `main':
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:5: undefined reference to `sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:5: undefined reference to `sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:6: undefined reference to `sf::CircleShape::CircleShape(float, unsigned int)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:5: undefined reference to `sf::RenderWindow::~RenderWindow()'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:7: undefined reference to `sf::Color::Green'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:7: undefined reference to `sf::Shape::setFillColor(sf::Color const&)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:15: undefined reference to `sf::Window::close()'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:12: undefined reference to `sf::Window::pollEvent(sf::Event&)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:18: undefined reference to `sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned char)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:18: undefined reference to `sf::RenderTarget::clear(sf::Color const&)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:19: undefined reference to `sf::RenderStates::Default'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:19: undefined reference to `sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&)'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:20: undefined reference to `sf::Window::display()'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:9: undefined reference to `sf::Window::isOpen() const'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:23: undefined reference to `sf::RenderWindow::~RenderWindow()'
/home/cedric/Documents/Eclipse/Cpp_SFML_test/Debug/../main.cpp:23: undefined reference to `sf::RenderWindow::~RenderWindow()'
./main.o: In function `~CircleShape':
/usr/include/SFML/Graphics/CircleShape.hpp:42: undefined reference to `vtable for sf::CircleShape'
/usr/include/SFML/Graphics/CircleShape.hpp:42: undefined reference to `vtable for sf::CircleShape'
/usr/include/SFML/Graphics/CircleShape.hpp:42: undefined reference to `sf::Shape::~Shape()'
collect2: ld returned 1 exit status
make: *** [Cpp_SFML_test] Erreur 1
 

J'ai donc essayé de rajouter les librairies sfml-graphics et sfml-window mais sans succès : Il ne trouve pas "libsfml-graphics.so" qui pourtant existe bien à l'adresse indiquée.

**** Build of configuration Debug for project Cpp_SFML_test ****

make all
Building target: Cpp_SFML_test
Invoking: GCC C++ Linker
g++ -L/usr/lib -o"Cpp_SFML_test"  ./main.o   -lsfml-system -lsfml-window -lsfml-graphics
/usr/bin/ld: warning: libGLEW.so.1.7, needed by /usr/lib/libsfml-graphics.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libjpeg.so.8, needed by /usr/lib/libsfml-graphics.so, not found (try using -rpath or -rpath-link)
/usr/lib/libsfml-graphics.so: undefined reference to `__glewDeleteFramebuffersEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewUniformMatrix4fvARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__GLEW_EXT_blend_func_separate'
/usr/lib/libsfml-graphics.so: undefined reference to `__GLEW_ARB_shading_language_100'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_stdio_dest@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewGetHandleARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewBindFramebufferEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewGenFramebuffersEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewCheckFramebufferStatusEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewAttachObjectARB'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_CreateCompress@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewRenderbufferStorageEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__GLEW_ARB_fragment_shader'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewUniform1fARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewFramebufferTexture2DEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewLinkProgramARB'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_set_defaults@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewGetObjectParameterivARB'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_destroy_compress@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__GLEW_ARB_shader_objects'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewUniform2fARB'
/usr/lib/libsfml-graphics.so: undefined reference to `glewInit'
/usr/lib/libsfml-graphics.so: undefined reference to `__GLEW_EXT_framebuffer_object'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_set_quality@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewDeleteRenderbuffersEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__GLEW_ARB_texture_non_power_of_two'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewDeleteObjectARB'
/usr/lib/libsfml-graphics.so: undefined reference to `glewGetErrorString'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewCreateProgramObjectARB'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_write_scanlines@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewUseProgramObjectARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewCreateShaderObjectARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewUniform3fARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewGetInfoLogARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewUniform1iARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewUniform4fARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewGenRenderbuffersEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewBlendFuncSeparateEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewGetUniformLocationARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewActiveTextureARB'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_start_compress@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_std_error@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewCompileShaderARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__GLEW_ARB_vertex_shader'
/usr/lib/libsfml-graphics.so: undefined reference to `jpeg_finish_compress@LIBJPEG_8.0'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewShaderSourceARB'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewBindRenderbufferEXT'
/usr/lib/libsfml-graphics.so: undefined reference to `__glewFramebufferRenderbufferEXT'
collect2: ld returned 1 exit status
make: *** [Cpp_SFML_test] Erreur 1
 

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Configurer Eclipse pour la SFML sous Linux.
« Réponse #3 le: Septembre 06, 2013, 06:19:54 pm »
Lis bien le message d'erreur, ce sont libGLEW.so.1.7 et libjpeg.so.8 qui ne sont pas trouvées. Il faudra soit installer ces versions, soit recompiler SFML.
« Modifié: Septembre 07, 2013, 09:12:11 am par Laurent »
Laurent Gomila - SFML developer

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : Configurer Eclipse pour la SFML sous Linux.
« Réponse #4 le: Septembre 07, 2013, 12:10:57 am »
En effet, j'ai donc procédé à l'installation de libjpeg.so.8, mais je rencontre des difficultés avec libGLEW.so.1.7 : Je l'ai téléchargé et décompressé, exécuté la commande "make" comme indiqué dans le README.txt, mais j'ai toujours la même erreur type "/usr/bin/ld: warning: libGLEW.so.1.7, needed by /usr/lib/libsfml-graphics.so, not found"

cedric@cedric-laptop:~/Téléchargements$ tar xvfz glew-1.7.0.tgz
[...]
cedric@cedric-laptop:~/Téléchargements$ cd glew-1.7.0/
cedric@cedric-laptop:~/Téléchargements/glew-1.7.0$ make
cc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude  -fPIC  -o src/glew.pic_o -c src/glew.c
cc -shared -Wl,-soname=libGLEW.so.1.7 -o lib/libGLEW.so.1.7.0 src/glew.pic_o -L/usr/X11R6/lib -lXmu -lXi -lGLU -lGL -lXext -lX11
ln -sf libGLEW.so.1.7.0 lib/libGLEW.so.1.7
ln -sf libGLEW.so.1.7.0 lib/libGLEW.so
cc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude   -o src/glew.o -c src/glew.c
ar cr lib/libGLEW.a src/glew.o
sed \
                -e "s|@prefix@|/usr|g" \
                -e "s|@libdir@|/usr/lib|g" \
                -e "s|@exec_prefix@|/usr/bin|g" \
                -e "s|@includedir@|/usr/include/GL|g" \
                -e "s|@version@|1.7.0|g" \
                -e "s|@cflags@||g" \
                -e "s|@libname@|GLEW|g" \
                < glew.pc.in > glew.pc
cc -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude  -fPIC  -o src/glew.mx.pic_o -c src/glew.c
cc -shared -Wl,-soname=libGLEWmx.so.1.7 -o lib/libGLEWmx.so.1.7.0 src/glew.mx.pic_o -L/usr/X11R6/lib -lXmu -lXi -lGLU -lGL -lXext -lX11
ln -sf libGLEWmx.so.1.7.0 lib/libGLEWmx.so.1.7
ln -sf libGLEWmx.so.1.7.0 lib/libGLEWmx.so
cc -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude   -o src/glew.mx.o -c src/glew.c
ar cr lib/libGLEWmx.a src/glew.mx.o
sed \
                -e "s|@prefix@|/usr|g" \
                -e "s|@libdir@|/usr/lib|g" \
                -e "s|@exec_prefix@|/usr/bin|g" \
                -e "s|@includedir@|/usr/include/GL|g" \
                -e "s|@version@|1.7.0|g" \
                -e "s|@cflags@|-DGLEW_MX|g" \
                -e "s|@libname@|GLEWmx|g" \
                < glew.pc.in > glewmx.pc
cc -c -O2 -Wall -W -Iinclude  -o src/glewinfo.o src/glewinfo.c
cc -O2 -Wall -W -Iinclude  -o bin/glewinfo src/glewinfo.o -Llib -Wl,-Bdynamic -lGLEW -L/usr/X11R6/lib -lXmu -lXi -lGLU -lGL -lXext -lX11
cc -c -O2 -Wall -W -Iinclude  -o src/visualinfo.o src/visualinfo.c
cc -O2 -Wall -W -Iinclude  -o bin/visualinfo src/visualinfo.o -Llib -Wl,-Bdynamic -lGLEW -L/usr/X11R6/lib -lXmu -lXi -lGLU -lGL -lXext -lX11
 

Est-ce que je dois donc recompiler la SFML et si oui comment ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Configurer Eclipse pour la SFML sous Linux.
« Réponse #5 le: Septembre 07, 2013, 09:13:00 am »
Tu as installé GLEW après l'avoir compilé ?
Laurent Gomila - SFML developer

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : Configurer Eclipse pour la SFML sous Linux.
« Réponse #6 le: Septembre 07, 2013, 09:20:02 am »
Pardon, erreur bête de ma part. Je n'ai fait que "make" et non "make install".  :P

Impeccable tout marche parfaitement merci beaucoup de ton aide. Je vais faire un petit tutoriel/résumé de toutes les actions que j'ai réalisé pour installer SFML sur Linux, dans le cas où d'autres débutants en auraient besoin.

zedex

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
Re : Configurer Eclipse pour la SFML sous Linux.
« Réponse #7 le: Septembre 07, 2013, 10:32:08 am »
Voici donc la façon dont j'ai procédé pour installer SFML-2.1 sur ma machine Linux et comment configurer Éclipse pour qu'il puisse le supporter.

Pour commencer j'ai téléchargé et extrait l'archive et copié les includes les librairies dans les dossiers systèmes :
cd Téléchargements/
tar -jxvf SFML-2.1-linux-gcc-32bits.tar.bz2
cp -r SFML-2.1/ /usr/local/

Il faut ensuite spécifier à Éclipse comment utiliser cette librairie. Commencer par créer un nouveau projet type "Hello World" et remplacer le code par celui du tutoriel pour la SFML-2.1 :
#include <SFML/Graphics.hpp>

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

Clic droit sur le projet → proprieties

C/C++ Build  → Settings → Gcc C++ Compiler → Directories cliquez sur le petit "+" et entrez "/usr/local/SFML-2.1/include"

C/C++ Build  → Settings → Gcc C++ Linker → Librairies dans Library search path (-L) ajoutez "/usr/local/SFML-2.1/lib" et dans Librairies (-l) :
  • sfml-system
  • sfml-graphics
  • sfml-window

Voilà, normalement Éclipse devrait pouvoir compiler.
Lors de son installation j'ai tout de même rencontré des problèmes à la compilation :
/usr/bin/ld: warning: libGLEW.so.1.7, needed by /usr/lib/libsfml-graphics.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libjpeg.so.8, needed by /usr/lib/libsfml-graphics.so, not found (try using -rpath or -rpath-link)

Apparemment libGLEW.so.1.7 et libjpeg.so.8 ne sont pas installés. Pour ce faire je me suis aidé de cette discussion que je vous retransmet :
Télécharger libjpeg.so.8 à l'adresse http://www.ijg.org/files/jpegsrc.v8a.tar.gz et libGLEW.so.1.7 à l'adresse http://sourceforge.net/projects/glew/files/glew/1.7.0/ puis entrez dans une console:

cd Téléchargements
tar xvfz jpegsrc.v8a.tar.gz
cd jpeg-8a
./configure
sudo make
sudo make install
ldconfig

cd Téléchargements
tar xvfz glew-1.7.0.tgz
cd glew-1.7.0
sudo make
sudo make install

Relancez la compilation de votre programme, normalement il devrait fonctionner.

Je tiens à remercier Laurent pour son aide précieuse et très claire. Merci.
« Modifié: Septembre 07, 2013, 10:49:05 am par zedex »