GLIBCXX_3.4.20 не найден, как исправить эту ошибку?

104

Когда я пытаюсь запустить программу Layout Editor (доступна на этом сайте ) в 64-битной LTS Ubuntu 14.04.1, я получаю следующий вывод в терминале:

$ 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. Любая помощь, предложения о том, как поступить, с благодарностью.

Vesnog
источник
Нашли решение уже?
Стивен Руз
1
@ StevenRoose Мне удалось решить проблему, после добавления некоторых бэкпортов и установки некоторого программного обеспечения, но я не помню детали ясно, когда я их помню, я опубликую их как ответ.
Весног
Похоже, что это эффект связывания символов: stackoverflow.com/questions/2856438/… Вы просто не ссылаетесь на версию библиотеки достаточно недавно.
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

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
добавление репозитория, «обновление» и «dist-upgrade» - все, что было нужно с моей стороны.
virtualxtc
5
после обновления вы можете проверить последнюю версию GLIBCXX asstrings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
Krishan Kumar Mourya
1
Ubuntu 16.04: В ноябре 2017 года добавлено «недоверенное и неподдерживаемое» ppa: ubuntu-toolchain-r / test с помощью add- apt-repositoryupdated /usr/lib/x86_64-linux-gnu/libstdc++.so.6до GLIBCXX_3.4.24 включительно и, кроме того, это обновляет в основном ВСЕ c / c ++ / fortran. инструменты разработки на вашей машине
knb
60

Это случилось со мной с anaconda 4.0.0 (как сказано в @mjp), но исправление для меня состояло в том, чтобы запустить эту команду в моей среде:

conda install libgcc
neok
источник
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 GUI (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. перезапустите spyder / другой интерфейс, который вы используете

Теперь должно работать!

ДСМ
источник
для меня было достаточно просто переименовать conda .so, затем он нашел версию os без ссылки
Mingwei Samuel
7

Я решил проблему, как это (но GLIBCXX_3.4.21) на CentOS, но это не зависит от ОС. Библиотека является частью компилятора 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 ...
oklas
источник
Я исправил постоянно обновляя ссылку , /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/
Mati
источник
5
Добро пожаловать в Спросите Ubuntu! Я рекомендую отредактировать этот ответ, чтобы расширить его конкретными сведениями о том, чего должна достичь эта команда. (См. Также Как написать хороший ответ? Для общего совета о том, какие ответы считаются наиболее ценными в Ask Ubuntu.)
Дэвид Фёрстер
6
Почему cpи нет ln -s?
AB