it-swarm.com.de

Wie man GLFW 3 erstellt und installiert und in einem Linux-Projekt verwendet

GLFW3

Letzte Nacht habe ich spät versucht, die GLFW 3-Pakete für Linux vom Quellcode zu erstellen. Dieser Vorgang hat sehr lange gedauert, insgesamt etwa 3 Stunden, teils weil ich mit CMake nicht vertraut bin und teils, weil ich mit GLFW nicht vertraut war.

Ich hoffe, dass dieser Beitrag Sie vor den Schwierigkeiten von gestern retten wird! Ich dachte, ich sollte kurz schreiben und hoffentlich einige Stunden deines Lebens retten ...

Dank "urraka", "b6" und "niklas" im Kanal #glfw IRC konnte glfw Version 3.0.1 zum Laufen gebracht werden.

Es stellt sich heraus, dass dies kein trivialer Prozess ist (sicherlich nicht für mich, ich bin kein Experte), da es im Internet nicht viel Dokumentation über glfw3 gibt, insbesondere was CMake betrifft.

Ich wurde gebeten, dies in einen Frage- und Antwortabschnitt aufzuteilen, und so habe ich das getan, und die Antwortteile sind jetzt unten.

Sind Sie Betreuer von GLFW oder Mitglied des GLFW-Teams?

Wenn einer der Betreuer von GLFW3 dies sieht, fügen Sie bitte Ihrer Website den Abschnitt "GLFW3 unter Windows, Mac OS X und Linux einrichten" hinzu. Es ist ziemlich einfach, Programme mit GLFW zu schreiben, da die Online-Dokumentation sehr gut ist, ein schneller Scan aller verfügbaren Klassen und Module und Sie können sofort loslegen. Das Beispiel eines Testprojekts hier ist ebenfalls sehr gut. Die zwei Hauptprobleme, die ich gefunden habe, waren, erstens, wie ich GLFW3 auf meinem System einrichte, und zweitens, wie ich ein GLFW3-Projekt aufbaue. Diese beiden Dinge sind für Nicht-Experten möglicherweise nicht klar genug.

Bearbeiten

Habe heute einen kurzen Blick darauf gerichtet (Datum: 2014-01-14). Es sieht so aus, als ob sich die GLFW-Website seit meinem letzten Blick stark verändert hat, und es gibt jetzt einen Abschnitt zum Erstellen von GLFW- und Buliding-Programmen mit GLFW.

76
user3728501

Schritt 1: Installieren Sie GLFW 3 mit CMAKE auf Ihrem System

Für diese Installation habe ich KUbuntu 13.04, 64bit verwendet.

Der erste Schritt ist das Herunterladen der neuesten Version (vorausgesetzt, dass zukünftige Versionen auf ähnliche Weise funktionieren) von www.glfw.org, wahrscheinlich unter Verwendung dieses link .

Im nächsten Schritt extrahieren Sie das Archiv und öffnen ein Terminal. cd in das Verzeichnis glfw-3.X.X und führen Sie cmake -G "Unix Makefiles" aus. Möglicherweise benötigen Sie erhöhte Berechtigungen, und Sie müssen möglicherweise zuerst build-Abhängigkeiten installieren. Probieren Sie dazu Sudo apt-get build-dep glfw aus. oder Sudo apt-get build-dep glfw3oder mache es manuell, da ich Sudo apt-get install cmake xorg-dev libglu1-mesa-dev... verwendet habe, gibt es andere Bibliotheken, die Sie benötigen, wie die pthread-Bibliotheken ... Anscheinend hatte ich sie schon. (Siehe die -l-Optionen für die g ++ - Linker-Stufe unten.)

Jetzt können Sie make und dann make install eingeben. In diesem Fall müssen Sie wahrscheinlich zuerst Sudo eingeben.

Okay, Sie sollten in den letzten drei CMake-Schritten eine ausführliche Ausgabe erhalten und Ihnen sagen, was gebaut wurde oder wo es platziert wurde. (In /usr/include zum Beispiel.)

Schritt 2: Erstellen Sie ein Testprogramm und kompilieren Sie es

Der nächste Schritt ist, vim hochzufahren ("was ?! vim ?!" sagen Sie) oder Ihren bevorzugten IDE/Texteditor ... Ich habe vim nicht verwendet, ich habe Kate verwendet, weil ich es bin auf KUbuntu 13.04 ... Laden oder kopieren Sie das Testprogramm trotzdem von hier (am unteren Rand der Seite) und speichern und beenden Sie das Programm.

Jetzt kompilieren Sie mit g++ -std=c++11 -c main.cpp - nicht sicher, ob C++ 11 ist erforderlich aber ich habe nullptr benutzt, also brauchte ich es ... Möglicherweise müssen Sie Ihr gcc auf Version 4.7 oder die kommende Version 4.8 aktualisieren. Info dazu hier .

Beheben Sie dann Ihre Fehler, wenn Sie das Programm von Hand eingetippt haben 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, dass Sie im Teil "Abhängigkeiten zum Installieren von Builds" auch prüfen möchten, ob Sie GL, GLU, X11 Xxf86vm (was auch immer das ist) Xrandr posix-thread und Xi (was auch immer das ist) entwicklung Bibliotheken auch installiert. Aktualisieren Sie möglicherweise auch Ihre Grafiktreiber. Ich denke, GLFW 3 benötigt OpenGL Version 3 oder höher. Vielleicht kann das jemand bestätigen? Sie müssen möglicherweise auch die Linker-Optionen -ldl -lXinerama -lXcursor hinzufügen, damit sie ordnungsgemäß funktioniert, wenn Sie undefinierte Verweise auf dlclose erhalten (Verdienst @ user2255242).

Und ja, ich brauchte wirklich so viele -ls!

Schritt 3: Sie sind fertig und haben einen schönen Tag!

Hoffentlich waren diese Informationen korrekt und alles hat für Sie funktioniert, und es hat Ihnen Spaß gemacht, das GLFW-Testprogramm zu schreiben. Hoffentlich hat dieser Leitfaden einigen Menschen in der Zukunft geholfen oder wird sie helfen, die so schwer gekämpft haben wie ich heute gestern!

Übrigens, alle Tags sind die Dinge, nach denen ich in stackoverflow gesucht habe, um nach einer Antwort zu suchen, die es nicht gab. (Bis jetzt.) Hoffentlich sind sie genau das, wonach Sie gesucht haben, wenn Sie sich in einer ähnlichen Position wie ich befunden hätten.

108
user3728501

Beachten Sie, dass Sie nicht so viele -ls benötigen, wenn Sie glfw mit der Option BUILD_SHARED_LIBS installieren. (Sie können diese Option aktivieren, indem Sie zuerst ccmake ausführen.) .
Auf diese Weise installiert Sudo make install die gemeinsam genutzte Bibliothek in /usr/local/lib/ligglfw.so. Sie können die Beispieldatei dann mit einem einfachen Befehl kompilieren:

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

Vergessen Sie nicht,/usr/local/lib/vor dem Ausführen des Programms zum Suchpfad für gemeinsam genutzte Bibliotheken hinzuzufügen. Dies kann gemacht werden mit:

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

Und Sie können das in Ihre ~/.bashrc einfügen, damit Sie es nicht die ganze Zeit eingeben müssen.

16
CastleDefender

ich habe es auf diese Weise gelöst

Eine pkg-config-Datei beschreibt alle für die Verwendung einer Bibliothek erforderlichen Flags und Abhängigkeiten für die Kompilierungszeit und die Linkzeit. 

pkg-config --static --libs glfw3

zeigt mir das

-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  

Ich weiß nicht, ob all diese Bibliotheken tatsächlich zum Kompilieren notwendig sind, aber für mich funktioniert es ...

13
Oleh Pomazan

Da die akzeptierte Antwort keine weiteren Änderungen zulässt, fasse ich sie mit einem einzigen Befehl zum Kopieren und Einfügen zusammen (Ersetzen Sie 3.2.1 durch die neueste Version, die im ersten Befehl verfügbar ist):

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

Wenn Sie ein Programm kompilieren möchten, verwenden Sie die folgenden Befehle:

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

Wenn Sie dem Lernprogramm 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 rechten unteren Ecke der Website und laden Sie die ZIP-Datei herunter. Extrahieren Sie es und kompilieren Sie die Quellen mit dem folgenden Befehl:

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

Jetzt werden die Befehle zum Kompilieren folgendermaßen:

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

Toller Führer, danke. Bei den meisten Anweisungen hier wurde es fast für mich erstellt, aber ich hatte einen verbleibenden Fehler.

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol '[email protected]@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

Nach der Suche nach diesem Fehler musste ich der Befehlszeile -ldl Hinzufügen.

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

Dann wurde die "Hallo GLFW" -Beispiel-App kompiliert und verlinkt.

Ich bin ziemlich neu in Linux, daher bin ich mir nicht ganz sicher, was genau diese zusätzliche Bibliothek bewirkt ... außer dass ich meinen Link-Fehler behebe. Ich sehe diesen cmd-Zeilenschalter jedoch im obigen Beitrag.

2
user2941878

Wenn jemand faul wird und vielleicht nicht weiß, wie man Shell für all diese Bibliotheken und -l s konfiguriert, dann habe ich ein Python-Skript erstellt (Sie müssen Python3 haben, die meisten Linux-Benutzer haben es.) Sie können Skripte einfach kompilieren und ausführen, ohne sich große Sorgen zu machen. Es gibt nur regelmäßige Systemaufrufe, die einfach übersichtlich angeordnet sind. Ich habe es für mich selbst erstellt, aber vielleicht wäre es nützlich: Hier ist es

0
mathmaniage