-
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 (http://www.sfml-dev.org/tutorials/2.1/start-linux-fr.php) (et me suis aidé de deux autres tutoriels : tutoriel 1 (http://en.sfml-dev.org/forums/index.php?topic=2246.msg27416#msg27416), tutoriel 2 (http://razoras.livejournal.com/36934.html)) 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.
-
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.
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.
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.
De plus j'ai remarqué qu'il n'y avait pas de fichier .dll dans l'archive
Sous Linux ce sont les fichiers .so.
-
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 (http://www.sfml-dev.org/tutorials/2.1/start-linux-fr.php) 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
-
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.
-
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 ?
-
Tu as installé GLEW après l'avoir compilé ?
-
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.
-
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 (http://www.sfml-dev.org/tutorials/2.1/start-linux-fr.php) :
#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 (http://en.sfml-dev.org/forums/index.php?topic=7700.msg51310#msg51310) que je vous retransmet :
Télécharger libjpeg.so.8 à l'adresse http://www.ijg.org/files/jpegsrc.v8a.tar.gz (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/ (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.