Masalah dengan libGl, fbConfigs, swrast melalui setiap pembaruan?

38

Saya memiliki masalah ketika mengkompilasi proyek-SFML (tidak melihat grafik):

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

Kesalahan ini dapat diatasi dengan menginstal ulang nvidia-driver sederhana melalui tutorial ini: https://askubuntu.com/a/451248/341889

..tapi ketika saya mendapatkan pembaruan baru - kesalahan ini kembali; (Apa yang harus saya lakukan? Ini bukan solusinya - tidak menggunakan pembaruan sistem ...

PS dan ya, saya menyimpan semua perubahan setelah menginstal driver nvidia

pushandpop
sumber
1
Hal ini terjadi kepada saya jika saya mencoba untuk meluncurkan OpenGL executable dinamis pemuatan mesa 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.sokarena /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confdan semuanya berfungsi dengan baik.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

29

The swrasthal 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.0mungkin 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_DEBUGitu 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.0adalah 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.0dulu).

landak gila
sumber
Masalah ini membantu saya memahami pesan kesalahan, tetapi tidak memperbaikinya. Jawaban "instal ulang driver nvidia" membantu adalah pelengkap yang baik karena sebenarnya memperbaiki masalah bagi saya.
henko
@ Ya, ya menginstal ulang driver nvidia mungkin adalah cara tercepat dan termudah untuk menyelesaikan masalah ini. Kembali ke pendekatan ini jika karena alasan apa pun menginstal ulang driver tidak memperbaiki masalah Anda dan Anda perlu mengotori tangan Anda.
landak gila
6
Saya mengerti setiap bagian, kecuali "hampir pasti menjadi /usr/local/lib/libGL.so.1.2.0". Tambang saya menunjukkan "libGL: OpenDriver: mencoba /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: mencoba /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" dan semuanya file ini ada di sistem saya ...
Samuel Li
1
Sekali lagi terima kasih atas penjelasan Anda; Saya lebih mengerti tentang masalah ini. Saya juga ingin menunjukkan bahwa dalam kasus saya, ada bug yang dikonfirmasi di ubuntu swrast.so, dan orang-orang telah mendiskusikannya .
Samuel Li
1
Terima kasih @dementedhedgehog Ini adalah pos yang diartikulasikan dengan sangat baik dan membantu saya memecahkan masalah saya (pada Fedora-25, omong-omong). = :). Terpilih.
NYCeyes
5

Saya memiliki masalah yang sama pada Ubuntu 16.10 dengan nvidia-340 driver dan tidak ada solusi yang bekerja untuk saya.

Ternyata perpustakaan 32-bit tidak ada di jalur perpustakaan.

Liner satu ini bekerja untuk saya:

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

Saya mengalami masalah dalam mendapatkan symlink yang benar untuk menunjuk pada driver nVidia dan saya menemukan cara lain yang berfungsi untuk saya.

Diuraikan di sini .

Dan itu daftar tentang cara menginstal driver nVidia melalui PPA yang tersedia untuk 349.16, versi terbaru.

Hapus instalan driver nVidia yang saat ini diinstal dengan membuka jendela terminal ( Ctrl+ ALT+ T) dan mengetik

sudo apt-get remove nvidia*

Mulai ulang sistem Anda

Kemudian buka terminal lain dan ketik berikut ini

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

Kemudian reboot lagi

Saya mencobanya setelah tersesat dengan symlink dan steam bekerja dengan baik segera setelah menginstal driver dan lagi itu masih berfungsi setelah saya memiliki 400+ MB pembaruan sistem.

Adrian
sumber
2
Saya tidak akan menyarankan untuk meninggalkan xorg-edgers ppa setelah driver diinstal. Banyak paket tidak stabil akan datang dalam pembaruan.
Pilot6
hanya menghapus nvidia * sudah menyelesaikan masalah ini untuk saya!
xtofl
3

Untuk memberikan alternatif bagi jawaban Adrian: jika Anda lebih suka menggunakan driver berpemilik yang bersumber langsung dari NVIDIA daripada yang ditemukan dalam PPA, menginstal (atau dalam kasus saya, menginstal ulang) driver berpemilik terbaru dapat membantu menghilangkan kesalahan swrast.

Jika Anda belum memiliki driver NVIDIA, unduh driver dari situs web NVIDIA . Selanjutnya, beralih ke tty ( ctrl+ alt+F1 ) dan matikan manajer login Anda:

Jika menggunakan lightdm, $ sudo service lightdm stop

Jika menggunakan gdm, $ sudo service gdm stop

Arahkan ke skrip instal dan jalankan, dan ikuti petunjuknya. Jangan khawatir jika skrip pra-instal gagal. Saya selalu menerima pendaftaran DKMS dan perpustakaan kompatibilitas 32-bit. Setelah driver diinstal, restart mesin Anda:

$ sudo reboot

Jika Anda sudah memiliki skrip instal dari driver NVIDIA yang lebih lama, cukup jalankan skrip instal driver NVIDIA seperti disebutkan di atas, tetapi dengan opsi "--update":

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

Ini akan membuat Anda mendapatkan versi terbaru dari driver.

Melakukan ini memperbaiki libGL error: failed to load driver: swrastkesalahan saya .

NWRichmond
sumber
3

Punya masalah yang sama di ubuntu 18. Ini pada dasarnya terjadi hanya dengan aplikasi 32bit. Jadi ide saya adalah menginstal 32 bit nvidia sesuatu, karena folder / usr / lib / i386-linux-gnu / saya mencurigakan kosong.

Setelah mencoba sangat sedikit, ini memperbaiki masalah saya dengan uap dan anggur tidak dimulai:

sudo apt install libnvidia-gl-418:i386

(dan ubah 418 ke versi mana pun yang Anda miliki)

Menarik bahwa aplikasi tidak mengeluh tentang dependensi yang hilang selama instalasi.

vmicho
sumber
Ini sepertinya telah memperbaiki salah satu masalah saya yang terkait dengan pertanyaan, setidaknya ...
Andrew
Menjadi 32 bit mungkin menjadi alasannya. Program lain berfungsi dengan baik, tetapi itu mungkin 64 bit. Meskipun demikian, ini berfungsi dengan baik (saya harus menabrak versi)
Zoe
2

Harus saya akui, saya tidak yakin mengapa ini berhasil untuk saya, tetapi ternyata berhasil. Dalam hal ini khususnya "memperbaiki" entri ld.so.conf.d dengan menambahkan entri baru seperti ini berfungsi:

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

Ini masuk akal, sampai Anda menjalankan yang berikut 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

Mengapa memiliki entri yang sama dalam karya rangkap tiga, tetapi tidak dalam rangkap dua, saya tidak tahu!

bbarker
sumber
Bekerja untuk saya di Ubunu 17.04. Hanya sebuah catatan - pathnya adalah / usr / lib / nvidia-xxx di mana xxx adalah nomor driver jadi sesuaikan perintahnya dengan itu.
user2082382
2

Inilah aptsolusi -hanya yang bekerja untuk saya, tidak ada symlinking atau bercanda dengan ld.so.conf.d:

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

Saya hanya menggunakan baris ini:

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

dan itu berhasil.

Karena saya melihat input seperti itu ketika saya menjalankan 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
DapangLiu
sumber
1
Apakah orang seharusnya mengikuti apa artinya ini ...?
Andrew
Bekerja untuk saya, terima kasih!
Hett
0

Jalankan saja ini:

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

Versi driver Anda ditampilkan dalam pengaturan nvidia.

Mimi si Kucing
sumber
0

Dalam kasus saya solusi untuk masalah ini adalah kelanjutan dari pesan kesalahan

Paraview 5.7.0 memberi tahu saya bahwa:

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
(   0.833s) [paraview] vtkOpenGLRenderWindow.c:748 ERR| vtkXOpenGLRenderWindow (0x5588ae6a2160): GLEW could not be initialized: Missing GL version
...
Segmentation fault

Pesan

GLEW could not be initialized: Missing GL version

telah menjadi kunci. Saya menjalankan 'glxgears' untuk memeriksa apakah perpustakaan grafis berjalan dengan baik - lihat juga man glxgears- menampilkan animasi ini:

tangkapan layar glxgears

Maka solusi saya hanyalah mengatur variabel lingkungan

LD_PRELOAD=/usr/lib/libGL.so

Perhatikan:

  1. Meskipun saya memiliki kartu grafis Nvidia, saya tidak perlu bermain-main dengannya;
  2. Meluncurkan locate libGL.so, saya menemukan kandidat lain /usr/lib/i386-linux-gnu/libGL.so. Namun, menetapkan ini sebagai LD_PRELOAD, tidak memperbaiki masalah;
  3. Tidak perlu mengatur informasi tentang perpustakaan GLEW yang muncul di atas --- lihat locate libGLEW.so

Saya berhutang budi kepada https://github.com/openai/mujoco-py/issues/44 untuk mendapatkan petunjuk

XavierStuvw
sumber
Untuk perbedaan antara LD_PRELOAD dan LD_LIBRARY_PATH yang lebih sering dikutip, silakan lihat stackoverflow.com/q/14715175/5459638
XavierStuvw
-3

Saya menghadapi masalah aneh ini ketika saya ssh ke Ubuntu VM saya dari Macbook Pro saya, tetapi menginstal driver Nvidia di bawah ini pada Ubuntu 16.04 saya memperbaiki masalahnya. Semoga ini berhasil untuk Anda.

sudo apt-get install nvidia-331

TekTutorJegan
sumber
1
Mengapa Anda menginstal driver Nvidia GPU pada sistem tamu VM? Ó_ò
David Foerster
Downvote tidak tepat. @ DavidvidFoerster benar bahwa menginstal driver GPU di VM tidak masuk akal (kecuali jika Anda memasukkan hardware GPU ke VM). Tapi: Saya menjalankan X lebih dari SSH, dan saya menghadapi masalah yang sama. Memulai aplikasi X pada mesin jarak jauh (VM) hampir selalu mengarah ke pesan kesalahan yang disebutkan dalam pertanyaan OP. Saya belum menemukan solusi untuk masalah itu, tetapi jika menginstal driver GPU pada VM jarak jauh akan menjadi solusi, saya akan melakukannya, terlepas dari apakah masuk akal, hanya untuk membuat kesalahan hilang (saya saat ini mengabaikan mereka).
Binarus