Problemi con libGl, fbConfigs, swrast attraverso ogni aggiornamento?


38

Ho dei problemi durante la compilazione del progetto SFML (non vedo alcun grafico):

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

Questo errore può essere risolto semplicemente reinstallando i driver nvidia attraverso questo tutorial: https://askubuntu.com/a/451248/341889

..ma quando ricevo nuovi aggiornamenti - questo errore sta tornando; (Cosa devo fare? Non è la soluzione - Non usare l'aggiornamento di sistema ...

PS e sì, ho salvato tutte le modifiche dopo aver installato i driver nvidia


1
Questo succede a me se provo a lanciare un OpenGL dinamicamente eseguibile carico mesa libGL.so: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. Per impostazione predefinita, il mio Ubuntu 16.04 utilizza a /usr/lib/nvidia-361/libGL.socausa di /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confe tutto funziona bene.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Risposte:


29

Il swrastpunto è il renderer software. Ciò significa che non trova il driver hardware per la scheda grafica. Ci sono un sacco di librerie libGL installate e un sacco di collegamenti simbolici a quelle librerie. Per vederli eseguire questo dalla shell:

find /usr -iname "*libGL.so*" -exec ls -l -- {} + 

Ora la probabile causa del tuo problema è che l'installazione dei driver grafici a volte interrompe questi collegamenti simbolici. (In particolare /usr/local/lib/libGL.so.1.2.0è probabile che sia la lib sbagliata o un collegamento sym al collegamento sbagliato).

Per capire quale libreria i programmi OpenGL stanno tentando di eseguire, puoi attivare un po 'di verbosità ed eseguire un semplice programma OpenGL. Puoi verificarlo usando il programma di test OpenGL standard:

LIBGL_DEBUG=verbose glxgears

Speriamo che fallirà allo stesso modo di SFML. Con LIBGL_DEBUGesso dovrebbe dirti quale libreria OpenGL sta cercando di caricare. Inoltre la lib che proverà a caricare sarà quasi sicuramente /usr/local/lib/libGL.so.1.2.0(Modifica: questa era la libreria OpenGL standard sulla mia macchina al momento in cui ho risposto a questa. Potrebbe benissimo essere un'altra versione sulla tua macchina ora).

Quindi la soluzione (in questo caso) è assicurarsi che si /usr/local/lib/libGL.so.1.2.0tratti di un collegamento simbolico che punta alla libreria OpenGL giusta. Nel mio caso ho il driver Nvidia 3.40 quindi ho eseguito:

ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0

Ma ti consigliamo di indicarlo nella libreria OpenGL adatta a te (elencata nel primo comando find).

In sintesi: l'installazione di driver grafici (proprietari) può interrompere i collegamenti simbolici utilizzati per le librerie OpenGL. Per risolvere questo problema, correggere manualmente i collegamenti simbolici (correggere /usr/local/lib/libGL.so.1.2.0prima).


Questo problema mi ha aiutato a capire il messaggio di errore, ma non a risolverlo. La risposta "reinstalla i driver NVIDIA" è stata di grande aiuto in quanto ha risolto il problema per me.
henko,

@henko sì, reinstallare i driver nvidia è probabilmente il modo più semplice e veloce per risolvere questo problema. Ritorna a questo approccio se per qualsiasi motivo la reinstallazione dei driver non risolve il problema e devi sporcarti le mani.
Demented Hedgehog,

6
Ho capito ogni parte, tranne "quasi certamente essere /usr/local/lib/libGL.so.1.2.0". Il mio mostra "libGL: OpenDriver: provare /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: provare /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" e tutto questi file esistono nel mio sistema ...
Samuel Li,

1
Grazie ancora per la tua spiegazione; Capisco meglio il problema. Voglio anche sottolineare che nel mio caso, c'è un bug confermato in ubuntu swrast.so, e la gente ne ha discusso .
Samuel Li,

1
Grazie @dementedhedgehog Questo è stato un post ottimamente articolato e mi ha aiutato a risolvere il mio problema (su Fedora-25, a proposito). = :). Up-votato.
NYCeyes,

5

Ho avuto lo stesso problema su Ubuntu 16.10 con i nvidia-340driver e nessuna delle soluzioni qui ha funzionato per me.

Si scopre che le librerie a 32 bit non erano sul percorso della libreria.

Questa fodera ha funzionato per me:

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

4

Ho avuto problemi a ottenere il link simbolico corretto per puntare al driver nVidia e ho trovato un altro modo che funziona per me.

È delineato qui .

Ed elenca su come installare il driver nVidia tramite PPA che è disponibile per 349.16, l'ultima versione.

Disinstallare innanzitutto tutti i driver nVidia attualmente installati aprendo una finestra del terminale ( Ctrl+ ALT+ T) e digitando

sudo apt-get remove nvidia*

Riavvia il tuo sistema

Quindi aprire un altro terminale e digitare quanto segue

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

Quindi riavviare di nuovo

L'ho provato dopo essermi perso con i collegamenti simbolici e Steam ha funzionato bene subito dopo l'installazione del driver e di nuovo funzionava ancora dopo che avevo avuto oltre 400 mega aggiornamenti di sistema.


2
Non consiglierei di lasciare xorg-edgers ppa dopo l'installazione del driver. Molti pacchetti instabili arriveranno negli aggiornamenti.
Pilota 6

la sola rimozione di nvidia * ha già risolto questo problema per me!
xtofl

3

Per fornire un'alternativa alla risposta di Adrian: se si preferisce utilizzare driver proprietari provenienti direttamente da NVIDIA anziché quelli trovati in un PPA, l'installazione (o, nel mio caso, la reinstallazione) dell'ultimo driver proprietario può aiutare a eliminare l'errore rapido.

Se non si dispone ancora del driver NVIDIA, scaricare il driver dal sito Web di NVIDIA . Quindi, passa a tty ( ctrl+ alt+ F1) e disattiva il tuo gestore degli accessi:

Se si utilizza lightdm, $ sudo service lightdm stop

Se usi gdm, $ sudo service gdm stop

Passare allo script di installazione ed eseguirlo, quindi seguire le istruzioni. Non preoccuparti se lo script di preinstallazione non riesce. Accetto sempre la registrazione di DKMS e le librerie di compatibilità a 32 bit. Dopo aver installato il driver, riavvia il computer:

$ sudo reboot

Se hai già uno script di installazione da un vecchio driver NVIDIA, esegui semplicemente lo script di installazione del driver NVIDIA come descritto sopra, ma con l'opzione "--update":

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

In questo modo otterrai la versione più aggiornata del driver.

In questo modo ho risolto il mio libGL error: failed to load driver: swrasterrore.


3

Ho lo stesso problema su Ubuntu 18. Questo è accaduto sostanzialmente solo con le app a 32 bit. Quindi la mia idea era di installare qualcosa a 32 bit nvidia, poiché la mia cartella / usr / lib / i386-linux-gnu / era sospettosamente vuota.

Dopo pochissimi tentativi, questo ha risolto il mio problema con il vapore e il vino non si avviavano:

sudo apt install libnvidia-gl-418:i386

(e cambia 418 in qualunque versione tu abbia)

Interessante che le applicazioni non si siano lamentate delle dipendenze mancanti durante l'installazione.


Questo sembra aver risolto uno dei miei problemi legati alla domanda, almeno ...
Andrew,

Essendo a 32 bit potrebbe essere il motivo. Altri programmi funzionano bene, ma quelli probabilmente sono a 64 bit. Tuttavia, questo funziona benissimo (ho dovuto cancellare la versione però)
Zoe

2

Devo ammetterlo, non sono sicuro del perché questo funzioni per me, ma lo ha fatto. In questo caso in particolare "correggere" le voci ld.so.conf.d aggiungendo una nuova voce in questo modo:

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

Questo ha senso, fino a quando non si esegue quanto segue 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

Perché avere le stesse voci in tre copie funziona, ma non in doppio, non ne ho idea!


Funziona per me su Ubunu 17.04. Solo una nota: il percorso è / usr / lib / nvidia-xxx dove xxx è il numero del driver, quindi adattare il comando a quello.
user2082382

2

Ecco una aptsoluzione unica che ha funzionato per me, nessun collegamento simbolico o confusione con ld.so.conf.d:

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

1

Uso solo questa linea:

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

e funziona.

Perché vedo tale input quando eseguo 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
Le persone dovrebbero seguire cosa significa ...?
Andrew,

Funziona per me, grazie!
Hett,

0

Esegui questo:

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

La versione del tuo driver è mostrata nelle impostazioni di nvidia.


0

Nel mio caso la soluzione a questo problema risiedeva nella continuazione del messaggio di errore

Paraview 5.7.0 mi ha informato che:

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

Il messaggio

GLEW could not be initialized: Missing GL version

è stata la chiave. Corro "glxgears" per verificare che le librerie grafiche funzionino bene - vedi anche man glxgears- che mostrano questa animazione:

screenshot di glxgears

Quindi la mia soluzione era semplicemente impostare la variabile d'ambiente

LD_PRELOAD=/usr/lib/libGL.so

Prendi nota:

  1. Anche se ho una scheda grafica Nvidia, non ho dovuto smanettarla;
  2. Lancio locate libGL.so, trovo un altro candidato /usr/lib/i386-linux-gnu/libGL.so. L'impostazione come LD_PRELOAD, tuttavia, non ha risolto il problema;
  3. Non è necessario impostare alcuna informazione sulla libreria GLEW che appare sopra --- vedere locate libGLEW.so

Sono in debito con https://github.com/openai/mujoco-py/issues/44 per indizi


Per la differenza tra LD_PRELOAD e LD_LIBRARY_PATH più comunemente citato vedere stackoverflow.com/q/14715175/5459638
XavierStuvw

-3

Stavo affrontando questo strano problema quando ho scaricato la mia Ubuntu VM dal mio Macbook Pro, ma l'installazione del driver Nvidia di seguito sul mio Ubuntu 16.04 ha risolto il problema. Spero che questo funzioni per te.

sudo apt-get install nvidia-331


1
Perché dovresti installare i driver GPU Nvidia su un sistema guest VM? Ó_ò
David Foerster,

Il downvote non è appropriato. @DavidFoerster ha ragione nel dire che l'installazione di driver GPU in una macchina virtuale non ha alcun senso (a meno che non passi l'hardware GPU alla macchina virtuale). Ma: sto eseguendo X su SSH e sto affrontando lo stesso problema. L'avvio di applicazioni X sul computer remoto (VM) porta quasi sempre ai messaggi di errore citati nella domanda dell'OP. Non ho trovato una soluzione a questo problema ancora, ma se l'installazione dei driver GPU sul VM remota sarebbe la soluzione, mi piacerebbe farlo, indipendentemente dal fatto che ha senso, solo per fare che gli errori vanno via (io sono attualmente ignorandoli).
Binarus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.