Chodzi swrast
o renderer oprogramowania. Oznacza to, że nie znajduje sterownika sprzętowego dla karty graficznej. Zainstalowano kilka bibliotek libGL i kilka dowiązań symbolicznych do tych bibliotek. Aby zobaczyć te, uruchom to z powłoki:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
Prawdopodobną przyczyną tego problemu jest to, że instalacja sterowników graficznych czasami psuje te dowiązania symboliczne. (W szczególności /usr/local/lib/libGL.so.1.2.0
może to być niewłaściwa biblioteka lub link do niewłaściwego linku).
Aby dowiedzieć się, jaką bibliotekę próbują uruchomić programy OpenGL, możesz włączyć trochę gadatliwości i uruchomić prosty program OpenGL. Możesz to sprawdzić za pomocą standardowego programu testowego OpenGL:
LIBGL_DEBUG=verbose glxgears
Mam nadzieję, że zawiedzie w taki sam sposób jak SFML. Dzięki LIBGL_DEBUG
niemu dowiesz się, jaką bibliotekę OpenGL próbuje załadować. Co więcej, lib, który będzie próbował załadować, prawie na pewno będzie /usr/local/lib/libGL.so.1.2.0
(Edycja: To była standardowa biblioteka OpenGL na moim komputerze w chwili, gdy odpowiedziałem na to pytanie. Może to być inna wersja na twoim komputerze).
Zatem rozwiązaniem (w tym przypadku) jest upewnienie się, że /usr/local/lib/libGL.so.1.2.0
jest to dowiązanie symboliczne wskazujące właściwą bibliotekę OpenGL. W moim przypadku mam sterownik Nvidia 3.40, więc uruchomiłem:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
Ale będziesz chciał wskazać na bibliotekę OpenGL, która jest dla Ciebie odpowiednia (wymieniona w pierwszym poleceniu find).
Podsumowując: instalowanie (zastrzeżonych) sterowników graficznych może uszkodzić dowiązania symboliczne używane w bibliotekach OpenGL. Aby rozwiązać ten problem, ręcznie napraw łącza symboliczne ( /usr/local/lib/libGL.so.1.2.0
najpierw napraw ).
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
. Domyślnie mój Ubuntu 16.04 używa z/usr/lib/nvidia-361/libGL.so
powodu/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
i wszystko działa dobrze.