The swrast
hal adalah penyaji perangkat lunak. Itu berarti tidak menemukan driver perangkat keras untuk kartu grafis Anda. Ada banyak perpustakaan libGL diinstal dan banyak tautan simbolik ke perpustakaan tersebut. Untuk melihat ini jalankan ini dari shell:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
Sekarang kemungkinan penyebab masalah Anda adalah bahwa menginstal driver grafis kadang-kadang memutuskan tautan simbolik ini. (Khususnya /usr/local/lib/libGL.so.1.2.0
mungkin salah lib atau tautan sym ke tautan yang salah).
Untuk mengetahui pustaka apa yang ingin dijalankan oleh program OpenGL, Anda dapat menghidupkan sedikit kata dan menjalankan program OpenGL sederhana. Anda dapat memverifikasi ini menggunakan program uji OpenGL standar:
LIBGL_DEBUG=verbose glxgears
Semoga itu akan gagal dengan cara yang sama seperti SFML. Dengan LIBGL_DEBUG
itu akan memberi tahu Anda apa perpustakaan OpenGL yang coba dimuat. Lagipula lib yang akan dicoba akan hampir pasti /usr/local/lib/libGL.so.1.2.0
(Edit: Ini adalah pustaka OpenGL standar pada mesin saya pada saat saya menjawab ini. Mungkin ada beberapa versi lain pada mesin Anda sekarang).
Jadi solusinya (dalam hal ini) adalah memastikan bahwa itu /usr/local/lib/libGL.so.1.2.0
adalah tautan simbolik yang menunjuk pada pustaka OpenGL yang tepat. Dalam kasus saya, saya memiliki driver Nvidia 3.40 jadi saya berlari:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
Tetapi Anda ingin mengarahkannya ke lib OpenGL yang sesuai untuk Anda (tercantum dalam perintah find pertama).
Singkatnya: menginstal driver grafis (eksklusif) dapat memutus tautan simbolik yang digunakan untuk lib OpenGL. Untuk mengatasi masalah ini secara manual perbaiki tautan simbolik (perbaiki /usr/local/lib/libGL.so.1.2.0
dulu).
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
. Secara default, Ubuntu 16.04 saya gunakan/usr/lib/nvidia-361/libGL.so
karena/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
dan semuanya berfungsi dengan baik.