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

GLFW3

hier soir, je travaillais tard en essayant de construire 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 suis pas familier avec CMake, et en partie parce que je ne suis pas familier avec GLFW.

j'espère que ce post va vous sauver de la difficulté que j'ai eu hier! J'ai pensé que je devrais faire un court rapport, et avec un peu de chance vous sauver plusieurs heures de votre vie...

grâce à" urraka"," b6 "et" niklas " sur le canal IRC #glfw, j'ai pu faire fonctionner 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 à propos de sa configuration avec CMake.

on m'a demandé de diviser cela en une section de questions et réponses, et donc je l'ai fait, et les parties de réponses sont maintenant dessous.

Êtes-vous un responsable de GLFW, ou un membre de L'équipe GLFW?

si l'un des responsables de GLFW3 voit cela, alors mon message pour eux est s'il vous plaît ajouter une section "Configurer GLFW3 sous Windows, Mac OS X et Linux" à votre site web! Il est assez facile d'écrire des programmes avec GLFW, puisque la documentation en ligne est assez bonne, un balayage rapide de toutes les classes et modules disponibles et vous serez prêt à aller. L'exemple d'un projet d'essai présenté ici est aussi très bon. Les deux principaux problèmes que j'ai rencontrés étaient, premièrement, comment configurer 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

a eu un bref regard aujourd'hui (date: 2014-01-14) il semble que le site web GLFW a subi de lourds changements depuis que j'ai regardé pour la dernière fois et il ya maintenant une section sur la compilation GLFW et programmes de renforcement avec GLFW, qui je pense sont nouveaux.

76
demandé sur user3728501 2013-07-21 04:30:18

6 réponses

É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 est de télécharger la dernière version (en supposant des versions dans le travail futur d'une manière similaire) à partir www.glfw.org, probablement en utilisant ce lien .

l'étape suivante consiste à extraire l'archive et à ouvrir un terminal. cd dans le glfw-3.X. X répertoire et exécuter cmake -G "Unix Makefiles" vous pouvez avoir besoin de privilèges élevés, et vous pouvez aussi avoir besoin de installer les dépendances de construction en premier . Pour ce faire, essayez sudo apt-get build-dep glfw ou sudo apt-get build-dep glfw3 ou faites-le manuellement , comme j'ai fait en utilisant sudo apt-get install cmake xorg-dev libglu1-mesa-dev ... Il peut y avoir d'autres libs dont vous avez besoin comme les bibliothèques pthread... Apparemment, je les avais déjà. (Voir les options-l données à l'étape de linker g++, ci-dessous.)

maintenant , vous pouvez taper make et ensuite make install , ce qui vous demandera probablement de sudo d'abord.

D'accord, vous devriez obtenir quelques résultats verbeux sur les trois derniers étages de CMake, vous disant ce qui a été construit ou où il a été placé. (Dans /usr/include , par exemple.)

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

la prochaine étape est d'allumer vim ("quoi?! vim?!"vous dites) ou votre IDE préféré / éditeur de texte... Je n'ai pas utilisé vim, J'ai utilisé Kate, parce que je suis sur KUbuntu 13.04... En tout cas, téléchargez ou copiez le programme de test de ici (en bas de la page) et enregistrez, sortez.

compilent maintenant en utilisant g++ -std=c++11 -c main.cpp - pas sûr si c++11 est requis mais j'ai utilisé nullptr donc, j'en avais besoin... Vous devrez peut-être mettre à jour votre gcc à la version 4.7 ou à la version 4.8 à venir... Info sur ce ici .

Puis corriger vos erreurs si vous avez tapé le programme à la main ou essayé d'être "trop intelligent" et quelque chose n'a pas fonctionné... Puis le lier à l'aide de ce monstre! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi donc, dans la partie" installer les dépendances de construction", vous pouvez aussi vérifier que vous avez les bibliothèques GL, GLU, X11 Xxf86vm (peu importe ce que c'est) XRandR posix-thread et Xi (peu importe ce que c'est) développement installées aussi. Peut-être mettre à jour vos pilotes graphiques aussi, je pense que GLFW 3 peut vous avez besoin de la version 3 D'OpenGL ou d'une version plus récente? Peut-être que quelqu'un peut confirmer? Vous pouvez également avoir besoin d'ajouter les options de linker -ldl -lXinerama -lXcursor pour le faire fonctionner correctement si vous obtenez des références non définies à dlclose (crédit à @user2255242).

et, oui, j'ai vraiment eu besoin que beaucoup de -l !

Etape 3: vous avez fini, passez une bonne 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 GLFW. Aussi espérons que ce guide a aidé, ou aidera, quelques personnes dans le futur qui luttaient comme je l'étais aujourd'hui hier!

soit dit en passant, toutes les étiquettes sont les choses que j'ai cherché sur stackoverflow à la recherche d'une réponse qui n'existait pas. (Jusqu'à maintenant.) J'espère qu'ils sont ce que vous avez cherché si vous étiez dans une position similaire à moi.

106
répondu user3728501 2017-04-13 12:22:38

notez que vous n'avez pas besoin de beaucoup de -l si vous installez glfw avec l'option BUILD_SHARED_LIBS . (Vous pouvez activer cette option en lançant ccmake en premier).

De cette façon, sudo make install installera la bibliothèque partagée dans /usr/local/lib/ligglfw.so . Vous pouvez alors compiler le fichier d'exemple avec un simple:

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

alors 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 à l'aide de:

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

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

16
répondu CastleDefender 2014-12-06 22:47:29

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

un fichier pkg-config décrit tous les indicateurs de temps de compilation et de temps de lien et les dépendances 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 tous ces fichiers sont réellement nécessaires pour compiler mais pour moi ça fonctionne...

13
répondu Oleh Pomazan 2015-07-03 21:33:27

étant donné que la réponse acceptée ne permet pas d'autres modifications, je vais la résumer avec une seule commande copier-coller (remplacer 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 la learnopengl.com tutoriel vous pourriez avoir à configurer GLAD aussi bien. 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" Generate " dans le coin inférieur droit du site et téléchargez le fichier zip. Extraire et compiler 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
4
répondu 4dr14n31t0r Th3 G4m3r 2018-06-27 15:46:49

grand guide, merci. Étant donné la plupart des instructions ici, il presque construit pour moi, mais j'ai eu une erreur restante.

/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 cherché cette erreur, j'ai dû ajouter -ldl à la ligne de commande.

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

puis l'application échantillon" hello GLFW " compilée et liée.

je suis assez nouveau à linux donc je ne suis pas complètement certain de ce que fait exactement cette bibliothèque supplémentaire... autre que corriger mon erreur de lien. Je vois que cmd ligne commutateur dans le poteau ci-dessus, cependant.

2
répondu user2941878 2015-12-29 19:39:38

si quelqu'un devient paresseux et peut-être ne sait pas comment configurer shell pour toutes ces bibliothèques et - l s, alors j'ai créé un script python(vous devez avoir python3, la plupart des utilisateurs de linux l'ont.) qui vous permet de compiler facilement des scripts et de les exécuter sans trop vous inquiéter, il a juste des appels système réguliers, juste arrangés soigneusement, Je l'ai créé pour moi-même, mais peut-être que ce serait utile: ici, il est

0
répondu mathmaniage 2018-07-18 10:11:32