GLIBCXX_3.4.20 не знайдено, як виправити цю помилку?


104

Коли я намагаюся запустити програмний редактор макета (доступний на цьому сайті ) на Ubuntu 14.04.1 64-розрядний LTS, я отримую наступний вихід у терміналі:

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

Я спробував команду stringsна /usr/lib/x86_64-linux-gnu/libstdc++.so.6наступне, і ось вхід і вихід:

$ 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

Як я можу вирішити цю проблему, я якось здогадуюсь, що вона пов’язана, GCCале не можу зрозуміти, як виправити проблему. Крім того, я спробував PPA, як було запропоновано в розділі Як я можу використовувати останню GCC на Ubuntu? і подібне запитання щодо старішої версії Ubuntu в GLIBCXX_3.4.15 не знайдено . Однак після запуску sudo updateя отримую численні попередження, і у списку, який я отримав за допомогою команди strings, після установки не було нових записів gcc 4.9, тому я очистив PPA ( Toolchains Test Builds ) за допомогою ppa-purge. Будь-яка допомога, пропозиції щодо того, як діяти, дуже вдячні.


Знайшли рішення вже?
Стівен Руз

1
@StevenRoose Мені вдалося вирішити проблему, додавши кілька опорних даних і встановивши якесь програмне забезпечення, але я не пам'ятаю деталі, коли я їх запам'ятаю, я опублікую їх як відповідь.
Весног

Здається, що це ефект зв’язування символів: stackoverflow.com/questions/2856438/… Ви просто не посилаєтесь на бібліотечну версію досить недавно.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Відповіді:


102

У мене була така ж проблема, коли я намагався запустити іншу програму, і знайшов рішення на StackOverflow .

В основному, просто виконайте такі команди: По-перше, встановіть:

sudo apt-get install libstdc++6

Це вже має бути встановлено за замовчуванням, але спробуйте. Якщо це не вирішує, просто виконайте наступне:

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

Я не виконував команди "dist-upgrade", але ті, хто раніше, вирішив це для мене


6
sudo apt-get dist-upgrade вирішив мою проблему
ady

2
Проблема вирішена без необхідності , dist-upgradeяк upgradeплановані і оновила свою систему з останнімlibstdc++
arainone

2
Доповнення сховища, "оновлення" та "дистрибутив-оновлення" були потрібні в моєму кінці.
virtualxtc

5
після оновлення ви можете перевірити останню версію GLIBCXX якstrings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
Kumar Mourya

1
Ubuntu 16.04: у листопаді 2017 р. Додавання ppa "непідтвердженого та непідтримуваного" ppa: ubuntu-toolchain-r / test через доповнене apt-repositoryоновлення /usr/lib/x86_64-linux-gnu/libstdc++.so.6до GLIBCXX_3.4.24 та включаючи це оновлення в основному ВСЕ c / c ++ / fortran інструменти розробки на вашій машині
кнб

60

Сталося зі мною з anaconda 4.0.0 (як заявив @mjp), але для мене виправленням було запустити цю команду в моєму середовищі:

conda install libgcc

6
Це вирішило це для мене після спробу багатьох рішень з інших потоків.
Шон Андерсон

3
Працює і на Ubuntu 16.04
fviktor

1
це дійсно врятувало мою недопалку пару разів!
MBZ

Ubuntu 16.04 - вирішив це для мене.
Жубарб

це набагато краще .. працював для мене .. намагався "імпортувати ROOT" в python
MycrofD

11

У мене виникла ця проблема - це тому, Anaconda2що не було версії GLIBCXX_3.4.20 будь-якої речі. Тільки до .19, те саме, що і ваше.

Однак у бібліотеки Ubuntu його було . Тож я просто створив програмне посилання / ярлик у бібліотеці Anaconda до фактичної бібліотеки Linux, що містить цю GLIBCXX_3.4.20, замінивши попередню, і вона спрацювала чудово після перезапуску інтерфейсу інтерфейсу python (Spyder).

Там повинна бути папка з ім'ям libstdc++.so.6в бібліотеці Anaconda, яка знаходиться тут: ~/anaconda2/lib. У цій папці є версії сценарію / бібліотеки-коду, за винятком тієї, яка вам не вистачає: GLIBCXX_3.4.20

Виконайте наступні кроки, щоб вирішити проблему:

  1. перейдіть у потрібне місце та створіть резервну копію поточного anaconda2ярлика (змініть його ім'я, щоб воно не було перезаписано):

    cd ~/anaconda2/lib
    mv -vf libstdc++.so.6 libstdc++.so.6.old
    
  2. створити новий ярлик за допомогою lnкоманди (я припускаю, що я перебуваю у попередньому місці ~ / anaconda2 / lib):

    ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./libstdc++.so.6
    
  3. перезапустити шпигунський / інший інтерфейс, який ви використовуєте

Зараз це має працювати!


для мене було достатньо просто перейменувати conda .so, тоді він знайшов версію os, не потребуючи посилання
Mingwei Samuel

7

Я вирішив подібну проблему (але GLIBCXX_3.4.21) на CentOS, але вона не залежить від OS. Бібліотека є частиною компілятора gcc, тому потрібно встановити або компілювати відповідну версію gcc. Це таблиця версій gcc та версій відповідного 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

(повний список версій тут )

Це не залежить від того, як встановити gcc - він може бути встановлений з пакета або складений і встановлений з джерел.

Можливо, що системні бібліотеки gcc доступні замість невірно встановлених. Тому потрібно вказати змінну середовища, де можна знайти бібліотеки, наприклад, у командному рядку:

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

Я виправив постійно оновлюючи посилання , /usr/lib64/libstdc++.so.6щоб вказати на нову версію я мав на /usr/local/lib64/libstdc++.so.6цій команді: ln -fs /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6. У старій версії залишається відсутність посилання на неї, якщо вам потрібно відновити. Трохи хак, але це працює.
Матвій

2

У мене це було неодноразово протягом багатьох років з багатьма різними пакунками. Це завжди вирішувалося:

sudo apt-get dist-upgrade

Якщо ваш дистрибутив може бути оновлений, він майже завжди знищить нову бібліотеку C ++ і перенастроїть такі речі, як, наприклад, вони знову працюватимуть. Проблема майже завжди викликана тим, що ваша система не вказує на потрібну бібліотеку. У моєму випадку зазвичай це викликано вказівкою на перехресну компіляторну версію бібліотеки.


2

before_install:

# Це вирішення потрібно, щоб уникнути помилок libstdc ++ під час запуску "розширеного" hugo з підтримкою 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

встановити:

  • 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

Я знайшов це рішення тут


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
Ласкаво просимо до Ask Ubuntu! Я рекомендую відредагувати цю відповідь, щоб розширити її конкретними подробицями щодо того, чого має досягти ця команда. (Дивіться також Як я можу написати гарну відповідь? Для загальних порад про те, які типи відповідей вважаються найціннішими на Ask Ubuntu.)
Девід Фоерстер

6
Чому cpі ні ln -s?
AB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.