GLIBCXX_3.4.20 não encontrado, como corrigir este erro?

104

Quando eu tento executar o programa Layout Editor (disponível neste site ) no Ubuntu 14.04.1 LTS de 64 bits, recebo a seguinte saída no terminal:

$ layout
layout: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by layout)

Eu tentei o comando stringsda /usr/lib/x86_64-linux-gnu/libstdc++.so.6seguinte forma e aqui está a entrada e a saída:

$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

Como posso resolver esse problema? De alguma forma, acho que está relacionado, GCCmas não consigo descobrir como corrigi-lo. Além disso, tentei um PPA conforme sugerido em Como uso o GCC mais recente no Ubuntu? e existe uma pergunta semelhante para uma versão mais antiga do Ubuntu no GLIBCXX_3.4.15 não encontrada . No entanto, após a execução sudo update, recebo vários avisos e a lista que obtive com o comando strings não tinha novas entradas após a instalação gcc 4.9; portanto, limpei o PPA ( Toolchains Test Builds ) com ppa-purge. Qualquer ajuda, sugestões sobre como proceder são muito apreciadas.

Vesnog
fonte
Já encontrou uma solução?
Steven Roose
1
@StevenRoose Consegui resolver o problema, depois de adicionar alguns backports e instalar algum software, mas não me lembro claramente dos detalhes quando me lembro deles, vou publicá-los como resposta.
Vesnog
Parece que isso é um efeito da vinculação de símbolo: stackoverflow.com/questions/2856438/… Você simplesmente não está vinculando a uma versão da biblioteca recente o suficiente.
Ciro Santilli # 14/15

Respostas:

102

Eu estava tendo o mesmo problema ao tentar executar outro programa e encontrei uma solução no StackOverflow .

Basicamente, basta executar os seguintes comandos: Primeiro, instale:

sudo apt-get install libstdc++6

Isso já deve estar instalado por padrão, mas tente assim mesmo. Se isso não resolver, faça o seguinte:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

Não executei o comando "dist-upgrade", mas os anteriores o resolveram para mim

Paulo
fonte
6
sudo apt-get dist-upgrade resolveu meu problema
ady
2
problema resolvido sem a necessidade de dist-upgradecomo upgradeproposta e atualizado meu sistema com a mais recentelibstdc++
arainone
2
adição de repositório, 'update' e 'dist-upgrade' foram todos necessários no meu final.
Virtualxtc
5
após a atualização, você pode verificar a versão mais recente do GLIBCXX comostrings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
Krishan Kumar Mourya
1
Ubuntu 16.04: em novembro de 2017, adicionar o ppa 'não confiável e não suportado' ppa: ubuntu-toolchain-r / test via add- apt-repositoryupdated /usr/lib/x86_64-linux-gnu/libstdc++.so.6até e incluindo GLIBCXX_3.4.24 - e, além disso, isso atualiza basicamente todos os c / c ++ / fortran ferramentas de desenvolvimento em sua máquina
KNB
60

Isso aconteceu comigo com o anaconda 4.0.0 (como o @mjp afirmou), mas a correção para mim foi executar este comando no meu ambiente:

conda install libgcc
neok
fonte
6
Isso resolveu para mim depois de tentar muitas soluções de outros threads.
Shawn Anderson
3
Também funciona no Ubuntu 16.04
fviktor 11/03/17
1
isso realmente salvou minha bunda algumas vezes!
MBZ 14/04
Ubuntu 16.04 - resolveu para mim.
precisa saber é o seguinte
isso é muito melhor .. funcionou para mim .. estava tentando 'ROOT importação' em python
MycrofD
11

Eu tive esse problema - era porque Anaconda2não tinha a versão GLIBCXX_3.4.20 do que quer que seja. Apenas até 0,19, o mesmo que o seu.

No entanto, a biblioteca do Ubuntu tinha . Então, eu apenas criei um link / atalho de software na biblioteca Anaconda para a biblioteca Linux real que contém o GLIBCXX_3.4.20, substituindo o anterior, e funcionou bem depois de reiniciar a GUI do python (Spyder).

Deve haver uma pasta chamada libstdc++.so.6na biblioteca Anaconda, que é aqui: ~/anaconda2/lib. Dentro desta pasta, estão as versões do script / library-code-thing, excluindo a que está faltando: GLIBCXX_3.4.20

Siga estas etapas para resolver o problema:

  1. vá para o local certo e faça backup do seu anaconda2atalho atual (altere seu nome para que não seja sobrescrito):

    cd ~/anaconda2/lib
    mv -vf libstdc++.so.6 libstdc++.so.6.old
    
  2. crie um novo atalho usando o lncomando (estou assumindo que estou no local anterior ~ / anaconda2 / lib):

    ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./libstdc++.so.6
    
  3. reinicie o spyder / outra interface que você usa

Agora deve funcionar!

mjp
fonte
para mim, bastava renomear o conda .so, então ele encontrou a versão do sistema operacional sem precisar de um link
Mingwei Samuel
7

Resolvi um problema como este (mas GLIBCXX_3.4.21) no CentOS, mas ele não depende do sistema operacional. A biblioteca faz parte do compilador gcc, portanto, é necessário instalar ou compilar a versão apropriada do gcc. Esta é a tabela de versões do gcc e versões do libstdc ++ apropriado:

GCC 4.9.0: libstdc++.so.6.0.20
GCC 5.1.0: libstdc++.so.6.0.21
GCC 6.1.0: libstdc++.so.6.0.22
GCC 7.1.0: libstdc++.so.6.0.23
GCC 7.2.0: libstdc++.so.6.0.24
GCC 8.0.0: libstdc++.so.6.0.25

(a lista completa de versões está aqui )

Não depende de como instalar o gcc - ele pode ser instalado a partir do pacote ou compilado e instalado a partir de fontes.

É possível que as bibliotecas do sistema gcc estejam disponíveis em vez de instaladas recentemente. Portanto, é necessário especificar a variável de ambiente onde encontrar bibliotecas, por exemplo, na linha de comando como esta:

$ LD_LIBRARY_PATH=/usr/local/lib64 command args ...
oklas
fonte
Eu reparei isso permanentemente atualizando o link /usr/lib64/libstdc++.so.6para apontar para a versão mais recente que eu tinha na /usr/local/lib64/libstdc++.so.6com este comando: ln -fs /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6. A versão antiga permanece sem link apontando para ela, se você precisar reverter. Um pouco de hack, mas funciona.
Mateus
2

Eu tive isso várias vezes ao longo dos anos com muitos pacotes diferentes. Sempre foi resolvido por:

sudo apt-get dist-upgrade

Se o seu dist for atualizável, quase sempre derrubará uma nova biblioteca C ++ e reconfigurará coisas como se elas funcionassem novamente. O problema quase sempre é causado pelo seu sistema não apontar para a biblioteca certa. No meu caso, geralmente causado por apontar para uma versão de compilador cruzado de uma biblioteca.

Bryan Wilcutt
fonte
2

before_install:

# Esta solução alternativa é necessária para evitar erros do libstdc ++ durante a execução do hugo "estendido" com suporte ao SASS.

  • wget -q -O libstdc++6 http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb
  • sudo dpkg --force-all -i libstdc++6

instalar:

  • wget -q -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.46/hugo_extended_0.46_Linux_64bit.deb
  • sudo dpkg -i hugo.deb

Encontrei esta solução aqui

Jackson Junior Mkhabela
fonte
1
sudo cp /usr/bin/YourGccVersionLibrary/lib64/libstdc++.so.6 /usr/bin/YourGccVersionLibrary/lib64/libstdc++.so.6.0.20 /usr/lib/x86_64_linux-gnu/
Mati
fonte
5
Bem-vindo ao Ask Ubuntu! Eu recomendo editar esta resposta para expandi-la com detalhes específicos sobre o que esse comando deve alcançar. (Veja também Como faço para escrever uma boa resposta? Para o conselho geral sobre que tipos de respostas são consideradas mais valiosas no Pergunte Ubuntu.)
David Foerster
6
Por que cpe não ln -s?
AB