web-dev-qa-db-fra.com

Comment compiler et installer GLFW 3 et l'utiliser dans un projet Linux

GLFW3

La nuit dernière, je travaillais tard pour essayer de créer les paquets GLFW 3 pour Linux à partir des sources. Ce processus m'a pris très longtemps, environ 3 heures au total, en partie parce que je ne connaissais pas CMake et en partie parce que je ne connaissais pas GLFW.

J'espère que ce post vous sauvera de la difficulté que j'avais hier! Je pensais que je devrais faire un bref compte-rendu et, espérons-le, vous épargner plusieurs heures de votre vie ...

Grâce à "urraka", "b6" et "niklas" sur le canal #glfw IRC, j'ai pu utiliser la version 3.0.1 de glfw.

Il s'avère que ce n'est pas un processus trivial (certainement pas pour moi, je ne suis pas un expert) car il n'y a pas beaucoup de documentation sur le Web à propos de glfw3, en particulier sur sa configuration avec CMake.

On m'a demandé de diviser cela en une section de questions et réponses, et c'est ce que j'ai fait. Les parties de la réponse sont maintenant présentées ci-dessous.

Êtes-vous un mainteneur de GLFW ou un membre de l'équipe de GLFW?

Si l'un des responsables de GLFW3 le voit, mon message est de leur ajouter une section "Configuration de GLFW3 sous Windows, Mac OS X et Linux" sur votre site Web! Il est assez facile d’écrire des programmes avec GLFW, car la documentation en ligne est assez bonne, il suffit d’analyser rapidement toutes les classes et tous les modules disponibles et vous serez prêt à commencer. L'exemple d'un projet test présenté ici est également très bon. Les deux principaux problèmes que j'ai rencontrés sont, premièrement, comment installer GLFW3 sur mon système et deuxièmement, comment construire un projet GLFW3? Ces deux choses ne sont peut-être pas assez claires pour un non-expert.

Modifier

Si j’ai jeté un coup d’œil aujourd’hui (Date: 2014-01-14), il semble que le site Web de GLFW ait subi de profonds changements depuis ma dernière visite. Il ya maintenant une section sur la compilation de GLFW et ses programmes avec GLFW, qui, je pense, sont nouveaux.

76
user3728501

Étape 1: Installation de GLFW 3 sur votre système avec CMAKE

Pour cette installation, j'utilisais KUbuntu 13.04, 64bit.

La première étape consiste à télécharger la dernière version (en supposant que les versions futures fonctionnent de manière similaire) à partir de www.glfw.org, probablement à l’aide de ce link .

L'étape suivante consiste à extraire l'archive et à ouvrir un terminal. cd dans le répertoire glfw-3.X.X et exécutez cmake -G "Unix Makefiles", vous aurez peut-être besoin de privilèges élevés, et vous devrez peut-être aussi installer les dépendances de construction en premier. Pour ce faire, essayez Sudo apt-get build-dep glfw ou Sudo apt-get build-dep glfw3ou fais le manuellement, comme je l’ai fait avec Sudo apt-get install cmake xorg-dev libglu1-mesa-dev... Il se peut que vous ayez besoin d’autres librairies telles que les bibliothèques pthread ... Apparemment, je les avais déjà. (Voir les options -l données à l'étape de l'éditeur de liens g ++ ci-dessous.)

Maintenant, vous pouvez taper make puis make install, ce qui vous demandera probablement de Sudo en premier.

D'accord, vous devriez obtenir une sortie commentée sur les trois dernières étapes de CMake, vous indiquant ce qui a été construit ou l'endroit où il a été placé. (Dans /usr/include, par exemple.)

Étape 2: Créer un programme de test et compiler

La prochaine étape consiste à lancer vim ("quoi?! Vim ?!", dites-vous) ou votre éditeur de texte IDE/préféré ... Je n'ai pas utilisé vim, j'ai utilisé Kate, car je suis sur KUbuntu 13.04 ... Quoi qu'il en soit, téléchargez ou copiez le programme de test à partir de ici (au bas de la page) et enregistrez, quittez.

Compilez maintenant avec g++ -std=c++11 -c main.cpp - ne savez pas si c ++ 11 est champs obligatoires mais j’ai utilisé nullptr donc, j’en avais besoin ... Vous devrez peut-être mettre à jour votre gcc vers la version 4.7 ou la version 4.8 à venir ... Des informations à ce sujet ici .

Corrigez ensuite vos erreurs si vous avez tapé le programme à la main ou si vous avez essayé d’être "trop ​​malin" et que quelque chose ne fonctionnait pas ... Alors reliez-le en utilisant ce monstre! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi Ainsi, dans la partie "installer les dépendances de construction", vous voudrez peut-être également vérifier que vous avez bien le GL, le GLU, le X11 Xxf86vm (peu importe ce que c'est) Xrandr posix-thread et Xi (peu importe ce que c'est) développement bibliothèques installées aussi. Peut-être mettre à jour vos pilotes graphiques aussi, je pense que GLFW 3 peut nécessiter OpenGL version 3 ou supérieure. Peut-être que quelqu'un peut confirmer cela? Vous devrez peut-être également ajouter les options de l’éditeur de liens -ldl -lXinerama -lXcursor pour que cela fonctionne correctement si vous obtenez des références non définies à dlclose (crédit de @ user2255242).

Et oui, j'avais vraiment besoin de tant de -ls!

Étape 3: Vous avez terminé, passez une belle journée!

Espérons que cette information était correcte et que tout a fonctionné pour vous, et vous avez aimé écrire le programme de test de GLFW. J'espère aussi que ce guide a aidé, ou aidera, quelques personnes dans le futur qui luttaient comme moi aujourd'hui hier!

En passant, toutes les balises sont les éléments que j'ai recherchés sur stackoverflow et recherchant une réponse inexistante. (Jusqu'à présent.) J'espère que c'est ce que vous avez cherché si vous étiez dans une position similaire à moi.

108
user3728501

Notez que vous n'avez pas besoin de autant de -ls si vous installez glfw avec l'option BUILD_SHARED_LIBS. (Vous pouvez activer cette option en exécutant d'abord ccmake) .
De cette façon, Sudo make install installera la bibliothèque partagée dans /usr/local/lib/ligglfw.so. Vous pouvez ensuite compiler le fichier exemple avec un simple:

g++ main.cpp -L /usr/local/lib/ -lglfw

Ensuite, n'oubliez pas d'ajouter/usr/local/lib/au chemin de recherche des bibliothèques partagées avant d'exécuter votre programme. Cela peut être fait en utilisant:

export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}

Et vous pouvez mettre cela dans votre ~/.bashrc pour ne pas avoir à le taper tout le temps.

16
CastleDefender

Je l'ai résolu de cette façon

Un fichier pkg-config décrit tous les drapeaux et dépendances nécessaires à la compilation et à la liaison nécessaires pour utiliser une bibliothèque. 

pkg-config --static --libs glfw3

me montre que

-L/usr/local/lib -lglfw3 -lrt -lXrandr -lXinerama -lXi -lXcursor -lGL -lm -ldl -lXrender -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp  

Je ne sais pas si toutes ces bibliothèques sont réellement nécessaires pour la compilation, mais pour moi cela fonctionne ...

13
Oleh Pomazan

Étant donné que la réponse acceptée ne permet pas davantage de modifications, je vais la résumer avec une seule commande copier-coller (Remplacez 3.2.1 par la dernière version disponible dans la première commande):

version="3.2.1" && \
wget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.Zip" && \
unzip glfw-${version}.Zip && \
cd glfw-${version} && \
Sudo apt-get install cmake xorg-dev libglu1-mesa-dev && \
Sudo cmake -G "Unix Makefiles" && \
Sudo make && \
Sudo make install

Si vous voulez compiler un programme, utilisez les commandes suivantes:

g++ -std=c++11 -c main.cpp && \
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor

Si vous suivez le didacticiel learnopengl.com, vous devrez peut-être également configurer GLAD. Dans ce cas, cliquez sur ce lien 

http://glad.dav1d.de/#profile=core&specification=gl&api=gl%3D3.3&api=gles1%3Dnone&api=gles2%3Dnone&api=glsc2%3Dnone&language=c&loader=on

puis cliquez sur le bouton "Générer" dans le coin inférieur droit du site et téléchargez le fichier Zip. Extrayez-le et compilez les sources avec la commande suivante:

g++ glad/src/glad.c -c -Iglad/include

Maintenant, les commandes pour compiler votre programme deviennent comme ceci:

g++ -std=c++11 -c main.cpp -Iglad/include && \
g++ main.o glad.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
5

Grand guide, merci. Étant donné la plupart des instructions ici, il presque a été construit pour moi, mais il me reste une erreur.

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Après avoir recherché cette erreur, j'ai dû ajouter -ldl à la ligne de commande.

g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl

Ensuite, l'exemple d'application "hello GLFW" compilé et lié. 

Je suis assez nouveau sur Linux donc je ne suis pas complètement sûr de ce que fait exactement cette bibliothèque supplémentaire ... sauf pour réparer mon erreur de lien Je vois ce commutateur de ligne cmd dans le post ci-dessus, cependant.

2
user2941878

Si quelqu'un devient paresseux et ne sait peut-être pas comment configurer Shell pour toutes ces bibliothèques et les -l s, alors j'ai créé un script python (vous devez avoir python3, la plupart des utilisateurs de Linux l'ont.) Qui permet pour compiler facilement des scripts et les exécuter sans trop s’inquiéter, il a juste des appels système réguliers, je l’ai créé pour moi-même, mais peut-être que ce serait utile: le voilà

0
mathmaniage