2 votes

Comment intégrer la bibliothèque glut dans un projet c++ ?

J'ai un projet c++ mais lorsque je le distribue, je dois installer libglut.so.3.. :

./bin: error while loading shared libraries: libglut.so.3: cannot open shared object file: No such file or directory

Je veux que l'utilisateur n'ait pas à installer cette dépendance. Comment intégrer la bibliothèque dans le projet ?

J'essaie de compiler en tant que bibliothèque statique dans un projet c++ en utilisant g++. Mon fichier make contient :

@g++ \
    -o bin \
    -std=c++11 \
    main.cpp \
    -lm -lGL -lGLU -lglut \
    ;

J'essaie de définir glut comme une bibliothèque statique :

-lm -lGL -lGLU -Wl,-Bstatic -lglut -Wl,-Bdynamic

Mais le compilateur dit :

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libglut.a(libglut_la-freeglut_state.o): undefined reference to symbol 'XGetWindowAttributes'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libX11.so: error adding symbols: DSO missing from command line

J'ai essayé de télécharger freeglut-3.0.0 et de le compiler en tant que bibliothèque statique :

Changer CMakeLists.txt pour la compilation statique :

OPTION(FREEGLUT_BUILD_SHARED_LIBS "Build FreeGLUT shared library." OFF)
OPTION(FREEGLUT_BUILD_STATIC_LIBS "Build FreeGLUT static library." ON)

Et dans le CMakeCache.txt :

//Build FreeGLUT shared library.
FREEGLUT_BUILD_SHARED_LIBS:BOOL=OFF

//Build FreeGLUT static library.
FREEGLUT_BUILD_STATIC_LIBS:BOOL=ON

Et le compiler :

$ cmake .
$ make
[ 62%] Built target freeglut_static
...
[100%] Built target shapes_static

Et vérifiez :

$ ll lib/libglut.a 
-rw-r--r-- 1 me me 690860 nov 17 19:11 lib/libglut.a
$ file lib/libglut.a
lib/libglut.a: current ar archive

Maintenant, modifiez le fichier makefile :

-lm -lGL -lGLU freeglut-3.0.0/lib/libglut.a

Et compiler :

$ make
usr/bin/ld: freeglut-3.0.0/lib/libglut.a(fg_state_x11.c.o): undefined reference to symbol 'XGetWindowAttributes'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line

Mais le message d'erreur est le même.

Dans un problème similaire : fglut/libfglut.a(freeglut_state.o) : référence non définie au symbole 'XGetWindowAttributes' J'ai essayé d'ajouter les bibliothèques x11 dans le projet :

-lm -lGL -lGLU -lX11 freeglut-3.0.0/lib/libglut.a

Ou bien :

-lm -lGL -lGLU -lX11 -Wl,-Bstatic -lglut -Wl,-Bdynamic

Mais le message d'erreur est le même. Qu'est-ce qui s'est passé ?

1voto

Strong will Points 111

J'ai réussi à lier mon programme GLUT à l'aide de la commande suivante

g++ -o ogl-test main.cpp freeglut-3.0.0/lib/libglut.a -lGL -lGLU -lX11 -lXxf86vm -lXext -lXrandr -lXt -lXi

J'espère que cela fonctionnera aussi pour vous. Assurez-vous de changer le chemin d'accès à la bibliothèque glut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X