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é ?