/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
Спасибо за любую помощь!
18 ответов
Я собираю 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, чтобы указать на новый, и теперь все работает.
В прошлом я избегал этой проблемы, просто статически связывая libstdC++ с этим параметром, отправляемым в g++ при связывании моего исполняемого файла:
-static-libstdc++
Если статическое связывание в библиотеке является опцией, это, вероятно, самый быстрый обходной путь.
Я пытался заставить работать 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
Я смог заставить лягушку работать после этого. Надеюсь, что это полезно для кого-то.
Я сталкиваюсь с этой проблемой при попытке использовать 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
так что, просто замените его на обновленную систему lib.
Я только что столкнулся с подобной проблемой сборки версии LLVM 3.7. Сначала проверьте, установлена ли в вашей системе необходимая библиотека:
$locate libstdc++.so.6.*
Затем добавьте найденное местоположение в переменную окружения $LD_LIBRARY_PATH.
Иногда вы не контролируете целевой компьютер (например, ваша библиотека должна работать в закрытой корпоративной системе). В таком случае вам нужно будет перекомпилировать ваш код, используя версию GCC, соответствующую их версии GLIBCXX. В этом случае вы можете сделать следующее:
- Посмотрите последнюю версию GLIBCXX, поддерживаемую целевой машиной:
strings /usr/lib/libstdc++.so.6 | grep GLIBC
... Скажи, что версия3.4.19
, - Используйте https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html чтобы найти соответствующую версию GCC. В нашем случае это
[4.8.3, 4.9.0)
,
Я получил ту же ошибку. Вот как это работает для меня:
- убрал проект под установленный в данный момент gcc
- перекомпилировал это
Работал отлично!
Для этой ошибки я скопировал последнюю версию 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
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/ бен / 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
задача решена.
Я извлек их из RPM ( RPM для libstdC++) и затем:
export LD_LIBRARY_PATH=.
Чтобы настроить систему для поиска библиотек в текущем каталоге. Затем просто выполнил мою программу. Но в моем случае я получил один исполняемый файл, который мне был нужен, это не было общесистемным изменением.
Я просто использовал -static-libstdC++ при сборке. с этим я могу запустить
g++ test.cpp -static-libstdc++
В моем случае 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.
Это решило эту проблему.
У меня было установлено несколько версий компилятора gcc, и мне нужно было использовать более свежую версию, чем установка по умолчанию. Поскольку я не являюсь системным администратором для наших систем Linux, я не могу просто изменить / usr / lib или многие другие предложения, приведенные выше. Я столкнулся с этой проблемой и в конце концов отследил ее, установив путь к каталогу 32-битной библиотеки вместо каталога 64-битной библиотеки (lib64). Поскольку библиотеки в 32-разрядном каталоге были несовместимы, система по умолчанию установила более старую версию, которая устарела.
Использование -L к пути, на который я ссылался, давало предупреждения о "пропуске несовместимого libstdC++. Поэтому при поиске -lstdC++". Это был намек, который помог мне окончательно решить проблему.
Ошибка с GLIBCXX_3.4.14. Вам необходимо установить более новую версию GCC. http://pkgs.org/download/libstdc++.so.6 Перейти к:
http://geeksterminal.com/how-to-install-glib-glibc/1392/
и следуйте инструкциям.
У меня была та же самая проблема, потому что я изменил пользователя от себя до другого:
су
По какой-то причине после обычной компиляции я не смог ее выполнить (то же самое сообщение об ошибке). Непосредственно ssh для другой учетной записи пользователя работает.
То же самое с версией gcc 4.8.1 (GCC)
а также libstdc++.so.6.0.18
, Пришлось скопировать это здесь /usr/lib/x86_64-linux-gnu
на моей коробке Ubuntu.
У меня была похожая проблема, и я решил ее статически libstdc++
в программу, которую я компилировал, вот так:
$ LIBS=-lstdc++ ./configure ... etc.
вместо обычного
$ ./configure ... etc.
Могут быть проблемы с этим решением, связанные с загрузкой разделяемых библиотек во время выполнения, но я недостаточно глубоко изучил проблему, чтобы прокомментировать.
В целях тестирования:
На исходном компьютере найдите библиотеку, скопируйте в тот же каталог, что и исполняемый файл:
$ 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
Примечание: приведенная выше команда является временной; это не общесистемное изменение.
У меня была та же проблема раньше, и я исправил ее, шаги можно найти в этой ошибке "GLIBCXX_3.4.15" на matlab