Linux(CentOS)GLIBC出错补救方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux(CentOS)GLIBC出错补救方式相关的知识,希望对你有一定的参考价值。

参考技术A 错误严重的可能连基本命令都没法使用

好一些的只有安装的程序无法使用

情况最好的是只错误的更改了libc.so.6的软链接,可以尝试

如果没有效果,可能是因为配置文件被移动或重命名,这时需要重新添加路径:

如果上面两个办法都没有作用,很有可能出错的并不是一个文件或者链接。
进入/lib64目录,使用 ls -ltr 命令

你可以从这里看到所有的链接版本,务!必!让所有版本保持一致,因为上述两个错误造成的原因之一就是更改过程造成了版本的冲突。
因为ln无法使用,这里可以使用sln命令,把所有该更改的版本改回来

一般到这里问题就不大了,如果仍然存在问题,推荐灵活使用历史命令

希望每个人的努力,都不会被辜负。

Linux(Ubuntu/CentOS) 下查看 GLIBC 版本


title: Linux(Ubuntu/CentOS) 下查看 GLIBC 版本
date: 2020-10-06 23:35
author: gatieme
tags: linux
categories:
- linux
thumbnail:
blogexcerpt: 之前在工作中, 经常有同事问我怎么知道当前系统中 GLIBC 的版本号是多少. 今天安装软件的时候, 想到了这个问题, 于是记录下, 与大家共勉.


日期作者GitHubCSDNBLOG
2020-10-06gatiemeAderXCodingLinux(Ubuntu/CentOS) 下查看 GLIBC 版本Linux(Ubuntu/CentOS) 下查看 GLIBC 版本

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作

因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦

转载请务必注明出处, 谢谢, 不胜感激


1 ldd --version


最简单直接的方法

ldd --version

其输出如下:

2 通过 libc.so 获取版本号


GLIBC 库已经为了我们考虑到这点了, 因此从 libc.so 我们可以获取到版本信息.

2.1 首先查找到 libc 库的位置


关于如何找到 GLIBC 库, 有多种方法

  1. ldd 一个当前系统中 C 库编写的动态可执行程序
ldd `which top` | grep "libc.so"
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6e32226000)

  1. 原理同 2, 只不过是从正在运行的程序的动态库中获取

当前进程 shell 一般是一个 C 库的程序, lsof 查看它运行时加载的 libc 库是哪个

lsof -p $$ 2>&1 | grep "libc-"

  1. 通过 gcc 获取到 libc 库的位置

cat gcc -print-file-name=libc.so

2.2 从 libc 库上获取版本号


  1. 直接看 libc.so 的后缀版本号

很明显, libc-2.27.so 后缀为 2.27, 因此 GLIBC 版本号为 2.27

  1. 直接运行 libc.so

GLIBC 的动态库是可以执行运行的, 运行将显示版本号以及版权信息, 可以看到 版本号也是 2.27

  1. 同 2, 获取版本号

GLIBC 库加上 --version 同样显示版本号, 我们可以看到打印的信息和直接运行的信息是一致的.

3 GNU_LIBC_VERSION


标记 GLIBC 版本号的变量为 GNU_LIBC_VERSION, 直接查看它即可

getconf GNU_LIBC_VERSION

注意我们还有另外一个变量, 也可以类似的获取到 GLIBC PTHREAD 版本号, GNU_LIBPTHREAD_VERSION, 不过多数情况下, 他与 GLIBC 版本号是一致的.

getconf GNU_LIBPTHREAD_VERSION

在 Linux 上实现 pThreads 的 NPTL 项目是一个单独的项目, 最初添加内核支持并提供自己的库. 当它足够稳定时, 就会合并为glibc.
我们发行版一般使用的 GLIBC 都是 stable 版本, 因此我认为这两个版本在所有合理的最新安装上都是相同的.

4 gnu_get_libc_version


GLIBC 中内置了一些信息标记版本号, 用来在程序中可以获取到 GLIBC 的版本号. 这是一个字符串, 因为一些高级的特性是 GLIBC 高版本才支持的, 因此用户的程序可能经常要看版本号来执行不同的操作和处理.
gnu_get_libc_version 和 gnu_get_libc_release 就是这样的内置信息, 我们可以通过 man 手册来获取详细信息.

// cat get_glibc_version.c
#include <gnu/libc-version.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])

        printf("GNU libc version: %s\\n", gnu_get_libc_version());
        printf("GNU libc release: %s\\n", gnu_get_libc_release());

        return EXIT_SUCCESS;

5 查看发行版安装的软件包版本


发行版打包的软件包一般都是有版本号后缀的, 因此查看我们发行版安装的 GLIBC 包的名字, 就可以知道版本号.

比如 Ubuntu 可以使用 dpkg -l 查看安装的软件版本

同样 Centos 也可以使用 rpm -q glibc 查看对应软件包的名称及版本.

6 参考资料


Linux: Check the glibc version


以上是关于Linux(CentOS)GLIBC出错补救方式的主要内容,如果未能解决你的问题,请参考以下文章

Linux CentOS6升级glibc库过程

Linux(Ubuntu/CentOS) 下查看 GLIBC 版本

Linux(Ubuntu/CentOS) 下查看 GLIBC 版本

阿里云服务器Linux Glibc漏洞补丁各个系统版本解决方案

centos怎么看glibc版本 Linux查看glibc版本方法

GLIBC_2.14 not found