/usr/lib/libstdc++.so.6: версия `GLIBCXX_3.4.15 'не найдена

Как я могу получить GLIBCXX_3.4.15 в Ubuntu? Я не могу запускать некоторые программы, которые компилирую.

Когда я делаю:

strings /usr/lib/libstdc++.so.6 | grep GLIBC

Я получил:

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
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

Спасибо за любую помощь!


person Chris    schedule 07.03.2011    source источник


Ответы (19)


Я компилирую gcc 4.6 из исходников и, по-видимому,

sudo make install 

не поймал этого. Я покопался и нашел

gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15

Я скопировал его в / usr / lib и перенаправил libstdc ++. So.6, чтобы он указывал на новый, и теперь все работает.

person Chris    schedule 07.03.2011
comment
Это также работает с gcc 4.6.2, за исключением libstdc ++. So.6.0.16. Спасибо! - person Venesectrix; 02.02.2012
comment
Мой - gcc 4.7 и libstdc ++. So.6.0.17. Была та же проблема, исправленная этим решением. Престижность. - person Ricbit; 16.04.2012
comment
Есть ли способ обойти это без необходимости вручную компилировать gcc? Может быть, как простая команда apt-get? - person aroth; 04.03.2013
comment
Да, есть. Решение этой проблемы на основе apt-get описано здесь: superuser.com/questions/310809/ - person aroth; 05.03.2013
comment
Эта хромая ошибка уже некоторое время мучает пользователей CENTOS / Ubuntu / Linux. И почему именно разработчики этих ОС не заморачивались исправлением или обновлением ?? Кстати, спасибо за исправление :)! - person roosevelt; 07.10.2013
comment
@roosevelt: проблема не в ОС, а в том, что пользователи сами устанавливают программное обеспечение, а затем неправильно используют компоновщик. Это часто задаваемые вопросы: gcc.gnu.org/onlinedocs/libstdc++/faq. html # faq.how_to_set_paths - person Jonathan Wakely; 06.05.2014
comment
Спасибо @Chris. ваше решение работает для меня. Создание libstdc ++ занимает пару минут. So.6.0.15 - person Hua Zhang; 04.12.2015
comment
В моем случае я скопировал /usr/lib/x86_64-linux-gnu/libstdc++.so.6 в / usr / lib, а затем мягко связал /usr/lib/libstdc++.so.6.0.15 (замените на тот, который ваш программе нужно) к тому. - person Ulisses Braga-Neto; 03.07.2016

Раньше я избегал этой проблемы, просто статически связывая libstdc ++ с этим параметром, отправленным в g ++ при связывании моего исполняемого файла:

-static-libstdc++

Если возможна статическая компоновка библиотеки, это, вероятно, самый быстрый способ решения проблемы.

person Martin G    schedule 25.08.2014
comment
Проблема в том, что библиотека не может быть найдена, а не в том, что вы должны статически линковать. Смотрите ответ от @Hobo. - person Dan Mergens; 26.11.2019

Я пытался заставить работать clang (для чего также требуется 6.0.15), и пока ковырялся, я обнаружил, что он установлен на /usr/local/lib/libstdc++.so.6.0.15. Он установился там, когда я установил графит (экспериментальная версия gcc).

Если вам нужен доступ к библиотекам в этом месте, вам нужно будет определить LD_LIBRARY_PATH как:

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64

После этого я смог заставить работать лязг. Надеюсь, что это кому-то поможет.

person Hobo    schedule 11.05.2011
comment
Я работал над встроенной целью, и у меня возникла та же проблема, ваше решение, похоже, не работает в моем случае. Фактически, большая часть двоичного файла в цели использует библиотеку c по умолчанию в / lib, поэтому изменение LD_LIBRARY_PATH повлияет на них. все они будут связаны с новой библиотекой. В конце концов, большинство двоичных файлов не работают: например, ls _3 _, ....: Я получаю: ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory - person Mouin; 27.04.2017

Я сталкиваюсь с этой проблемой при попытке использовать Matlab eng для вызова функций m из кода c. что происходит с командой mex -f .. ..

Мое решение:

strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC

Я обнаружил, что он включает 3.4.15

так что в моей системе новейшие библиотеки.

проблема исходит от самого Matlab, он вызывает свой собственный libstdc ++. so.6 из {MATLAB}/bin

так что просто замените его обновленной системной библиотекой.

person Cheng Chang    schedule 08.05.2013
comment
Кажется, это также работает для меня в Matlab 2013b x64 на Xubuntu 13.04 x64 - person Marcin; 02.07.2013
comment
Большое спасибо. Мне просто нужно было создать новую символическую ссылку для файла в {MATLAB}/bin на файл в /usr/lib/, а затем перезапустить matlab. Это работает в Matlab 2010b на Fedora 14 x64. - person Wok; 02.08.2013

Я только что столкнулся с аналогичной проблемой при создании версии LLVM 3.7. Сначала проверьте, установлена ​​ли в вашей системе необходимая библиотека:

$locate libstdc++.so.6.*

Затем добавьте найденное местоположение в переменную окружения $ LD_LIBRARY_PATH.

person Arsen    schedule 24.12.2015
comment
Это работает, только если у вас есть libstdc ++. So.6. * Lib с поддержкой GLIBCXX_3.4.15 - person warunapww; 26.08.2016

У меня такая же ошибка. Вот как это сработало для меня:

  • очистил проект под установленным в данный момент gcc
  • перекомпилировал это

Сработало отлично!

person iueae    schedule 26.06.2012

Для этой ошибки я скопировал последнюю версию libstdc ++. So.6.0.17 с другого сервера, удалил программную ссылку и воссоздал ее.

1. Скопируйте libstdc ++. so.6.0.15 или последнюю версию с другого сервера в уязвимую систему.
В моем случае в SUSE linux 11 SP3 была последняя версия.
2. rm libstdc ++. so.6
3. ln -s libstdc ++. so.6.0.17 libstdc ++. so.6 (в каталоге / usr / lib64).

nJoy

person crazyLinux    schedule 06.08.2014

Иногда вы не контролируете целевой компьютер (например, ваша библиотека должна работать в заблокированной корпоративной системе). В таком случае вам нужно будет перекомпилировать код, используя версию GCC, соответствующую их версии GLIBCXX. В этом случае вы можете сделать следующее:

  1. Найдите последнюю версию GLIBCXX, поддерживаемую целевой машиной: strings /usr/lib/libstdc++.so.6 | grep GLIBC ... Скажем, версия - 3.4.19.
  2. Используйте https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html, чтобы найти соответствующую версию GCC. В нашем случае это [4.8.3, 4.9.0).
person Gili    schedule 09.03.2017

gcc версии 4.8.1 ошибка выглядит так:

/ root / bllvm / build / Release + Asserts / bin / llvm-tblgen: /usr/lib64/libstdc++.so.6: версия `GLIBCXX_3.4.15 'не найдена (требуется для / root / bllvm / build / Release + Asserts / bin / llvm-tblgen)

Я нашел libstdc ++. So.6.0.18 в том месте, где я выполнил gcc 4.8.1

Тогда мне это нравится

cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/

rm /usr/lib64/libstdc++.so.6

ln -s libstdc++.so.6.0.18 libstdc++.so.6

проблема решена.

person Favoorr    schedule 22.07.2015

Я извлек их из RPM (RPM для libstdc ++), а затем:

export LD_LIBRARY_PATH=.

Настроить систему на поиск библиотек в текущем каталоге. Затем просто выполнил мою программу. Но в моем случае я получил единственный исполняемый файл, который мне был нужен, это не было общесистемным изменением.

person prmottajr    schedule 13.10.2016

У меня была аналогичная проблема, и я решил ее, статически связав libstdc++ с программой, которую я компилировал, например:

$ LIBS=-lstdc++ ./configure ... etc.

вместо обычного

$ ./configure ... etc.

У этого решения могут быть проблемы с загрузкой разделяемых библиотек во время выполнения, но я не изучил проблему достаточно глубоко, чтобы прокомментировать.

person Evgeni Sergeev    schedule 11.06.2013

Ошибка с GLIBCXX_3.4.14. Необходимо установить более новую версию GCC. http://pkgs.org/download/libstdc++.so.6 goto:

http://geeksterminal.com/how-to-install-glib-glibc/1392/

и следуйте инструкциям.

person Marco Silva    schedule 16.08.2014

У меня была такая же проблема, потому что я сменил пользователя с себя на кого-то другого:

su

По какой-то причине после нормальной компиляции я не смог ее выполнить (то же сообщение об ошибке). Непосредственно ssh для другой учетной записи пользователя работает.

person SmallChess    schedule 01.04.2015
comment
Это не совсем ответ на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав Задать вопрос. Вы также можете добавить вознаграждение, чтобы привлечь больше внимания к этому вопросу. - person ravron; 02.04.2015
comment
Нет, потому что у меня была точно такая же проблема. Это было вызвано сменой пользователя. Это могло также произойти с кем-то другим, скажем, с переходом на root. - person SmallChess; 02.04.2015
comment
Моя ошибка! Меня бросила первая строка, которая выглядела так, как будто у вас тоже была проблема. Продолжать! - person ravron; 02.04.2015
comment
Я также использовал Ubuntu, а также пытался скомпилировать программы, а также получил то же сообщение об ошибке, что и в вопросе. Моя ошибка заключалась в том, что я делал это в другой учетной записи пользователя с помощью команды su. Я думаю, что это ответ на вопрос, потому что он объясняет, почему и как решить проблему. Конечно, это возможность. - person SmallChess; 02.04.2015
comment
И у одного пользователя был установлен LD_LIBRARY_PATH для поиска более новой библиотеки, но не у другого пользователя? Это кажется немного надуманным в конкретном контексте этого вопроса. - person Marc Glisse; 03.04.2015
comment
Я действительно не ожидал, что моя небольшая попытка задать этот вопрос вызовет такой шум. Я не могу объяснить, почему это было так, но это действительно так. Я по-прежнему верю, что мой ответ верен, потому что он пытается дать возможное решение, которое может произойти, если кто-то попытается выполнить su для получения root-прав и выполнить некоторую компиляцию. - person SmallChess; 03.04.2015

У меня было установлено несколько версий компилятора gcc, и мне нужно было использовать более новую версию, чем установка по умолчанию. Поскольку я не являюсь системным администратором наших систем Linux, я не могу просто изменить / usr / lib или многие другие приведенные выше предложения. Я столкнулся с этой проблемой и в конце концов отследил ее, установив свой путь к каталогу 32-разрядной библиотеки вместо каталога 64-разрядной библиотеки (lib64). Поскольку библиотеки в 32-битном каталоге были несовместимы, система по умолчанию использовала старую версию, которая была устаревшей.

Использование -L для пути, на который я ссылался, давало предупреждения о «пропуске несовместимой libstdc ++. Поэтому при поиске -lstdc ++». Это был намек, который помог мне окончательно решить проблему.

person Cathy    schedule 22.06.2015

То же самое с gcc версии 4.8.1 (GCC) и libstdc++.so.6.0.18. Пришлось скопировать его здесь /usr/lib/x86_64-linux-gnu на моем ящике ubuntu.

person ervinbosenbacher    schedule 26.06.2013

В моем случае у LD_LIBRARY_PATH был / usr / lib64 до / usr / local / lib64. (Я создавал llvm 3.9).
В новом компиляторе gcc, который я установил для компиляции llvm 3.9, были библиотеки, использующие новые библиотеки GLIBCXX в / usr / local / lib64, поэтому я исправил LD_LIBRARY_PATH, чтобы компоновщик увидел / usr / local / lib64 первый.
Это решило эту проблему.

person Chan Kim    schedule 08.05.2018

Я просто использовал -static-libstdc ++ при сборке. с этим, я могу запустить a.out

g++ test.cpp -static-libstdc++
person Suresh    schedule 28.11.2018

В целях тестирования:

На исходном компьютере найдите библиотеку, скопируйте в тот же каталог, что и исполняемый файл:

$ ldconfig -p | grep libstdc
        libstdc++.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
        libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 .

Затем скопируйте эту же библиотеку на целевую машину и запустите исполняемый файл:

LD_LIBRARY_PATH=. ./myexecutable

Примечание: приведенная выше команда является временной; это не общесистемное изменение.

person Contango    schedule 01.04.2020

Раньше у меня была такая же проблема, и я исправил ее, шаги можно было найти на этом Исправление ошибки" GLIBCXX_3.4.15 "в Matlab

person ZijunLost    schedule 09.10.2013