swrast
สิ่งที่เป็น renderer ซอฟแวร์ นั่นหมายความว่าไม่ได้หาไดรเวอร์ฮาร์ดแวร์สำหรับกราฟิกการ์ดของคุณ มีไลบรารี libGL จำนวนมากที่ติดตั้งและลิงก์สัญลักษณ์มากมายไปยังไลบรารีเหล่านั้น เพื่อดูสิ่งเหล่านี้เรียกใช้จากเปลือก:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
ตอนนี้สาเหตุที่เป็นไปได้ของปัญหาของคุณคือบางครั้งการติดตั้งไดรเวอร์กราฟิกแบ่งลิงค์สัญลักษณ์เหล่านี้ (โดยเฉพาะอย่างยิ่ง/usr/local/lib/libGL.so.1.2.0
น่าจะเป็น lib ผิดหรือลิงค์ sym ไปยังลิงค์ผิด)
ในการหาว่าไลบรารี่โปรแกรมใดบ้างที่พยายามใช้งานโปรแกรม OpenGL คุณสามารถเปิดการใช้คำฟุ่มเฟื่อยและเรียกใช้โปรแกรม OpenGL แบบง่าย ๆ คุณสามารถตรวจสอบสิ่งนี้ได้โดยใช้โปรแกรมทดสอบ OpenGL มาตรฐาน:
LIBGL_DEBUG=verbose glxgears
หวังว่าจะล้มเหลวในลักษณะเดียวกับ SFML ด้วยLIBGL_DEBUG
มันควรจะบอกคุณว่าห้องสมุด OpenGL กำลังพยายามโหลด นอกจากนี้ lib ที่จะพยายามโหลดนั้นเกือบจะแน่นอน/usr/local/lib/libGL.so.1.2.0
(แก้ไข: นี่คือไลบรารี OpenGL มาตรฐานในเครื่องของฉันในเวลาที่ฉันตอบมันนี่อาจเป็นเวอร์ชั่นอื่น ๆ ในเครื่องของคุณ)
ดังนั้นการแก้ปัญหา (ในกรณีนี้) คือการทำให้แน่ใจว่า/usr/local/lib/libGL.so.1.2.0
เป็นลิงค์สัญลักษณ์ที่ชี้ไปที่ห้องสมุด OpenGL ที่ถูกต้อง ในกรณีของฉันฉันมีไดรเวอร์ Nvidia 3.40 ดังนั้นฉันจึงวิ่ง:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
แต่คุณจะต้องการชี้ไปที่ OpenGL lib ที่เหมาะสมกับคุณ (อยู่ในคำสั่ง find แรก)
โดยสรุป: การติดตั้งไดรเวอร์กราฟิก (กรรมสิทธิ์) สามารถแบ่งลิงก์สัญลักษณ์ที่ใช้สำหรับ OpenGL libs เพื่อแก้ปัญหานี้ให้แก้ไขลิงก์สัญลักษณ์ด้วยตนเอง (แก้ไข/usr/local/lib/libGL.so.1.2.0
ก่อน)
libGL.so
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
โดยค่าเริ่มต้น Ubuntu 16.04 ของฉันใช้/usr/lib/nvidia-361/libGL.so
เพราะ/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
และมันก็ใช้ได้ดี