
Об устранении ошибки ‘GLIBCXX_any version’ not found
Без труда не выловишь и рыбку из пруда... Народная мудрость
Иногда при запуске программ в Linux происходит сбой, при котором появляется сообщение об ошибке, связанное с отсутствием или невозможностью найти какую-либо библиотеку/файл.
Пример ошибки, появляющейся при попытке запуска cpuminer, причем только что скомпилированного на этом же компьютере:
/cpuminer: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by ./cpuminer)
Почему появляется ошибка libstdc++.so.6: version `GLIBCXX_x.x.x’ not found (required by …)?
Проблема, связанная с невозможностью найти разделяемую библиотеку libstdc++.so.6 с нужной версией GLIBCXX связана с особенностями работы компилятора gcc, в соответствии с которыми он формирует динамические связи в исполняемых файлах.
GCC при компиляции программы вносит в ее исполняемый файл код, согласно которому при ее работе должна использоваться библиотека libstdc++.so.6 подходящей версии, в рассматриваемом случае (для компилятора GCC 13.2.0) — файл GLIBCXX 3.4.32 или новее.
Для справки: установить библиотеку libstdc++.so.6 в Linux можно командой sudo apt install libstdc++6 -y
Библиотека libstdc++.so.6 помогает трансформировать исходный код программы, написанный на языке программирования C++ в машинный язык, который исполняется процессором, выполняя следуюшие задачи:
- реализация стандартной библиотеки C++ согласно стандартам ISO;
- работа с базовыми функциями, такими, как операции ввода/вывода, работа со станлартными классами и функциями;
- динамическое связывание программы с актуальной версией libstdc++.so.6;
- оптимизация структуры данных и алгоритмов.
libstdc++.so.6 и компилятор регулярно обновляются, что находит отражение в программном обеспечении, для работы которого в операционной системе требуется наличие обновленных служебных компонентов. Если используется нестандартная (самая новая) версия компилятора (например, gcc 13.2.0 в ubuntu 22.04, 20.04, 18.04 и т.д.), то при сборке программы может возникнуть ситуация, при которой для ее запуска понадобиться версия libstdc++.so.6,отличающаяся от той, которая установлена в системе согласно стандартной процедуре.

Таким образом, для решения проблемы нужно либо установить требуемую версию libstdc++.so.6 (более новую), либо заставить программу использовать имеющийся релиз (этот способ подойдет, если программа собирается и запускается в одной и той же системе).

Посмотреть все версии ibstdc++.so.6 (файлов GLIBCXX), установленные в операционной системе, можно командой:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
Например, на компьютере под управлением xubuntu 22.04 со стандартными обновлениями и установленным вручную компилятором gcc 13.2.0 имеются версии GLIBCXX начиная с 3.4, 3.4.1 и так далее — до GLIBCXX_3.4.30:
GLIBCXX_3.4 GLIBCXX_3.4.1 ... GLIBCXX_3.4.27 GLIBCXX_3.4.28 GLIBCXX_3.4.29 GLIBCXX_3.4.30 GLIBCXX_DEBUG_MESSAGE_LENGTH
Обновление системы командами
sudo apt update && sudo apt -y upgrade && sudo apt -y dist-upgrade && sudo apt -y autoremove && sudo apt-get clean
проблему не решает, так как GLIBCXX 3.4.32 в момент обновления относится к тестирующимся библиотекам и не входит в стандартный набор компонентов системы.

Если программа запускается на том же компьютере, где производилась сборка исполняемого файла, решить проблему может прописывание в скрипте запуска программы пути к libstdc++.so.6, например:
export LD_LIBRARY_PATH=/usr/local/lib64
Добавление этой строки перед скриптом майнера решает проблему, он запускается без ошибок.
Найти местонахождение библиотеки libstdc++.so.6 можно командой
sudo find / -name "libstdc++.so.6*"

Чтобы кардинально решить проблему и установить недостающую (тестовую) версию GLIBCXX выполняют следующие команды:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install --only-upgrade libstdc++6
В xubuntu 22.04 получаем следующую реакцию:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
PPA publishes dbgsym, you may need to include 'main/debug' component Repository: 'deb https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu/ jammy main' Description: Toolchain test builds; see https://wiki.ubuntu.com/ToolChain More info: https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test Adding repository. Press [ENTER] to continue or Ctrl-c to cancel.
Нажимаем ввод, обновляемся и запускаем установку
sudo apt-get install --only-upgrade libstdc++6
Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: gcc-13-base gcc-13-base:i386 libstdc++6:i386 The following NEW packages will be installed: gcc-13-base gcc-13-base:i386 The following packages will be upgraded: libstdc++6 libstdc++6:i386 2 upgraded, 2 newly installed, 0 to remove and 27 not upgraded. Need to get 1 690 kB of archives. After this operation, 1 146 kB of additional disk space will be used. Do you want to continue? [Y/n]
Теперь команда
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
показывает наличие нужной версии:
GLIBCXX_3.4 … GLIBCXX_3.4.32 GLIBCXX_TUNABLES GLIBCXX_DEBUG_MESSAGE_LENGTH
Поймали…

Почему появляется ошибка libstdc++.so.6: version `GLIBCXX_x.x.x’ not found (required by …)?

