apt: erro de realocação: versão GLIBCXX_3.4.21 não definida no arquivo libstdc ++. so.6 com referência de tempo do link

63

Desde que tentei atualizar para o 16.04 xenial, estou recebendo

$ apt
apt: relocation error: /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0: 
symbol _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_, 
version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

quando simplesmente correndo apt. Escusado será dizer que isso torna difícil fazer qualquer coisa.

Alguma dica?

Nico Schlömer
fonte
uau ... isso me faz realmente desconfiar do processo de atualização do Ubuntu / Canonical. Toda vez que tenho uma versão funcional, mas obsoleta, alguém em um fórum de ajuda me diz que as atualizações resolverão todos os meus problemas ... não sei o que é um "disco temporário" e certamente não quero interromper o trabalho com GRUBdepuração …
isomorfismos

Respostas:

55

Eu tive o mesmo problema causado por problemas do PPA for Ubuntu toolchain. Meu computador não inicializou por causa disso. Após o comentário de @ w00kie em sua resposta, baixei (do terminal tty) o debian do pacote libstdc++6para o Xeniallink https://packages.ubuntu.com/xenial/libstdc++6 e instalei usando dpkg -i. O computador funciona muito bem agora.

Passos

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

# I also found this helpful
sudo apt-get -f install
Sagar Jha
fonte
5
Você pode colocar os comandos passo a passo na sua resposta? Eu não estou familiarizado com tudo isto e minha máquina linux é horked ...
Zachary Campos
@Zachary Qual é o problema exato que você está enfrentando? Você é capaz de inicializar?
Sagar Jha
11
Na verdade não. Se eu deixar a tela piscar por cerca de 15 minutos, recebo um prompt do terminal tty2 em uma cor cinza claro. Não consigo usar apt(ou qualquer ferramenta realmente). Eu até tentei baixar libstdc++6...debde uma unidade USB inicializável, colocar manualmente o pacote, reiniciar no sistema quebrado e instalar o .debuso sudo dpkg -i libstdc++6...deb, mas ele nem sabe o que dpkgé.
Zachary Campos
13
Para baixar / instalar o arquivo .deb, você pode: wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.debe depois que o download for feito, dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.deb(assume o sistema de 64 bits). Para mim, minha conexão com a internet não estava funcionando, então baixei-a em uma unidade USB de um computador diferente e tive que montar manualmente a unidade USB no meu computador problemático ( sudo mount /dev/sdc1 /media/usbonde sdc1foi encontrada assistindo a saída do terminal logo após conectar o USB) e, em seguida, execute o dpkgcomando acima .
24516 Garrett
7
Eu tive que usar dpkg --force-all -i libstdc+‌​+6_5.4.0-6ubuntu1~16‌​.04.2_amd64.debpara obtê-lo instalado
virtualxtc
26

Os culpados são os remanescentes do PPA para Ubuntu Toolchain Uploads (restrito) , especificamente

/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22

Existem duas possibilidades de lidar com isso:

  • Você já ppa-purgeinstalou. Então

    sudo ppa-purge ppa:ubuntu-toolchain-r/test
    

    corrige os problemas.

  • Substitua o libstc ++ baixando o libstdc ++ 6 para Xenial e instalando-o via dpkg -i.

Nico Schlömer
fonte
4
Pelo menos para mim, esta falha com mensagem idêntica à que na questão ...
mbdevpl
11
Provavelmente deve ser expandida com respostas a partir de baixo, porque, obviamente, ppa-purgenão vai funcionar (mesmo python)
user64204
11
Eu recebo:sudo: ppa-purge: command not found
Garrett
@Garrettsudo apt install ppa-purge
Nico Schlömer
3
@ NicoSchlömer, obrigado, mas, na verdade, acredito que o meu apttambém não estava funcionando (conforme o post original).
Garrett
8

Meu comp falhou ao inicializar corretamente devido a este erro. O Apt-get não estava funcionando, nem o Gnome. Isso foi imediatamente após uma atualização de 14.04 para 16.04. Eu o resolvi em tty digitando

sudo apt-add-repository --remove ppa:ubuntu-toolchain-r/test

Nesse ponto, apt-getcomecei a trabalhar novamente e pude corrigir todos os problemas a partir daí:

sudo apt-get clean
sudo apt-get update
sudo apt-get install -f
sudo dpkg -a --configure
sudo apt-get dist-upgrade

Eu também tive que desinstalar o Virtualbox (após o comando update) e reinstalá-lo mais tarde, mas acho que isso não tem relação.

Matjaz
fonte
2
Eu tentei isso, mas recebi um erro de importação no pacote apt_pkg
Mixone
Mixone, qual foi o erro exato e em qual comando exatamente?
21316 Matjaz
sudo apt-get update o erro veio do backend python eu acho, o stacktrace foi python e que basicamente disse que não consegue encontrar módulo apt_pkg
Mixone
5
O mesmo problema para mim também, ao tentar usar o apt-add-repositorycomando na sua resposta, dá:ImportError: /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0: symbol _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_, version GLIBCXX_3.4.21 not defined in the file libstdc++.so.6 with link time reference
Garrett
Para idiotas como eu tentando atualizar 2 anos após o lançamento e pensando que todos os bugs foram corrigidos. O link no comentário acima está quebrado. Aqui está o novo. http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb(ou i386ambos) E não se importe com o dpkg amaldiçoando você. Faça --auto--deconfiguree você apt-getvoltará aos trilhos depois, apesar das mensagens de erro. E você poderá terminar com o -f --install+ apropriado --upgradee reiniciar em um sistema novo.
Ufos
4

Eu estava pensando que o problema era algo único para mim e foi causado por um erro de download.

Essa discussão me deu a pista que eu precisava. Basicamente, tudo o que era necessário era substituir o libstdc ++. So.6.0.22 pelo libstdc ++. So.6.0.21 em / usr / lib / x86_64-linux-gnu do sistema com falha. (Parece que há um erro na versão mais recente.)

Isso pode ser feito a partir de um pen drive ou, como no meu caso, a partir de um disco de trabalho.

Detalhes completos em: https://answers.launchpad.net/ubuntu/+question/395832

Obrigado a todos ...

SteelTrap
fonte
Usei esse truque, mas fiz uma inicialização dupla em algum espaço livre. Consegui montar facilmente a partição original. Foi bem fácil.
Andrew
Impressionante - esses 3 comandos funcionaram para mim: cd / usr / lib / x86_64-linux-gnu / >>> sudo rm libstdc ++. So.6 >>> sudo ln -s libstdc ++. So.6.0.21 libstdc ++. So.6
Osman
3

Seguindo a dpkg -iabordagem na resposta aceita, minha atualização 14.04-> 16.04 exigia não um, mas dois pacotes:

gcc-5-base_5.4.0-6ubuntu1~16.04.4_i386.deb
libstdc++6_5.4.0-6ubuntu1~16.04.4_i386.deb

Depois disso, apt upgradefoi possível baixar os pacotes restantes e concluir a instalação.

user1905416
fonte
2

Se você possui a versão mais recente do snap 'conjurar' instalada com o Snappy no Yakkety, seu apt será quebrado com um erro muito semelhante:

apt: relocation error: /usr/lib/x86_64-linux-gnu/libapt-private.so.0.0: symbol _ZN13pkgSourceList16AddVolatileFilesER11CommandLinePSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE, version APTPKG_5.0 not defined in file libapt-pkg.so.5.0 with link time reference

devido a este erro:

https://bugs.launchpad.net/snappy/+bug/1a677417

Atualmente, a única solução alternativa que eu conheço é a remoção do snap de conjuração (ou, possivelmente, 'revertê-lo' para uma versão anterior, se você tiver um instalado anteriormente).

Hera
fonte
1

A correção que funcionou para mim foi realmente adicionar o ppa do Ubuntu toolchain de volta:

sudo apt-add-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -f
sudo apt-get upgrade
Christopher Roberts
fonte
0

Você poderá corrigi-lo digitando:

Instalação do sudo apt-get -f

sem especificar nenhum pacote. Deveria fazer o trabalho.

biljkus
fonte
0

Pode haver um problema muito semelhante com os sistemas i386.

Para resolver o problema, também tive que fazer o downgrade do gcc-5-base da versão 5.4.1-2ubuntu1~12.04para 5.4.0-6ubuntu1~16.04.4.

Para concluir a atualização para um sistema aparentemente razoável, eu também precisei usar o dpkg --purge on vituoso_nepomukvirtualbox para livrar-se de seus arquivos de configuração, que estavam causando problemas (para mim, o VirtualBox é fornecido pelo pacote virtualbox-5.1, que parece ileso pela atualização. )

A chave era começar dpkg --configure dbusa trabalhar.

Para habilitar o wget em uma tela do tipo tty, os usuários também podem precisar executar sudo dhclient eth0para habilitar uma conexão Ethernet com fio.

Richard Wordingham
fonte
0

Acabei de ter esse problema ao atualizar a distribuição do ubuntu no linux, vi o seguinte:

# ls /usr/lib/x86_64-linux-gnu/libstdc++.so.6*
libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21
libstdc++.so.6cd -> libstdc++.so.6.0.20*

libstdc ++. so.6 -> libstdc ++. so.6cd -> libstdc ++. so.6.0.20

Mas havia dois arquivos: libstdc ++. So.6.0.21 e libstdc ++. So.6.0.20

Alterei o link simbólico para apontar para a versão mais recente libstdc ++.

cd /usr/lib/x86_64-linux-gnu
rm libstdc++.so.6cd
chmod +x libstdc++.so.6.0.21
ln -s  libstdc++.so.6.0.21 libstdc++.so.6cd

Resultante:

libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21*
libstdc++.so.6cd -> libstdc++.so.6.0.21*

e tudo voltou ao normal

Fábio Ricci
fonte
0
  1. Faça o download do libstdc ++ 6 para o seu ubuntu no site do gerenciador de pacotes Ubuntu. (use uname -apara encontrar a arquitetura h / w e s / w).

  2. Corre

    sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. Reinicie. O Ubuntu deve inicializar, mas o apt não instala novos pacotes.

  4. Para corrigir dependências e atualizar o sistema, execute estes comandos

    sudo apt-add-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get install -f
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
    sudo apt-get autoclean && sudo apt-get autoremove  
    
Vormos Zuke
fonte