Erro ao carregar o libGL.so.1

48

Ao tentar executar várias partes do software (principalmente Steam e Yenka), deparei-me com um erro semelhante a este: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory

Estou executando um sistema de 64 bits, com uma placa NVidia Optimus (eu inicializo duas vezes para determinados aplicativos somente para Windows que exigem uma placa gráfica dedicada). Tenho o zangão instalado e estou usando o driver nvidia-current, em vez daquele baixado da NVidia, conforme recomendado.

A biblioteca (libGL.so.1) não está presente no diretório superior de /usr/lib, no entanto, está presente em /usr/lib32/nvidia-current, como um link para /usr/lib32/nvidia-current/libGL.so.304.64.

Uma seção da saída de ldconfig -p:

libGL.so.1 (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/libGL.so
libGL.so (libc6,x86-64, OS ABI: Linux 2.4.20) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so

Obviamente, uma biblioteca com esse nome está sendo carregada, mas está localizada /usr/lib/x86_64-linux-gnu, no entanto, o software instalado não parece capaz de 'vê-la'. Para o Steam, executá-lo com optirun faz com que funcione, mas esse não é o caso para Yenka. Suponho que optirun faça com que a biblioteca armazenada /usr/lib32/nvidia-currentseja usada, o que permite que o Steam seja executado, então não consigo entender por que o Yenka não será executado.

Alguém pode explicar por que o software não pode ver a biblioteca mesa normal e por que Yenka se recusa a executar com a biblioteca nvidia-current?

p0llard
fonte

Respostas:

40

Com os drivers da nvidia instalados, o skype procura uma lib i386 fornecida pelo pacote nvidia. Como isso não existe, não há problema em usar o i386 libGL.so.1 fornecido pelo mesa.

Testados em (ubuntu-gnome raring, usando a nvidia-325) e (ubuntu-gnome saucy, usando a nvidia-319), conseguimos corrigir isso da seguinte maneira:

update-alternatives --display i386-linux-gnu_gl_conf

Isso mostrará quais são as opções disponíveis.

i386-linux-gnu_gl_conf - auto mode
  link currently points to /usr/lib/nvidia-325/alt_ld.so.conf
/usr/lib/i386-linux-gnu/mesa/ld.so.conf - priority 500
  slave i386-linux-gnu_xorg_extra_modules: /usr/lib/i386-linux-gnu/xorg/x11-extra-modules
/usr/lib/nvidia-325/alt_ld.so.conf - priority 8602
Current 'best' version is '/usr/lib/nvidia-325/alt_ld.so.conf'

então, faça o seguinte:

sudo update-alternatives --config i386-linux-gnu_gl_conf

selecione a melhor alternativa (eu selecionei i386-linux-gnu / mesa / ld.so.conf): Na saída abaixo, existem duas opções para a alternativa i386-linux-gnu_gl_conf (fornecendo /etc/ld.so.conf. d / i386-linux-gnu_GL.conf).

  Selection    Path                                     Priority   Status
------------------------------------------------------------
* 0            /usr/lib/nvidia-325/alt_ld.so.conf        8602      auto mode
  1            /usr/lib/i386-linux-gnu/mesa/ld.so.conf   500       manual mode
  2            /usr/lib/nvidia-325/alt_ld.so.conf        8602      manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/i386-linux-gnu/mesa/ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in manual mode

Depois de concluir isso, tente executar:

sudo ldconfig

e então você está pronto.

Euritmia
fonte
2
Eu tinha exatamente o mesmo e isso funcionou perfeitamente, muito obrigado (Ubuntu 13.10)
Xtremesupremacy3
irritante - eu só tenho a opção ld.so.conf, então obtenha "Existe apenas uma alternativa no grupo de links i386-linux-gnu_gl_conf (fornecendo /etc/ld.so.conf.d/i386-linux-gnu_GL.conf) : /usr/lib/i386-linux-gnu/mesa/ld.so.conf. Nada para configurar. "
Dez93_2000 15/10
quais pacotes da nvidia você instalou? Você possui a libgl1-mesa-glx instalada? Sobre a confiável libgl1-mesa-glx: o i386 fornece o /usr/lib/i386-linux-gnu/mesa/ld.so.conf (e as bibliotecas associadas libGL.so.1 *.
eurythmia
Ótima resposta. Eu estava recebendo erros ao executar um programa Qt depois de mudar para o driver da Nvidia - QOpenGLShaderProgram::uniformLocation( matrix ): shader program is not linkede [xcb] This is most likely caused by a broken X extension library- e depois disso, ele foi esclarecido.
Matthew Leia
Obrigado. Também funciona em 14.04. Isso não afetará nenhum outro programa. Vai? Como consertar uma coisa quebra outras 10.
Sudhir Khanger
51

Estou tendo o mesmo problema após a instalação do skype ... para que você possa corrigir o erro ..

O primeiro é executar o aplicativo seguindo o comando ... por exemplo, estou executando o skype.

LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1 skype

FONTE

2º que o que eu fiz

sudo nano /etc/ld.so.conf.d/skype.conf

e adicione a seguinte linha

/usr/lib/i386-linux-gnu/mesa/

saída segura

e finalmente corra

sudo ldconfig -v

Espero que isso corrija o erro do seu libGL.so.1 como o meu

Você também pode encontrar libGL.so.1

   find / -name libGL.so.1
Qasim
fonte
Eu consegui consertar isso no final. Infelizmente, não me lembro como, mas lembro que consistia em criar links simbólicos aleatórios para a biblioteca, executando muito o ldconfig e removendo os links simbólicos mencionados acima. Tudo funciona bem agora.
precisa saber é o seguinte
Isso funcionou bem! Finalmente! Além disso, lembro-me de fazer o que @ jdp407 disse antes dessas etapas.
Gundars Mēness
1
Embora essa solução seja boa, ela só lida com aplicativos um de cada vez. Se você tiver outros aplicativos de 32 bits que exijam um libGL.so, será necessário repetir o processo para esses aplicativos. É melhor definir essa preferência globalmente usando update-alternatives
Eurythmia
@eurythmia Você também pode copiá-lo em / lib e ldconfig prazo sudo e será o acesso global
Qasim
infelizmente não funciona para mim no xubuntu, "ERRO: ld.so: object '/usr/lib/i386-linux-gnu/mesa/libGL.so.1' do LD_PRELOAD não pode ser pré-carregado (não é possível abrir o arquivo de objeto compartilhado) : ignorado "; O skype.conf está no arquivo etc / dbus-1 / system.d not /ld.so.conf.d/ e parece ser um arquivo diferente ...
dez93_2000 15/14
12

As correções aqui funcionarão, mas há uma mais simples.

Se skypenão funcionar, mas optirun skypefunciona, é possível corrigi-lo com:

sudo apt-get install bumblebee-nvidia --reinstall

(As pessoas que usam o Bumblebee com placas AMD podem precisar fazer a reinstalação equivalente).

O Bumblebee causa e corrige esse problema, mas a correção aplicada ocorre na instalação, quando disponibiliza as bibliotecas libGL para a placa integrada e para a placa mais poderosa. Isso não acontecerá se essas bibliotecas ainda não estiverem instaladas quando você instalou o Bumblebee, necessitando, portanto, de uma reinstalação. Também não deve afetar sua configuração de zangão, embora obviamente valha a pena conferir depois de fazer isso.

Jon Hanna
fonte
3
funciona bem para mim ... obrigado. Ubuntu gnome 14.04
aditia
1
Definitivamente a solução mais fácil! Eu sabia que tinha algo a ver com a ordem de instalação, pois reinstalei meu sistema duas vezes recentemente (placa de vídeo Ubuntu 14.04 64bit + Nvidia Optimus). A primeira vez que instalei o Skype e depois o Bumblebee, nesse caso, não tive problemas. Na segunda vez que instalei o Bumblebee e depois o Skype, esse problema surgiu. Simplesmente reinstalar o bumblebee-nvidia, como mostrado nesta resposta, resolveu o problema!
Sicco
Estou inclinado a concordar que esta parece ser uma solução melhor que a minha.
Eurythmia
2

Edite a entrada da área de trabalho:

sudo nano /usr/share/applications/skype.desktop

Mude o Exec para:

Exec=env PULSE_LATENCY_MSEC=60 LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1 skype %U

Isso é executado:

LD_PRELOAD=/usr/lib/i386-linux-gnu/mesa/libGL.so.1

antes de executar o skype quando você o inicia com a entrada do iniciador / desktop.

Depois disso, deve funcionar bem, desde que você o inicie usando o iniciador de aplicativos.

hazmat
fonte
O arquivo libGL.so.1pode não estar nesse caminho (não era para mim, no Debian 8 / Jessie). Para encontrar o caminho que você deve colocar em LD_PRELOADsimplesmente encontrar o arquivo i386 no seu sistema: sudo find / -name libGL.so.1 2>/dev/null. Eu encontrei /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1e funcionou bem usando isso como LD_PRELOAD.
f.ardelian
1

Não tenho certeza se isso ajudará a esclarecer ou não, mas eu tive o mesmo problema com o skype e libGL.so.1. Também está executando o 13.04 com uma placa optimus e um zangão.

Eu peguei o problema executando o skype sem optirun, mas funcionou bem. Acabei de alterar o arquivo da área de trabalho para rodar com optirun toda vez e pronto. fixo!


fonte
Não é realmente fixo, já que agora você está usando o cartão mais ganancioso no skype. De fato, se você estiver usando a ponte VirtualGL em vez do primus, basicamente consumirá tanta energia como se não tivesse o zangão instalado e apenas usasse a placa nvidia o tempo todo.
Jon Hanna
1

Eu tive um problema semelhante e o resolvi instalando bibliotecas de 32 bits no meu sistema de 64 bits: apt-get install ia32-libs

Matt
fonte
0

Faça o download da versão mais recente da página oficial do steam, depois deixe baixar o que precisa do terminal (se houver). do que adicionar o zangão ppa se você ainda não o fez.

sudo add-apt-repository ppa:bumblebee/stable

atualize-o com este comando:

sudo apt-get update

e instalar virtualgl(que resolveu o libgl.so.1erro para mim no Steam)

sudo apt-get install virtualgl
Addae Dans
fonte
0

Experimentar:

sudo apt-get install libgl1-mesa-glx-lts-utopic:i386
Asno
fonte