Je tente de compiler une application OpenGl qui utilise SDL2 et GLEW de telle sorte qu'elle s'exécute sur n'importe quelle version de Linux qu'elle peut trouver elle-même - pas seulement là où elle a été compilée à l'origine. Pour ce faire, j'ai essayé plusieurs choses qui ne fonctionnent pas.Comment compiler les applications SDL2 et GLEW de manière statique sous Linux?
J'ai essayé de créer un lien direct vers les fichiers .a produits en exécutant make dans le répertoire racine extrait de GLEW et SDL à partir du téléchargement du site Web de chaque bibliothèque. Cela produit les erreurs suivantes:
/usr/bin/ld: /opt/SDL2-2.0.4/build/.libs/libSDL2.a(SDL_syssem.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
J'ai essayé la construction comme je le fais avec les bibliothèques liées dynamiquement, qui fonctionne très bien, sauf pour les capacités multiplateformes, (avec pkg-config --libs sdl2
et pkg-config --libs glew
), mais en ajoutant -static
, à quel point je obtenir les erreurs suivantes:
/usr/bin/ld: cannot find -lGLEW
/usr/bin/ld: cannot find -lGL
Quand je change le scénario précédent pour pointer vers mes bibliothèques Glew compilés statiquement, je reçois des erreurs de référence non définies aux fonctions OpenGl ainsi que des erreurs de référence non définies comme suit à partir de nombreuses fonctions SDL. Ajouter -lGL ne change rien.
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadObject_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadObject_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadFunction_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadFunction_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_LoadFunction_REAL':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_sysloadso.o): In function `SDL_UnloadObject_REAL':
Quand j'essayer d'utiliser pkg-config --libs --static <library name>
pour toutes les bibliothèques, je reçois l'erreur suivante:
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libSDL2.a(SDL_dynapi.o): In function `SDL_InitDynamicAPI':
/usr/bin/ld: cannot find -lasound
/usr/bin/ld: cannot find -lpulse-simple
/usr/bin/ld: cannot find -lpulse
/usr/bin/ld: cannot find -lsndio
/usr/bin/ld: cannot find -lwayland-egl
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libwayland-cursor.a(libwayland_cursor_la-xcursor.o): In function `XcursorImagesDestroy':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libXcursor.a(file.o):(.text+0x7d0): first defined here
/usr/bin/ld: cannot find -lGLEW
/usr/bin/ld: cannot find -lGL
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libX11.a(GetDflt.o): In function `GetHomeDir.part.0':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libX11.a(GetDflt.o): In function `GetHomeDir.part.0':
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libX11.a(xim_trans.o): In function `_XimXTransSocketINETConnect':
collect2: error: ld returned 1 exit status
NOTE: Tous la sortie ci-dessus est de la commande g++ -o /path/to/outputExecutable <list of object files>.o <libraries as described above>
NOTE: Je ne suis pas pense que cette question est une copie de toute autre question sur le réseau Stack Exchange parce que j'ai essayé de comprendre cela pendant environ un mois et demi et j'ai vu un très grand nombre de ces questions et j'ai tout essayé en eux, ainsi, même si le s ymptoms sont les mêmes que le problème sous-jacent est différent.
REMARQUE: Il s'agit d'une application à code source fermé, de sorte que la liaison dynamique n'est pas une option car elle nécessite la distribution du code source pour permettre aux utilisateurs de créer les fichiers binaires sur leurs propres systèmes.
NOTE: Je suis actuellement en train d'essayer de compiler avec Linux via g ++, mais j'ai l'intention d'utiliser mingw pour distribuer cette application pour Windows. Tout conseil qui fonctionne là-bas est préférable aux conseils de Linux seulement, mais, je peux poser une autre question si je ne peux pas comprendre cette partie de ce qui se terminera ici.
REMARQUE: j'utilise Ubuntu 16.04 LTS x64 pour compiler.
Nous vous remercions d'avance d'avoir déjà fait un bon bout de chemin dans cette question. Désolé pour le mur de texte, mais, je voulais fournir autant d'informations que possible. J'ai hâte de recevoir des réponses!
"J'utilise Ubuntu 16.04 LTS x64 pour compiler." nah, je dois laisser tomber et tout construire sur Debian oldstable. – genpfault