GLFW3
Hier soir, je travaillais tard pour essayer de construire les packages 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 connaissais pas GLFW.
J'espère que ce post vous sauvera de la difficulté que j'ai eue hier! J'ai pensé que je devrais faire un bref article et, espérons-le, 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 sur 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, et les parties de réponse sont maintenant ci-dessous.
Êtes-vous un mainteneur de GLFW ou un membre de l'équipe GLFW?
Si l'un des responsables de GLFW3 voit cela, alors mon message à eux est d'ajouter une section "Configuration de GLFW3 sur Windows, Mac OS X et Linux" à votre site Web! Il est assez facile d'écrire des programmes avec GLFW, car la documentation en ligne est assez bonne, une analyse rapide de toutes les classes et modules disponibles et vous serez prêt à partir. L'exemple d'un projet de test présenté ici est également très bon. Les deux principaux problèmes que j'ai trouvés étaient, premièrement, comment configurer GLFW3 sur mon système, et deuxièmement, comment créer un projet GLFW3? Ces deux choses ne sont peut-être pas assez claires pour un non-expert.
Éditer
J'ai jeté un bref coup d'œil aujourd'hui (Date: 2014-01-14), il semble que le site Web de GLFW a subi de profonds changements depuis ma dernière consultation et il y a maintenant une section sur la compilation de GLFW et la construction de programmes avec GLFW, qui je pense sont nouvelles.
Réponses:
Étape 1: Installation de GLFW 3 sur votre système avec CMAKE
Pour cette installation, j'utilisais KUbuntu 13.04, 64 bits.
La première étape consiste à télécharger la dernière version (en supposant que les versions futures fonctionnent de la même manière) à partir de www.glfw.org , probablement en utilisant ce lien .
L'étape suivante consiste à extraire l'archive et à ouvrir un terminal.
cd
dans le répertoire glfw-3.XX et exécutez,cmake -G "Unix Makefiles"
vous aurez peut-être besoin de privilèges élevés, et vous devrez peut-être également installer d'abord les dépendances de construction . Pour ce faire, essayezsudo apt-get build-dep glfw
ousudo apt-get build-dep glfw3
ou faites-le manuellement , comme je l'ai fait en utilisantsudo apt-get install cmake xorg-dev libglu1-mesa-dev
... Il se peut que vous ayez besoin d'autres bibliothèques 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.)Vous pouvez maintenant taper
make
et ensuitemake install
, ce qui vous obligera probablement à le faire d'sudo
abord.D'accord, vous devriez obtenir une sortie détaillée sur les trois dernières étapes de CMake, vous indiquant ce qui a été construit ou où il a été placé. (Dans
/usr/include
, par exemple.)Étape 2: Créez un programme de test et compilez
L'étape suivante 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 d' ici (en bas de page) et enregistrez, quittez.
Maintenant, compilez en utilisant
g++ -std=c++11 -c main.cpp
- je ne sais pas si c ++ 11 est nécessaire mais je l'ai utilisénullptr
, j'en avais besoin ... Vous devrez peut-être mettre à jour votre gcc vers la version 4.7, ou la prochaine version 4.8 ... Info à ce sujet ici .Ensuite, corrigez vos erreurs si vous avez tapé le programme à la main ou essayé d'être "trop intelligent" et que quelque chose n'a pas fonctionné ... Puis liez-le en utilisant ce monstre!
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
Ainsi, vous voyez, dans la partie "installer les dépendances de construction", vous pouvez également vérifier que les bibliothèques de développement GL, GLU, X11 Xxf86vm (quoi que ce soit) Xrandr posix-thread et Xi (quoi que ce soit) sont également installées. 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 le confirmer? Vous devrez peut-être également ajouter les options-ldl -lXinerama -lXcursor
de l'éditeur de liens pour le faire fonctionner correctement si vous obtenez des références non définies àdlclose
(crédit à @ user2255242).Et oui, j'en avais vraiment besoin
-l
!Étape 3: Vous avez terminé, passez une bonne journée!
J'espère que ces informations étaient correctes et que tout a fonctionné pour vous, et que vous avez aimé écrire le programme de test GLFW. Espérons -le, ce guide a aidé ou aidera, quelques personnes à l'avenir qui luttaient comme je l' étais
aujourd'huihier!Au fait, toutes les balises sont les choses que j'ai recherchées sur stackoverflow à la recherche d'une réponse qui n'existait pas. (Jusqu'à présent.) J'espère que c'est ce que vous recherchiez si vous étiez dans une situation similaire à moi.
Note de l'auteur:
Ce n'est peut-être pas une bonne idée. Cette méthode (en utilisant sudo make install) peut être dangereuse pour votre système. (Voir Don't Break Debian)
Idéalement, je devrais, ou quelqu'un d'autre, proposer une solution qui n'installe pas simplement les fichiers lib, etc. dans les répertoires par défaut du système, car ceux-ci devraient être gérés par des gestionnaires de paquets tels que
apt
, et cela pourrait provoquer un conflit et briser votre système de gestion de paquets.Voir la nouvelle «réponse 2020» pour une solution alternative.
la source
pow
donc l'ajout-lm
des options de compilation l'a corrigé.sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Je l'ai résolu de cette façon
Un fichier pkg-config décrit tous les indicateurs et dépendances de compilation et de liaison nécessaires pour utiliser une bibliothèque.
me montre que
Je ne sais pas si toutes ces bibliothèques sont réellement nécessaires pour la compilation mais pour moi ça marche ...
la source
Notez que vous n'avez pas besoin de beaucoup de
-l
s si vous installez glfw avec l'BUILD_SHARED_LIBS
option. (Vous pouvez activer cette option en exécutant d'ccmake
abord).De cette façon
sudo make install
, la bibliothèque partagée sera installée dans/usr/local/lib/libglfw.so
. Vous pouvez ensuite compiler le fichier d'exemple avec un simple: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:
Et vous pouvez le mettre dans votre
~/.bashrc
pour ne pas avoir à le taper tout le temps.la source
ldd
pour vérifier quelles bibliothèques sont chargées par un programme lors de son exécution. C'est aussi un bon moyen de vérifier que les bibliothèques se trouvent correctement. Vous pouvez utiliserldd
sur votre programme et sur /usr/local/lib/libglfw.so pour comparer.sudo ldconfig
devrait résoudre ce problème, et ne pas nécessiter la configuration de LD_LIBRARY_PATH à chaque fois. Cette réponse fournit une discussion sur les raisons pour lesquelles cela pourrait être préféré.Étant donné que la réponse acceptée ne permet pas plus 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 ligne):
Si vous souhaitez compiler un programme, utilisez les commandes suivantes:
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 Web et téléchargez le fichier zip. Extrayez-le et compilez les sources avec la commande suivante:
Maintenant, les commandes pour compiler votre programme deviennent comme ceci:
la source
Grand guide, merci. Compte tenu de la plupart des instructions ici, il a presque été construit pour moi, mais il me restait une erreur.
Après avoir recherché cette erreur, j'ai dû ajouter
-ldl
à la ligne de commande.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 ... à part corriger mon erreur de liaison. Je vois cependant ce commutateur de ligne cmd dans le post ci-dessus.
la source
Si quelqu'un devient paresseux et ne sait peut-être pas comment configurer le shell pour toutes ces bibliothèques et -l s, alors j'ai créé un script python (vous devez avoir python3, la plupart des utilisateurs Linux l'ont.) Qui vous permet de compiler facilement et exécutez-les sans trop vous inquiéter, il a juste des appels système réguliers, juste arrangés proprement, je l'ai créé pour moi-même mais peut-être que ce serait utile: le voici
la source
La réponse bien décrite est déjà là, mais j'ai parcouru cette recette PLUS COURTE :
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
Explication: Nous parvenons à construire GLFW par CMAKE qui est fait par Linuxbrew (port Linux de Homebrew bien-aimé). Copiez ensuite les fichiers d'en-tête vers l'emplacement de lecture de Linux (
/usr/include
).la source
Réponse mise à jour 2020
Nous sommes en 2020 (7 ans plus tard) et j'en ai appris plus sur Linux pendant cette période. Plus précisément, ce n'est peut-être pas une bonne idée de l'exécuter
sudo make install
lors de l'installation des bibliothèques, car elles peuvent interférer avec le système de gestion des paquets. (Dans ce cas,apt
car j'utilise Debian 10.)Si ce n'est pas correct, veuillez me corriger dans les commentaires.
Solution alternative proposée
Ces informations sont tirées de la documentation GLFW, mais j'ai développé / rationalisé les informations pertinentes pour les utilisateurs Linux.
Vous devrez peut-être exécuter
sudo apt-get build-dep glfw3
avant (?). J'ai exécuté à la fois cette commande etsudo apt install xorg-dev
selon les instructions.Enfin courir
make
Maintenant, dans votre répertoire de projet, procédez comme suit. (Allez dans votre projet qui utilise les libs glfw)
Créer un
CMakeLists.txt
, le mien ressemble à ceciSi vous n'aimez pas CMake, je m'en excuse, mais à mon avis, c'est le moyen le plus simple de faire fonctionner votre projet rapidement. Je recommanderais d'apprendre à l'utiliser, au moins à un niveau de base. Malheureusement, je ne connais aucun bon tutoriel CMake
Ensuite, faites
cmake .
etmake
, votre projet doit être construit et lié à la bibliothèque partagée glfw3Il existe un moyen de créer une bibliothèque liée dynamique. Je crois avoir utilisé la méthode statique ici. Veuillez commenter / ajouter une section dans cette réponse ci-dessous si vous en savez plus que moi
Cela devrait fonctionner sur d'autres systèmes, sinon faites-le moi savoir et j'aiderai si je suis capable de
la source