Các vấn đề với libGl, fbConfigs, swrast qua mỗi bản cập nhật?


38

Tôi gặp vấn đề khi biên dịch dự án SFML (không thấy bất kỳ hình ảnh nào):

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

Lỗi này có thể được giải quyết bằng cách cài đặt lại trình điều khiển nvidia đơn giản thông qua hướng dẫn này: https://askubfox.com/a/451248 4321889

..nhưng khi tôi nhận được các bản cập nhật mới - lỗi này đang quay trở lại; (Tôi nên làm gì? Đây không phải là giải pháp - không sử dụng bản cập nhật của hệ thống ...

PS và vâng, tôi đã lưu tất cả các thay đổi sau khi cài đặt trình điều khiển nvidia


1
Điều này xảy ra với tôi nếu tôi cố gắng khởi chạy một tệp thực thi OpenGL tự động tải mesa 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/etc/ld.so.conf.d/x86_64-linux-gnu_GL.confvà tất cả đều hoạt động tốt.
Ciro Santilli 心 心 事件

Câu trả lời:


29

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.0có 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_DEBUGnó 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.0là 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.0trước).


Vấn đề này đã giúp tôi hiểu thông báo lỗi, nhưng không sửa nó. Câu trả lời "cài đặt lại trình điều khiển nvidia" là một bổ sung tốt vì nó thực sự đã khắc phục vấn đề cho tôi.
henko

@henko có cài đặt lại trình điều khiển nvidia có lẽ là cách nhanh nhất và dễ nhất để sắp xếp thứ này. Quay trở lại với phương pháp này nếu vì bất kỳ lý do gì, việc cài đặt lại trình điều khiển không khắc phục được sự cố của bạn và bạn cần phải làm bẩn tay mình.
con nhím mất trí nhớ

6
Tôi hiểu mọi phần, ngoại trừ "gần như chắc chắn là /usr/local/lib/libGL.so.1.2.0". Của tôi cho thấy "libGL: OpenDriver: thử / những tập tin này tồn tại trong hệ thống của tôi ...
Samuel Li

1
Cảm ơn một lần nữa cho lời giải thích của bạn; Tôi hiểu rõ hơn về vấn đề này. Tôi cũng muốn chỉ ra rằng trong trường hợp của tôi, có một lỗi đã được xác nhận trong ub Ubuntu swrast.so và mọi người đã thảo luận về nó.
Samuel Li

1
Cảm ơn bạn @dementedhedgeoose Đây là một bài viết xuất sắc và giúp tôi giải quyết vấn đề của mình (trên Fedora-25, nhân tiện). = :). Bình chọn lên.
NYCeyes

5

Tôi gặp vấn đề tương tự trên Ubuntu 16.10 với các nvidia-340trình điều khiển và không có giải pháp nào ở đây làm việc cho tôi.

Hóa ra các thư viện 32 bit không nằm trên đường dẫn thư viện.

Điều này làm việc cho tôi:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-340"

4

Tôi đã gặp vấn đề khi nhận được liên kết tượng trưng chính xác để chỉ vào trình điều khiển nVidia và tôi đã tìm thấy một cách khác phù hợp với mình.

Nó được phác thảo ở đây .

Và nó liệt kê cách cài đặt trình điều khiển nVidia thông qua PPA, có sẵn cho 349.16, phiên bản mới nhất.

Trước tiên hãy gỡ cài đặt mọi trình điều khiển nVidia hiện được cài đặt bằng cách mở cửa sổ đầu cuối ( Ctrl+ ALT+ T) và nhập

sudo apt-get remove nvidia*

Khởi động lại hệ thống của bạn

Sau đó mở một thiết bị đầu cuối khác và gõ như sau

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-349 nvidia-settings
sudo add-apt-repository -r ppa:xorg-edgers/ppa

Sau đó khởi động lại

Tôi đã thử nó sau khi bị mất với các liên kết tượng trưng và hơi nước hoạt động tốt ngay sau khi cài đặt trình điều khiển và một lần nữa nó vẫn hoạt động sau khi tôi có hơn 400 megs cập nhật hệ thống.


2
Tôi sẽ không đề nghị để lại xorg-edgers ppa sau khi trình điều khiển được cài đặt. Rất nhiều gói không ổn định sẽ đến trong bản cập nhật.
Pilot6

chỉ cần loại bỏ nvidia * đã giải quyết vấn đề này cho tôi!
xtofl

3

Để cung cấp giải pháp thay thế cho câu trả lời của Adrian: nếu bạn thích sử dụng trình điều khiển độc quyền có nguồn gốc trực tiếp từ NVIDIA thay vì các trình điều khiển được tìm thấy trong PPA, cài đặt (hoặc trong trường hợp của tôi, cài đặt lại) trình điều khiển độc quyền mới nhất có thể giúp loại bỏ lỗi sai.

Nếu bạn chưa có trình điều khiển NVIDIA, hãy tải xuống trình điều khiển từ trang web của NVIDIA . Tiếp theo, chuyển sang tty ( ctrl+ alt+ F1) và tắt trình quản lý đăng nhập của bạn:

Nếu sử dụng lightdm, $ sudo service lightdm stop

Nếu sử dụng gdm, $ sudo service gdm stop

Điều hướng đến tập lệnh cài đặt và chạy nó, và làm theo lời nhắc. Đừng lo lắng nếu tập lệnh cài đặt sẵn bị lỗi. Tôi luôn chấp nhận đăng ký DKMS và các thư viện tương thích 32 bit. Sau khi trình điều khiển được cài đặt, khởi động lại máy của bạn:

$ sudo reboot

Nếu bạn đã có tập lệnh cài đặt từ trình điều khiển NVIDIA cũ hơn, chỉ cần chạy tập lệnh cài đặt trình điều khiển NVIDIA như đã nêu ở trên, nhưng với tùy chọn "--update":

$ sudo ./NVIDIA-Linux-x86_64-***.**.run --update

Điều này sẽ giúp bạn có phiên bản cập nhật nhất của trình điều khiển.

Làm điều này đã sửa libGL error: failed to load driver: swrastlỗi của tôi .


3

Có cùng một vấn đề trên Ubuntu 18. Điều này về cơ bản chỉ xảy ra với các ứng dụng 32 bit. Vì vậy, ý tưởng của tôi là cài đặt nvidia 32 bit một cái gì đó, vì thư mục / usr / lib / i386-linux-gnu / của tôi trống rỗng đáng ngờ.

Sau rất ít lần thử, điều này đã khắc phục vấn đề của tôi với hơi nước và rượu vang không bắt đầu:

sudo apt install libnvidia-gl-418:i386

(và thay đổi 418 thành bất kỳ phiên bản nào bạn có)

Điều thú vị là các ứng dụng đã không phàn nàn về việc thiếu phụ thuộc trong quá trình cài đặt.


Điều này dường như đã khắc phục một trong những vấn đề của tôi liên quan đến câu hỏi, ít nhất là ...
Andrew

Nó là 32 bit có thể là lý do tại sao. Các chương trình khác hoạt động tốt, nhưng những chương trình đó có thể là 64 bit. Tuy nhiên, điều này hoạt động tốt (mặc dù tôi đã phải nâng cấp phiên bản)
Zoe

2

Tôi phải thừa nhận, tôi không chắc tại sao điều này làm việc cho tôi, nhưng nó đã làm. Trong trường hợp đặc biệt này, "sửa" các mục ld.so.conf.d bằng cách thêm một mục mới như thế này hoạt động:

sudo ln -s /usr/lib/nvidia-381/ld.so.conf /etc/ld.so.conf.d/nvidia64.conf
sudo ldconfig 

Điều này có ý nghĩa, cho đến khi bạn chạy như sau find:

$ find -L /etc/ld.so.conf.d -type f | xargs grep -i nvidia
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib32/nvidia-381

Tại sao có các mục giống nhau trong các tác phẩm ba lần, nhưng không trùng lặp, tôi không có ý tưởng!


Hoạt động cho tôi trên Ubunu 17.04. Chỉ cần một lưu ý - đường dẫn là / usr / lib / nvidia-xxx trong đó xxx là số trình điều khiển để điều chỉnh lệnh theo đó.
dùng2082382

2

Đây là một aptgiải pháp hữu hiệu cho tôi, không có liên kết hoặc mấp máy xung quanh với ld.so.conf.d:

apt install --reinstall libgl1-mesa-glx:i386
apt install mesa-utils nvidia-driver nvidia-driver-libs-i386

1

Tôi chỉ sử dụng dòng này:

 sudo rm /usr/lib/i386-linux-gnu/libGL.so.1

Và nó hoạt động.

Bởi vì tôi thấy đầu vào như vậy khi tôi thực thi sudo ldconfig -p | grep -i gl.so:

libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1
libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20
libOpenGL.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so.0
libOpenGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so
libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1
libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1
libEGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so

1
Có phải mọi người phải tuân theo điều này có nghĩa là gì ...?
Andrew

Làm việc cho tôi, cảm ơn!
Hett

0

Chỉ cần chạy này:

sudo apt-get install libnvidia-gl-(the version of your driver):i386

Phiên bản trình điều khiển của bạn được hiển thị trong cài đặt nvidia.


-3

Tôi đã phải đối mặt với vấn đề kỳ lạ này khi tôi ssh với Ubuntu VM từ Macbook Pro của tôi, nhưng cài đặt trình điều khiển Nvidia dưới đây trên Ubuntu 16.04 của tôi đã khắc phục sự cố. Hy vọng điều này làm việc cho bạn.

sudo apt-get cài đặt nvidia-331


1
Tại sao bạn sẽ cài đặt trình điều khiển GPU Nvidia trên hệ thống máy khách VM? Ó_ò
David

Các downvote là không thích hợp. @DavidFoerster đúng ở chỗ việc cài đặt trình điều khiển GPU trong máy ảo không có ý nghĩa gì (trừ khi bạn truyền phần cứng GPU cho VM). Nhưng: Tôi đang chạy X qua SSH và tôi đang đối mặt với cùng một vấn đề. Các ứng dụng X khởi động trên máy từ xa (VM) gần như luôn luôn dẫn đến các thông báo lỗi được đề cập trong câu hỏi của OP. Tôi chưa tìm thấy giải pháp cho vấn đề đó, nhưng nếu cài đặt trình điều khiển GPU trên máy ảo từ xa sẽ là giải pháp, tôi sẽ làm điều đó, bất kể nó có hợp lý hay không, chỉ để làm cho lỗi đó biến mất (Tôi hiện đang bỏ qua chúng).
Binarus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.