Das swrast
Ding ist der Software-Renderer. Das bedeutet, dass der Hardwaretreiber für Ihre Grafikkarte nicht gefunden wird. Es sind eine Reihe von libGL-Bibliotheken installiert und eine Reihe von symbolischen Links zu diesen Bibliotheken. Um dies zu sehen, führen Sie dies von der Shell aus:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
Die wahrscheinliche Ursache für Ihr Problem ist, dass bei der Installation von Grafiktreibern diese symbolischen Verknüpfungen manchmal unterbrochen werden. (Insbesondere /usr/local/lib/libGL.so.1.2.0
handelt es sich wahrscheinlich entweder um die falsche Bibliothek oder um einen Sym-Link zum falschen Link.)
Um herauszufinden, welche Bibliothek die OpenGL-Programme ausführen möchten, können Sie ein wenig Ausführlichkeit aktivieren und ein einfaches OpenGL-Programm ausführen. Sie können dies mit dem Standard-OpenGL-Testprogramm überprüfen:
LIBGL_DEBUG=verbose glxgears
Hoffentlich scheitert das genauso wie SFML. Damit LIBGL_DEBUG
sollten Sie wissen, welche OpenGL-Bibliothek geladen werden soll. Außerdem wird die /usr/local/lib/libGL.so.1.2.0
Bibliothek, die es zu laden versuchen wird, mit ziemlicher Sicherheit sein (Bearbeiten: Dies war die Standard-OpenGL-Bibliothek auf meinem Computer zum Zeitpunkt der Beantwortung dieser Frage. Möglicherweise befindet sich jetzt eine andere Version auf Ihrem Computer).
Die Lösung (in diesem Fall) besteht also darin, sicherzustellen, dass /usr/local/lib/libGL.so.1.2.0
es sich um einen symbolischen Link handelt, der auf die rechte OpenGL-Bibliothek verweist. In meinem Fall habe ich den Nvidia 3.40-Treiber, also lief ich:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
Sie sollten es jedoch auf die OpenGL-Bibliothek verweisen, die für Sie geeignet ist (im ersten find-Befehl aufgeführt).
Zusammenfassend lässt sich sagen, dass die Installation von (proprietären) Grafiktreibern die für OpenGL-Bibliotheken verwendeten symbolischen Links beschädigen kann. Um dieses Problem manuell zu lösen, korrigieren Sie die symbolischen Verknüpfungen ( /usr/local/lib/libGL.so.1.2.0
zuerst korrigieren ).
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
. Standardmäßig verwendet mein Ubuntu 16.04/usr/lib/nvidia-361/libGL.so
da/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
und alles funktioniert einwandfrei.