GLFW3
Letzte Nacht habe ich spät gearbeitet und versucht, die GLFW 3-Pakete für Linux aus dem Quellcode zu erstellen. Dieser Prozess hat sehr lange gedauert, insgesamt etwa 3 Stunden, teils weil ich mit CMake nicht vertraut bin, teils weil ich mit GLFW nicht vertraut bin.
Ich hoffe, dass dieser Beitrag Sie vor den Schwierigkeiten bewahren wird, die ich gestern hatte! Ich dachte, ich sollte einen kurzen Bericht schreiben und dir hoffentlich einige Stunden deines Lebens ersparen ...
Dank "urraka", "b6" und "niklas" auf dem # glfw IRC-Kanal konnte ich glfw Version 3.0.1 zum Laufen bringen.
Es stellt sich heraus, dass dies kein trivialer Prozess ist (sicherlich nicht für mich, ich bin kein Experte), da es im Web nicht viel Dokumentation über glfw3 gibt, insbesondere über das Einrichten mit CMake.
Ich wurde gebeten, dies in einen Frage- und Antwortabschnitt aufzuteilen, und so habe ich das getan, und die Antwortteile sind jetzt unten.
Sind Sie ein Betreuer von GLFW oder ein Mitglied des GLFW-Teams?
Wenn einer der Betreuer von GLFW3 dies sieht, ist meine Nachricht an sie bitte, Ihrer Website einen Abschnitt "Einrichten von GLFW3 unter Windows, Mac OS X und Linux" hinzuzufügen! Es ist ziemlich einfach, Programme mit GLFW zu schreiben, da die Online-Dokumentation ziemlich gut ist, ein schneller Scan aller verfügbaren Klassen und Module und Sie können loslegen. Das Beispiel eines hier vorgestellten Testprojekts ist ebenfalls sehr gut. Die beiden Hauptprobleme, die ich gefunden habe, waren: Erstens, wie richte ich GLFW3 auf meinem System ein und zweitens, wie erstelle ich ein GLFW3-Projekt? Diese beiden Dinge sind für einen Nicht-Experten vielleicht nicht klar genug.
Bearbeiten
Habe heute einen kurzen Blick darauf geworfen (Datum: 2014-01-14), es sieht so aus, als ob die GLFW-Website seit meinem letzten Besuch starke Änderungen erfahren hat, und es gibt jetzt einen Abschnitt über das Kompilieren von GLFW- und Buliding-Programmen mit GLFW, die ich für neu halte.
Antworten:
Schritt 1: Installieren von GLFW 3 auf Ihrem System mit CMAKE
Für diese Installation habe ich KUbuntu 13.04, 64bit verwendet.
Der erste Schritt besteht darin, die neueste Version (unter der Annahme, dass zukünftige Versionen auf ähnliche Weise funktionieren ) von www.glfw.org herunterzuladen , wahrscheinlich über diesen Link .
Der nächste Schritt besteht darin, das Archiv zu extrahieren und ein Terminal zu öffnen.
cd
Wenncmake -G "Unix Makefiles"
Sie in das Verzeichnis glfw-3.XX wechseln und es ausführen , benötigen Sie möglicherweise erhöhte Berechtigungen. Außerdem müssen Sie möglicherweise zuerst Build-Abhängigkeiten installieren . Um dies zu tun, versuchensudo apt-get build-dep glfw
odersudo apt-get build-dep glfw3
oder es manuell tun , wie ich mit tatsudo apt-get install cmake xorg-dev libglu1-mesa-dev
... Es können auch andere Libs Ihnen wie die pthread Bibliotheken erfordern ... Anscheinend schon , sie hatte ich. (Siehe die -l-Optionen für die g ++ - Linkerstufe unten.)Jetzt können Sie tippen
make
und dannmake install
, was wahrscheinlich erfordert, dass Siesudo
zuerst.Okay, Sie sollten in den letzten drei CMake-Stufen eine ausführliche Ausgabe erhalten, die Ihnen sagt, was gebaut wurde oder wo es platziert wurde. (In
/usr/include
zum Beispiel.)Schritt 2: Erstellen Sie ein Testprogramm und kompilieren Sie
Der nächste Schritt ist das Starten von vim ("was?! Vim?!", Sagen Sie) oder Ihres bevorzugten IDE- / Texteditors ... Ich habe vim nicht verwendet, ich habe Kate verwendet, weil ich auf KUbuntu 13.04 bin ... Laden Sie das Testprogramm von hier (unten auf der Seite) herunter oder kopieren Sie es und speichern Sie es.
Jetzt kompilieren mit
g++ -std=c++11 -c main.cpp
- nicht sicher, ob c ++ 11 erforderlich ist , aber ich habe es verwendetnullptr
, ich brauchte es ... Möglicherweise müssen Sie Ihr gcc auf Version 4.7 oder die kommende Version 4.8 aktualisieren ... Infos dazu hier .Beheben Sie dann Ihre Fehler, wenn Sie das Programm von Hand eingegeben oder versucht haben, "zu schlau" zu sein und etwas nicht funktioniert hat ... Dann verknüpfen Sie es mit diesem Monster!
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
Sie sehen also, in dem „Build - Abhängigkeiten installieren“ Teil, können Sie auch haben Sie überprüfen die GL, GLU, X11 Xxf86vm (was immer das ist) Xrandr posix-Thread und Xi (was immer das ist) Entwicklung Bibliotheken installiert. Vielleicht aktualisieren Sie auch Ihre Grafiktreiber. Ich denke, GLFW 3 erfordert möglicherweise OpenGL Version 3 oder höher? Vielleicht kann jemand das bestätigen? Möglicherweise müssen Sie auch die Linker-Optionen hinzufügen-ldl -lXinerama -lXcursor
, damit sie ordnungsgemäß funktionieren, wenn Sie undefinierte Verweise auf erhaltendlclose
(Gutschrift an @ user2255242).Und ja, ich brauchte wirklich so viele
-l
!Schritt 3: Sie sind fertig, einen schönen Tag!
Hoffentlich waren diese Informationen korrekt und alles hat für Sie funktioniert, und Sie haben es genossen, das GLFW-Testprogramm zu schreiben. Auch hoffentlich diese Leitfaden haben dazu beigetragen, oder helfen, ein paar Leute in der Zukunft, die , wie ich rangen waren
heutegestern!Übrigens sind alle Tags die Dinge, nach denen ich im Stackoverflow gesucht habe, um nach einer Antwort zu suchen, die es nicht gab. (Bis jetzt.) Hoffentlich sind sie das, wonach Sie gesucht haben, wenn Sie sich in einer ähnlichen Position wie ich befanden.
Anmerkung des Autors:
Dies ist möglicherweise keine gute Idee. Diese Methode (mit sudo make install) kann für Ihr System gefährlich sein. (Siehe Don't Break Debian)
Im Idealfall sollte ich oder jemand anderes eine Lösung vorschlagen, die nicht nur lib-Dateien usw. in den Standardverzeichnissen des Systems installiert, da diese von Paketmanagern wie verwaltet werden sollten. Dies
apt
kann zu Konflikten führen und Ihr Paketverwaltungssystem beschädigen.In der neuen Antwort "2020" finden Sie eine alternative Lösung.
quelle
pow
, das durch Hinzufügen-lm
zu den Kompilierungsoptionen behoben wurde.sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Ich habe es auf diese Weise gelöst
Eine pkg-config-Datei beschreibt alle erforderlichen Flags und Abhängigkeiten zur Kompilierungs- und Verknüpfungszeit, die zur Verwendung einer Bibliothek erforderlich sind.
zeigt mir das
Ich weiß nicht, ob all diese Bibliotheken tatsächlich zum Kompilieren notwendig sind, aber für mich funktioniert es ...
quelle
Beachten Sie, dass Sie nicht so viele
-l
s benötigen, wenn Sie glfw mit derBUILD_SHARED_LIBS
Option installieren . (Sie können diese Option aktivieren, indem Sie sieccmake
zuerst ausführen.)Auf diese Weise
sudo make install
wird die gemeinsam genutzte Bibliothek in installiert/usr/local/lib/libglfw.so
. Sie können die Beispieldatei dann mit einem einfachen Beispiel kompilieren:Vergessen Sie dann nicht, / usr / local / lib / zum Suchpfad für gemeinsam genutzte Bibliotheken hinzuzufügen, bevor Sie Ihr Programm ausführen. Dies kann erfolgen mit:
Und Sie können das in Ihr eingeben,
~/.bashrc
damit Sie es nicht die ganze Zeit eingeben müssen.quelle
ldd
überprüfen, welche Bibliotheken von einem Programm geladen werden, wenn es ausgeführt wird. Dies ist auch eine gute Möglichkeit, um zu überprüfen, ob die Bibliotheken ordnungsgemäß gefunden wurden. Sie könnenldd
in Ihrem Programm und auf /usr/local/lib/libglfw.so vergleichen.sudo ldconfig
sollte die Ausführung dieses Problem lösen und keine Konfiguration von LD_LIBRARY_PATH erfordern jedes Mal. Diese Antwort enthält eine Diskussion darüber, warum dies bevorzugt werden könnte.Da die akzeptierte Antwort keine weiteren Änderungen zulässt, werde ich sie mit einem einzigen Befehl zum Kopieren und Einfügen zusammenfassen (Ersetzen Sie 3.2.1 durch die neueste Version in der ersten Zeile):
Wenn Sie ein Programm kompilieren möchten, verwenden Sie die folgenden Befehle:
Wenn Sie dem Lernprogramm von learnopengl.com folgen, müssen Sie möglicherweise auch GLAD einrichten. In diesem Fall klicken Sie auf diesen Link
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
Klicken Sie anschließend auf die Schaltfläche "Generieren" in der unteren rechten Ecke der Website und laden Sie die Zip-Datei herunter. Extrahieren Sie es und kompilieren Sie die Quellen mit dem folgenden Befehl:
Die Befehle zum Kompilieren Ihres Programms lauten nun wie folgt:
quelle
Toller Führer, danke. Angesichts der meisten Anweisungen hier wurde es fast für mich gebaut, aber ich hatte noch einen Fehler.
Nachdem ich nach diesem Fehler gesucht hatte, musste ich ihn zur
-ldl
Befehlszeile hinzufügen .Dann wurde die Beispiel-App "Hallo GLFW" kompiliert und verlinkt.
Ich bin ziemlich neu in Linux, daher bin ich mir nicht ganz sicher, was genau diese zusätzliche Bibliothek tut ... außer meinen Verknüpfungsfehler zu beheben. Ich sehe diesen cmd-Zeilenschalter jedoch im obigen Beitrag.
quelle
Wenn jemand faul wird und vielleicht nicht weiß, wie man die Shell für all diese Bibliotheken und -l s konfiguriert , habe ich ein Python-Skript erstellt (Sie müssen Python3 haben, die meisten Linux-Benutzer haben es.), Mit dem Sie einfach kompilieren können Skripte und führen sie ohne große Sorgen aus, es hat nur regelmäßige Systemaufrufe, nur ordentlich angeordnet, ich habe es für mich selbst erstellt, aber vielleicht wäre es nützlich: Hier ist es
quelle
Die gut beschriebene Antwort ist bereits da, aber ich habe dieses KURZE Rezept durchlaufen :
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
Erläuterung: Wir schaffen es, GLFW von CMAKE zu erstellen, was von Linuxbrew (Linux-Port des geliebten Homebrew) durchgeführt wird. Kopieren Sie dann die Header-Dateien an die Stelle, an der Linux von (
/usr/include
) liest .quelle
2020 Aktualisierte Antwort
Es ist 2020 (7 Jahre später) und ich habe in dieser Zeit mehr über Linux gelernt. Insbesondere ist es möglicherweise keine gute Idee, diese
sudo make install
bei der Installation von Bibliotheken auszuführen , da diese das Paketverwaltungssystem beeinträchtigen können. (In diesem Fall verwendeapt
ich Debian 10.)Wenn dies nicht korrekt ist, korrigieren Sie mich bitte in den Kommentaren.
Alternative vorgeschlagene Lösung
Diese Informationen stammen aus den GLFW-Dokumenten. Ich habe jedoch die Informationen erweitert / optimiert, die für Linux-Benutzer relevant sind.
Möglicherweise müssen Sie
sudo apt-get build-dep glfw3
vor (?) Ausführen . Ich habe sowohl diesen Befehlsudo apt install xorg-dev
als auch die Anweisungen ausgeführt.Endlich laufen
make
Gehen Sie nun in Ihrem Projektverzeichnis wie folgt vor. (Gehen Sie zu Ihrem Projekt, das die glfw-Bibliotheken verwendet.)
Erstellen Sie eine
CMakeLists.txt
, meine sieht so ausWenn Sie CMake nicht mögen, entschuldige ich mich, aber meiner Meinung nach ist dies der einfachste Weg, um Ihr Projekt schnell zum Laufen zu bringen. Ich würde empfehlen, zu lernen, es zu benutzen, zumindest auf einem Grundniveau. Leider kenne ich kein gutes CMake-Tutorial
Dann tun Sie
cmake .
undmake
, Ihr Projekt sollte erstellt und mit glfw3 shared lib verknüpft werdenEs gibt eine Möglichkeit, eine dynamisch verknüpfte Bibliothek zu erstellen. Ich glaube, ich habe hier die statische Methode angewendet. Bitte kommentieren / fügen Sie einen Abschnitt in dieser Antwort unten hinzu, wenn Sie mehr wissen als ich
Dies sollte auf anderen Systemen funktionieren, wenn nicht, lassen Sie es mich wissen und ich werde helfen, wenn ich dazu in der Lage bin
quelle