Centos 6 上的 GLIBCXX 3.4.15

Centos 6 上的 GLIBCXX 3.4.15

我需要在我的 Centos 6 版本上安装 GLIBCXX 3.4.15(以在 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

那么,如何在 Centos 6 上直接安装 GLIBCXX 3.4.15 呢?

答案1

我认为这是一种 hack,但使用它的次数比我愿意承认的更多,以解决与 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_PATHLD_PRELOAD以便仅执行 steam 才能看到修改后的库。

例子

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

有关如何执行此操作的详细信息,请参阅此 SO Q&A:单个主机上的多个 glibc 库

答案2

基本上,CentOS (4.4.7) 附带的 libstdc++ RPM 软件包的版本对于您的应用程序来说不够新。 CentOS 提供长期稳定性,而不是最新和最好的版本,因此这并不完全出乎意料。

Fedora 通常领先很多,并且可以毫无问题地运行您的服务器。

或者,您可以从更新的源构建更新版本的 libstdc++。我会从 gcc SRPM(来自 gcc.gnu.org 的最新版本)中的 CentOS SPEC 文件开始,并重新编写这些文件来构建我自己的 RPM。

在过去,C 库的升级是以意想不到的方式破坏系统的好方法......

答案3

我对 Nodejs v6.9.2 的 grpc 模块(由 google-cloud 导入)也有同样的问题。这个解决方案对我有用:(来自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

相关内容