Các swrast
điều là các renderer phần mềm. Điều đó có nghĩa là nó không tìm thấy trình điều khiển phần cứng cho card đồ họa của bạn. Có một loạt các thư viện libGL được cài đặt và một loạt các liên kết tượng trưng đến các thư viện đó. Để xem những cái này chạy từ shell:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
Bây giờ nguyên nhân có thể xảy ra cho vấn đề của bạn là việc cài đặt trình điều khiển đồ họa đôi khi phá vỡ các liên kết tượng trưng này. (Cụ thể /usr/local/lib/libGL.so.1.2.0
có thể là lib sai hoặc liên kết sym đến liên kết sai).
Để tìm ra thư viện nào mà các chương trình OpenGL đang cố chạy, bạn có thể bật một chút chi tiết và chạy một chương trình OpenGL đơn giản. Bạn có thể xác minh điều này bằng chương trình thử nghiệm OpenGL tiêu chuẩn:
LIBGL_DEBUG=verbose glxgears
Hy vọng rằng điều đó sẽ thất bại giống như SFML. Với LIBGL_DEBUG
nó sẽ cho bạn biết thư viện OpenGL đang cố tải gì. Hơn nữa, lib nó sẽ cố tải gần như chắc chắn /usr/local/lib/libGL.so.1.2.0
(Chỉnh sửa: Đây là thư viện OpenGL tiêu chuẩn trên máy của tôi tại thời điểm tôi trả lời. Đây có thể là một phiên bản khác trên máy của bạn bây giờ).
Vì vậy, giải pháp (trong trường hợp này) là đảm bảo rằng đó /usr/local/lib/libGL.so.1.2.0
là một liên kết tượng trưng chỉ vào thư viện OpenGL bên phải. Trong trường hợp của tôi, tôi có trình điều khiển Nvidia 3.40 vì vậy tôi đã chạy:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
Nhưng bạn sẽ muốn trỏ nó vào lib OpenGL phù hợp với bạn (được liệt kê trong lệnh tìm đầu tiên).
Tóm lại: cài đặt trình điều khiển đồ họa (độc quyền) có thể phá vỡ các liên kết tượng trưng được sử dụng cho các lib OpenGL. Để giải quyết vấn đề này bằng tay, hãy sửa các liên kết tượng trưng (sửa /usr/local/lib/libGL.so.1.2.0
trước).
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
. Theo mặc định, Ubuntu 16.04 của tôi sử dụng/usr/lib/nvidia-361/libGL.so
vì/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
và tất cả đều hoạt động tốt.