Рейтинг:1

libstdc++.so.6 ссылается на неправильную версию

флаг vn

В прошлом мое невежество приводило к тому, что я возился с версией gcc/g++. На данный момент я использую Убунту 18.04 и работает gcc --версия дал мне это:

gcc (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0
Авторское право (C) 2018 Free Software Foundation, Inc.
Это бесплатное программное обеспечение; см. источник условий копирования. Здесь нет
гарантия; даже не для КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.

Однако после некоторой отладки я понял, что мой libstdc++.so.6 линкуется с неправильной версией. Я знал об этом, запустив ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so.6, что дало мне:

lrwxrwxrwx 1 root root 19 19 мая 2020 г. /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.28

Проверка против АБИ, по-видимому, это произошло из gcc 9.3.0, который я помню, когда-то устанавливал. Это вызвало у меня некоторые странные ошибки при программировании на C++.

Теперь я хотел бы связать libstdc++.so.6 обратно с gcc 8, но я не уверен, что это менее идиотский способ сделать это. Должен ли я попробовать удалить GCC 9 и переустановить GCC 8?

Бег найти libstdc++.so.6 дал мне это:

/opt/nvidia/nsight-systems/2020.3.2/host-linux-x64/libstdc++.so.6
/opt/nvidia/nsight-systems/2020.3.2/target-linux-armv8/host-linux-armv8/libstdc++.so.6
/snap/core18/1988/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/snap/core18/1988/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
/snap/core18/1988/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25-gdb.py
/snap/core18/2066/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/snap/core18/2066/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
/snap/core18/2066/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25-gdb.py
/usr/lib/i386-linux-gnu/libstdc++.so.6
/usr/lib/i386-linux-gnu/libstdc++.so.6.0.28
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
/usr/share/gdb/auto-load/usr/lib/i386-linux-gnu/libstdc++.so.6.0.28-gdb.py
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28-gdb.py
флаг hr
Насколько я знаю, `libstdc++6.0.xx` не относится к конкретной версии gcc - это часть отдельного пакета `libstdc++6`. Какие актуальные проблемы вы пытаетесь решить?
Anh Tran avatar
флаг vn
@steeldriver Похоже, что мои двоичные файлы связаны с неправильной общей библиотекой (libstdc++.so.6), что привело к сбою программы (ошибка сегмента)
флаг cn
Ray
Что, если вы попытаетесь удалить пакет, к которому принадлежит `libstdc++6.0.28`, а затем установить тот, который вам нужен? То есть игнорировать проблему gcc 8 или 9.
Anh Tran avatar
флаг vn
Что мне делать, чтобы выяснить, какие пакеты зависят от libstdc++6.0.28?
N0rbert avatar
флаг zw
Пожалуйста, добавьте вывод `dpkg -S libstdc++.so.6` и `политика apt-cache $(dpkg -S libstdc++.so.6 | awk -F: '{print $1}' | sort -u)` в вопрос.
флаг hr
Я действительно думаю, что вам следует еще немного отладить причину (ы) segfaults, прежде чем спускаться в эту кроличью нору - AFAIK libstdc ++ всегда обеспечивает * обратную * совместимость с ABI ex. на моей машине 18.04 (где у меня есть libstdc++6.0.29.so) он предоставляет CXX ABI от 1.3.1 (gcc 4.?) до 1.3.13 (gcc 11.1), как указано в выводе `nm -D /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.29 | grep CXXABI`

Ответить или комментировать

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