Подтвердить что ты не робот

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

Так что теперь я отчаянно пытаюсь найти решение этой проблемы. Я собираю разделяемую библиотеку .so в Ubuntu 32 бит (пробовал делать это под Debian и Ubuntu 64 бит, но ни одна не работала)

Я продолжаю получать: /usr/lib/libstdc++.so.6: version ''GLIBCXX_3.4.15' not found каждый раз, когда я пытаюсь загрузить свой плагин.

Вот как я получаю эту ошибку:

  1. Установите последнюю версию Ubuntu 32 bit
  2. sudo apt-get install build-essential
  3. Скомпилируйте и загрузите мой плагин (.so)

Вот несколько ссылок, которые я нашел и попробовал, но ни одна из них не работала для меня:

(Мой старый вопрос: я как-то исправил это через несколько дней после публикации этого вопроса, но я не могу вспомнить, как именно я это сделал)

Мой вопрос

Другой пользователь с той же проблемой

И другой

Я вижу, что некоторые люди исправили это, переместив libstdc++ (я думаю) в какой-то каталог, а затем указав или связав idk с этим каталогом, но это меня просто озадачило.

Кто-нибудь знает исправление?

(Изменить :) - Выполнение: strings/usr/lib/libstdc++.so.6 | grep GLIBC strings/usr/lib/libstdc++.so.6 | grep GLIBC в терминале дает мне: strings '/usr/lib/libstdc++.so.6': No such file. Может ли это быть проблема? И если да, то как мне установить эту библиотеку?

(Edit2 :) Кто-нибудь еще знает о решении?

(Edit3) Все еще нуждается в решении. Есть ли способ узнать, на каком дистрибутиве была скомпилирована общая библиотека? Я знаю, что однажды скомпилировал эту же библиотеку, но не помню !!

(Edit4) ldd my_lib_.so дает мне:

    linux-gate.so.1 =>  (0xb77d7000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76c1000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb76a4000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74fa000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb74ce000)
    /lib/ld-linux.so.2 (0xb77d8000)

ldd program_im_loading_so_into дает мне:

    linux-gate.so.1 =>  (0xb77d8000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb77c0000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb77a5000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76bb000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb768f000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7672000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74c9000)
    /lib/ld-linux.so.2 (0xb77d9000)

бегущие strings/usr/lib/i386-linux-gnu/libstdc++.so.6 | grep GLIBCXX strings/usr/lib/i386-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:

'gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04)'
4b9b3361

Ответ 1

Ссылка статически на libstdС++ с опцией -static-libstdc++ gcc.

Ответ 2

Я исправил эту проблему, установив: sudo apt-get install libstdc++6

В моем случае я столкнулся с этой проблемой после установки MongoDB 3.0.1

mongo:/usr/lib/x86_64-linux-gnu/libstdc++.so.6: версия `GLIBCXX_3.4.18 'не найдена (требуется mongo)

Ответ 3

Просто установите последнюю версию из репозитория nondefault:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install libstdc++6-4.7-dev

Ответ 4

эту проблему можно решить, установив последнюю версию libstdС++.

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install libstdc++6-7-dbg

Ответ 5

Вверху вы указываете, что компилируете свою часть своих шагов для воспроизведения, но затем ниже вы произносили произносимое править,

"есть ли способ увидеть, на какой дистрибутив была скомпилирована общая библиотека?"

Скомпилировано ли это в одном дистрибутиве, и даже другая версия того же дистрибутива - важная деталь, особенно для приложений на С++.

Связывание с библиотеками С++, в том числе libstdС++, может иметь смешанные результаты, насколько я могу судить. Вот связанный вопрос о перекомпиляции с разными версиями С++.

нужно ли перекомпилировать библиотеки с помощью С++ 11?

В принципе, если вы скомпилировали против С++ на другой дистрибутив (и, возможно, другую версию gcc), это может вызвать проблемы.

Я думаю, у вас есть два варианта:

  • Ваш лучший выбор - перекомпилируйте свой .so, если вы не скомпилировали его в своей текущей системе. Если в вашей среде выполнения есть проблема, она может даже возникнуть в компиляции.
  • Связывание с другими вашими компиляторами С++ libs вместе с вашим приложением. Это может быть только жизнеспособным, если это одно и то же распределение... Но это полезный трюк, если вы перевернули свой собственный компилятор. Вам также нужно будет установить и экспортировать LD_LIBRARY_PATH в путь, содержащий ваши вложенные файлы stdС++, если вы идете по этому маршруту.

Ответ 6

Если у кого-то такая же проблема, как у меня, убедитесь, что вы не устанавливаете из репозитория Ubuntu 14.04 на машину 12.04 - она ​​дает такую ​​же ошибку. Переустановка из соответствующего хранилища исправила проблему.

Ответ 7

Это сработало для меня:

cp <path_to>/libstdc++.so.6 $PWD
./<executable>

Этот кусок от @kerin (комментарий предоставлен выше):

вы можете проверить fooobar.com/questions/95984/...

По этой ссылке:

Если вы поместите более новый libstdc++.so в тот же каталог, что и исполняемый файл, он будет найден во время выполнения, проблема решена.

Я получал сообщение об ошибке, что libstdc++.so.6 исходил из /usr/lib64/, но это не та библиотека, с которой я связан! Сообщение выглядело так:

<executing_binary>: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found (required by <executing_binary>)

Я проверил, что LD_LIBRARY_PATH имеет каталог (и что это был первый путь). По какой-то причине во время выполнения он все еще просматривал /usr/lib64/libstdc++.so.6.

Я воспользовался советом из вышеприведенной статьи и скопировал libstdc++.so.6, откуда сошёл в каталог со своим исполняемым файлом, побежал оттуда, и это сработало!

Ответ 8

Возможно, здесь также пригодится ответ на этот вопрос: как найти libstdc++.so.6: содержащий GLIBCXX_3.4.19 для RHEL 6?

curl -O http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6-4.7-dbg_4.7.2-5_i386.deb
ar -x libstdc++6-4.7-dbg_4.7.2-5_i386.deb && tar xvf data.tar.gz
mkdir backup
cp /usr/lib/libstdc++.so* backup/
cp ./usr/lib/i386-linux-gnu/debug/libstdc++.so.6.0.17 /usr/lib
ln -s libstdc++.so.6.0.17 libstdc++.so.6