GLIBCXX_3.4.20 non trovato, come correggere questo errore?


104

Siero di provare a eseguire il programma Layout Editor (disponibile su questo sito ) su Ubuntu 14.04.1 64-bit LTS ottengo il seguente output nel terminale:

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

Ho provato il comando stringssu /usr/lib/x86_64-linux-gnu/libstdc++.so.6come seguendo e qui è l'ingresso e l'uscita:

$ 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

Come posso risolvere questo problema, in qualche modo immagino che sia correlato GCCma non riesco a capire come risolvere il problema. Inoltre, ho provato un PPA come suggerito su Come utilizzare l'ultimo GCC su Ubuntu? e c'è una domanda simile per una versione precedente di Ubuntu su GLIBCXX_3.4.15 non trovata . Tuttavia, dopo l'esecuzione sudo updateho ricevuto numerosi avvisi e l'elenco che ho ottenuto con il comando stringhe non aveva nuove voci dopo l'installazione gcc 4.9, quindi ho eliminato PPA ( Toolchains Test Builds ) con ppa-purge. Qualsiasi aiuto, suggerimenti su come procedere sono molto apprezzati.


Hai già trovato una soluzione?
Steven Roose,

1
@StevenRoose Sono stato in grado di risolvere il problema, dopo aver aggiunto alcuni backport e installato alcuni software ma non ricordo chiaramente i dettagli quando li ricordo li posterò come risposta.
Vesnog,

Sembra che questo sia un effetto del collegamento dei simboli: stackoverflow.com/questions/2856438/… Semplicemente non stai collegando a una versione della libreria abbastanza recente.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Risposte:


102

Stavo riscontrando lo stesso problema durante il tentativo di eseguire un altro programma e ho trovato una soluzione su StackOverflow .

Fondamentalmente, basta eseguire i seguenti comandi: Innanzitutto, installare:

sudo apt-get install libstdc++6

Questo dovrebbe già essere installato di default, ma provalo comunque. Se non lo risolve, procedi come segue:

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

Non ho eseguito il comando "dist-upgrade", ma quelli prima lo hanno risolto per me


6
sudo apt-get dist-upgrade ha risolto il mio problema
ady,

2
problema risolto senza la necessità di dist-upgradecome upgradeproposto e aggiornato il mio sistema con l'ultimolibstdc++
arainone

2
aggiunta del repository, "aggiornamento" e un "dist-upgrade" erano tutti necessari per me.
virtualxtc

5
dopo l'aggiornamento puoi controllare l'ultima versione di GLIBCXX comestrings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
Krishan Kumar Mourya il

1
Ubuntu 16.04: a novembre 2017, aggiungendo il ppa 'non attendibile e non supportato' : ubuntu-toolchain-r / test via add- apt-repositoryaggiornato /usr/lib/x86_64-linux-gnu/libstdc++.so.6fino al GLIBCXX_3.4.24 compreso e - e inoltre, questo aggiornamento di base TUTTI c / c ++ / fortran strumenti di sviluppo sulla tua macchina
prendi il

60

Mi è successo con anaconda 4.0.0 (come affermato da @mjp), ma la soluzione per me era eseguire questo comando nel mio ambiente:

conda install libgcc

6
Questo mi ha risolto dopo aver provato molte soluzioni da altri thread.
Shawn Anderson,

3
Funziona anche su Ubuntu 16.04
fviktor

1
questo mi ha davvero salvato il culo un paio di volte!
MBZ

Ubuntu 16.04 - risolto per me.
Zhubarb,

questo è molto meglio .. ha funzionato per me .. stava cercando di 'importare ROOT' in Python
MycrofD

11

Ho avuto questo problema - era perché Anaconda2non avevo la versione GLIBCXX_3.4.20 di qualunque cosa fosse. Solo fino a .19, uguale al tuo.

Tuttavia, la libreria di Ubuntu ce l'aveva . Quindi ho appena creato un collegamento / collegamento nella libreria Anaconda alla libreria Linux reale contenente quel GLIBCXX_3.4.20, sostituendo quello precedente, e ha funzionato benissimo dopo aver riavviato la GUI di Python (Spyder).

Ci dovrebbe essere una cartella chiamata libstdc++.so.6nella libreria Anaconda, che è qui: ~/anaconda2/lib. All'interno di questa cartella si trovano le versioni dello script / libreria-codice-cosa, esclusa quella che ti manca: GLIBCXX_3.4.20

Seguire questi passaggi per risolvere il problema:

  1. vai nella posizione corretta e esegui il backup del anaconda2collegamento corrente (modifica il nome in modo che non venga sovrascritto):

    cd ~/anaconda2/lib
    mv -vf libstdc++.so.6 libstdc++.so.6.old
    
  2. creare un nuovo collegamento usando il lncomando (suppongo di trovarmi nella posizione precedente ~ / anaconda2 / lib):

    ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./libstdc++.so.6
    
  3. riavvia spyder / altra interfaccia che usi

Ora dovrebbe funzionare!


per me è stato sufficiente rinominare il conda .so, quindi ha trovato la versione os senza bisogno di un link
Mingwei Samuel

7

Ho risolto un problema del genere (ma GLIBCXX_3.4.21) su CentOS ma non dipende da OS. La libreria fa parte del compilatore gcc, quindi è necessario installare o compilare la versione appropriata di gcc. Questa è la tabella delle versioni di gcc e delle versioni di libstdc ++ appropriate:

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

(l'elenco completo delle versioni è qui )

Non dipende da come installare gcc - può essere installato dal pacchetto o compilato e installato da fonti.

È possibile che siano disponibili le librerie di sistema gcc anziché quelle appena installate. Quindi è necessario specificare la variabile di ambiente in cui trovare le librerie, ad esempio nella riga di comando in questo modo:

$ LD_LIBRARY_PATH=/usr/local/lib64 command args ...

Ho fissato questo modo permanente aggiornando il link /usr/lib64/libstdc++.so.6per puntare alla versione più recente che ho avuto in /usr/local/lib64/libstdc++.so.6con questo comando: ln -fs /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6. La vecchia versione rimane senza link che la puntano se è necessario ripristinare. Un po 'di hack ma funziona.
Matteo,

2

Ho avuto numerose volte nel corso degli anni con molti pacchetti diversi. È sempre stato risolto da:

sudo apt-get dist-upgrade

Se la tua dist è aggiornabile, quasi sempre farà cadere una nuova libreria C ++ e riconfigurerà cose come quelle che funzionano di nuovo. Il problema è quasi sempre causato dal sistema che non punta alla libreria corretta. Nel mio caso, di solito causato dal puntamento a una versione cross-compilatore di una libreria.


2

before_install:

# Questa soluzione alternativa è necessaria per evitare errori libstdc ++ durante l'esecuzione di hugo "esteso" con supporto 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

installare:

  • 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

Ho trovato questa soluzione qui


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/

5
Benvenuto in Ask Ubuntu! Raccomando di modificare questa risposta per espanderla con dettagli specifici su ciò che questo comando dovrebbe raggiungere. (Vedi anche Come posso scrivere una buona risposta? Per consigli generali su quali tipi di risposte sono considerate più preziose su Ask Ubuntu.)
David Foerster,

6
Perché cpe no ln -s?
AB
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.