GLIBCXX_3.4.20 nie znaleziono, jak naprawić ten błąd?

104

Serwatka Próbuję uruchomić program Layout Editor (dostępny na tej stronie ) na Ubuntu 14.04.1 64-bit LTS. W terminalu otrzymuję następujące dane wyjściowe:

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

Wypróbowałem polecenie stringsw /usr/lib/x86_64-linux-gnu/libstdc++.so.6następujący sposób, a oto dane wejściowe i wyjściowe:

$ 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

Jak mogę rozwiązać ten problem? Jakoś domyślam się, że jest to związane, GCCale nie mogę znaleźć sposobu na rozwiązanie problemu. Ponadto wypróbowałem PPA zgodnie z sugestią na temat Jak korzystać z najnowszego GCC na Ubuntu? i podobne pytanie dotyczy starszej wersji Ubuntu pod adresem GLIBCXX_3.4.15 . Jednak po uruchomieniu sudo updatedostaję wiele ostrzeżeń, a lista uzyskana za pomocą polecenia strings nie ma nowych wpisów po instalacji gcc 4.9, więc wyczyściłem PPA ( Toolchains Test Builds ) ppa-purge. Każda pomoc, sugestie dotyczące dalszego postępowania są bardzo mile widziane.

Vesnog
źródło
Znalazłeś już rozwiązanie?
Steven Roose
1
@StevenRoose Byłem w stanie rozwiązać problem, po dodaniu niektórych backportów i zainstalowaniu oprogramowania, ale nie pamiętam szczegółów, kiedy je pamiętam, opublikuję je jako odpowiedź.
Vesnog
Wygląda na to, że jest to efekt łączenia symboli: stackoverflow.com/questions/2856438/... Po prostu nie łączysz się z wersją biblioteki wystarczająco niedawno.
Ciro Santilli 14 改造 中心 法轮功 六四 事件

Odpowiedzi:

102

Miałem ten sam problem podczas próby uruchomienia innego programu i znalazłem rozwiązanie na StackOverflow .

Zasadniczo wykonaj następujące polecenia: Po pierwsze zainstaluj:

sudo apt-get install libstdc++6

To powinno być już domyślnie zainstalowane, ale i tak spróbuj. Jeśli to nie rozwiąże, wykonaj następujące czynności:

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

Nie wykonałem polecenia „dist-upgrade”, ale te wcześniej rozwiązałem dla mnie

Paulo
źródło
6
sudo apt-get dist-upgrade rozwiązało mój problem
ady
2
problem rozwiązany bez potrzeby dist-upgradezgodnie z upgradepropozycją i zaktualizowany mój system z najnowszymlibstdc++
arainone
2
dodanie repozytorium, „aktualizacja” i „aktualizacja” były potrzebne po mojej stronie.
virtualxtc
5
po aktualizacji możesz sprawdzić najnowszą wersję GLIBCXX asstrings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
Krishan Kumar Mourya
1
Ubuntu 16.04: W listopadzie 2017 r. Dodano „niezaufany i nieobsługiwany” ppa: ubuntu-toolchain-r / test przez add- apt-repositoryupdated /usr/lib/x86_64-linux-gnu/libstdc++.so.6do GLIBCXX_3.4.24 włącznie - a poza tym aktualizacje te są w zasadzie WSZYSTKIE c / c ++ / fortran narzędzia programistyczne na twoim komputerze
knb
60

Zdarzyło mi się to z anacondą 4.0.0 (jak stwierdził @mjp), ale poprawką było dla mnie uruchomienie tego polecenia w moim środowisku:

conda install libgcc
neok
źródło
6
To rozwiązało dla mnie po wypróbowaniu wielu rozwiązań z innych wątków.
Shawn Anderson
3
Działa również na Ubuntu 16.04
fviktor
1
to naprawdę uratowało mi tyłek kilka razy!
MBZ
Ubuntu 16.04 - rozwiązałem to dla mnie.
Zhubarb 16.04.17
to jest o wiele lepsze .. działało dla mnie .. próbowałem „zaimportować ROOT” w pythonie
MycrofD
11

Miałem ten problem - to dlatego, Anaconda2że nie miałem wersji GLIBCXX_3.4.20 jakiejkolwiek rzeczy. Tylko do 0,19, tyle samo co twoje.

Jednak biblioteka Ubuntu miała to . Właśnie utworzyłem softlink / skrót w bibliotece Anaconda do faktycznej biblioteki Linuksa zawierającej ten GLIBCXX_3.4.20, zastępując poprzednią, i działał dobrze po ponownym uruchomieniu graficznego interfejsu użytkownika python (Spyder).

Nie powinno być folder o nazwie libstdc++.so.6w bibliotece Anaconda, która jest tutaj: ~/anaconda2/lib. W tym folderze znajdują się wersje skryptu / biblioteki-kodu-rzeczy, z wyjątkiem tej, której brakuje: GLIBCXX_3.4.20

Wykonaj następujące kroki, aby rozwiązać problem:

  1. przejdź do właściwej lokalizacji i wykonaj kopię zapasową bieżącego anaconda2skrótu (zmień jego nazwę, aby nie została zastąpiona):

    cd ~/anaconda2/lib
    mv -vf libstdc++.so.6 libstdc++.so.6.old
    
  2. utwórz nowy skrót za pomocą lnkomendy (zakładam, że jestem w poprzedniej lokalizacji ~ / anaconda2 / lib):

    ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./libstdc++.so.6
    
  3. zrestartuj spyder / inny używany interfejs

Powinno teraz działać!

mjp
źródło
dla mnie wystarczyło po prostu zmienić nazwę conda .so, więc znalazłem wersję OS bez potrzeby linkowania
Mingwei Samuel
7

Rozwiązałem taki problem (ale GLIBCXX_3.4.21) na CentOS, ale nie jest on zależny od systemu operacyjnego. Biblioteka jest częścią kompilatora gcc, dlatego należy zainstalować lub skompilować odpowiednią wersję gcc. To jest tabela wersji gcc i wersji odpowiedniego libstdc ++:

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

(pełna lista wersji jest tutaj )

Nie zależy to od sposobu instalacji gcc - może być zainstalowany z pakietu lub skompilowany i zainstalowany ze źródeł.

Możliwe, że systemowe biblioteki gcc są dostępne zamiast nowo zainstalowanych. Więc musisz określić zmienną środowiskową, gdzie znaleźć biblioteki, na przykład w wierszu poleceń:

$ LD_LIBRARY_PATH=/usr/local/lib64 command args ...
oklas
źródło
Naprawiłem to stale aktualizując łącza /usr/lib64/libstdc++.so.6punkt do nowszej wersji miałem w /usr/local/lib64/libstdc++.so.6tym poleceniem: ln -fs /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6. Stara wersja pozostaje bez linku do niej, jeśli chcesz przywrócić. Trochę hack, ale działa.
Matthew
2

Przez lata miałem to wiele razy z wieloma różnymi pakietami. Zawsze był rozwiązany przez:

sudo apt-get dist-upgrade

Jeśli twój dist jest aktualizowalny, prawie zawsze obniży nową bibliotekę C ++ i ponownie skonfiguruje takie rzeczy, aby działały ponownie. Problem jest prawie zawsze spowodowany tym, że Twój system nie wskazuje odpowiedniej biblioteki. W moim przypadku zwykle jest to spowodowane wskazywaniem biblioteki na wersję z wieloma kompilatorami.

Bryan Wilcutt
źródło
2

before_install:

# To obejście jest wymagane, aby uniknąć błędów libstdc ++ podczas uruchamiania „rozszerzonego” hugo z obsługą 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

zainstalować:

  • 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

Znalazłem to rozwiązanie tutaj

Jackson Junior Mkhabela
źródło
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
źródło
5
Witamy w Ask Ubuntu! Zalecam edycję tej odpowiedzi, aby rozszerzyć ją o szczegółowe informacje na temat tego, co ma osiągnąć to polecenie. (Zobacz także Jak napisać dobrą odpowiedź? Zawiera ogólne porady na temat tego, jakie rodzaje odpowiedzi są uważane za najcenniejsze w Ask Ubuntu.)
David Foerster,
6
Dlaczego cpnie ln -s?
AB