GLIBCXX 3.4.15 на Centos 6

8

Мне нужно установить GLIBCXX 3.4.15 на мою версию Centos 6 (чтобы запустить сервер для игры в Steam). Я гуглил и имел несколько веб-сайтов, на которых они устанавливали программы, где появлялась ошибка, где говорилось, что нужен 3.4.15 (LoadLibrary ERROR: /usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found ), но они просто использовали способ обойти это / не установить его. Когда я это сделал strings /usr/lib/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_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

Итак, как мне напрямую установить GLIBCXX 3.4.15 на Centos 6?

PMint
источник

Ответы:

7

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

Взлом включает в себя создание ссылки в /usr/lib которой указывается имя библиотеки, которую хочет конкретный инструмент. Затем ссылка указывает на альтернативное имя библиотеки.

пример

Скажем, я хотел создать ссылку на libstdc++.so.6.

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Это работает примерно так:

$ ln -s libstdc++.so.6 libstdc++.so.6.0.15

Проверка результатов:

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6.0.15 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Но я не уверен, что этот метод будет работать, так как в вашей библиотеке по-прежнему будет отсутствовать строка версии, GLIBCXX_3.4.15 .

Если взлом не удастся, вам, вероятно, придется прикусить пулю и установить GLIBC в альтернативный каталог, а затем переопределить LD_LIBRARY_PATHилиLD_PRELOAD так, чтобы при выполнении просто steam увидела измененную библиотеку.

пример

$ LD_PRELOAD='mylibc.so anotherlib.so' program

Подробно о том, как это сделать, более подробно рассказывается в этом разделе «Вопросы и ответы»: несколько библиотек glibc на одном хосте .

SLM
источник
@PMint - какой метод работал для вас?
SLM
Не должно быть второй ls, третьей строки libstdc++.so.6.0.15 -> libstdc++.so.6.0.14?
Runium
@Sukminder - да, спасибо за улов. Исправлена.
SLM
2

По сути, версия RPM-пакета libstdc ++, поставляемая CentOS (4.4.7), недостаточно актуальна для вашего приложения. CentOS предлагает долгосрочную стабильность вместо последних и лучших версий, так что это не совсем неожиданно.

Fedora обычно немного впереди и может без проблем запустить ваш сервер.

В качестве альтернативы вы можете создать более новую версию libstdc ++ из более свежего источника. Я начинал с файла CentOS SPEC в gcc SRPM, последней версии gcc.gnu.org, и переделывал его для создания моих собственных RPM.

Обновления библиотек C в прошлом были хорошим способом неожиданно сломать систему ...

HBruijn
источник
0

У меня была такая же проблема с модулем grpc (импортированным google-cloud) для nodejs v6.9.2. Это решение работало для меня: (из https://forum.qt.io/topic/25032/solved-centos-6-3-glibcxx_3-4-15-not-found-error-in-qt5-install/8 )

tar xzf gcc-4.6.2.tar.gz
cd gcc-4.6.2
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.6.2/configure --prefix=/opt/gcc-4.6.2
make
make install
Cristis
источник