O swrast
problema é o renderizador de software. Isso significa que não está encontrando o driver de hardware para sua placa de vídeo. Existem várias bibliotecas libGL instaladas e vários links simbólicos para essas bibliotecas. Para vê-los, execute isso no shell:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
Agora, a causa provável do seu problema é que a instalação de drivers gráficos às vezes quebra esses links simbólicos. (Especificamente, /usr/local/lib/libGL.so.1.2.0
é provável que seja a lib errada ou um link sym para o link errado).
Para descobrir qual biblioteca os programas OpenGL estão tentando executar, você pode ativar um pouco de verbosidade e executar um programa OpenGL simples. Você pode verificar isso usando o programa de teste padrão OpenGL:
LIBGL_DEBUG=verbose glxgears
Espero que isso falhe da mesma maneira que o SFML. Com LIBGL_DEBUG
isso, você deverá saber qual biblioteca do OpenGL está tentando carregar. Além disso, a lib que ele está tentando carregar quase certamente será /usr/local/lib/libGL.so.1.2.0
(Edit: Esta era a biblioteca OpenGL padrão na minha máquina no momento em que respondi a isso. Pode muito bem ser outra versão na sua máquina agora).
Portanto, a solução (neste caso) é garantir que /usr/local/lib/libGL.so.1.2.0
seja um link simbólico apontando para a biblioteca OpenGL correta. No meu caso, eu tenho o driver da Nvidia 3.40, então executei:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
Mas você deve apontar para a biblioteca OpenGL apropriada para você (listada no primeiro comando find).
Em resumo: a instalação de drivers gráficos (proprietários) pode quebrar os links simbólicos usados nas bibliotecas do OpenGL. Para resolver esse problema, corrija manualmente os links simbólicos (corrija /usr/local/lib/libGL.so.1.2.0
primeiro).
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
. Por padrão, meu Ubuntu 16.04 usa/usr/lib/nvidia-361/libGL.so
por causa/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
disso e tudo funciona bem.