zoukankan      html  css  js  c++  java
  • Linux升级C基本运行库CLIBC

    在你准备升级GLIBC库之前,你要好好思考一下,

    你真的要升级GLIBC么?

    你知道你自己在做什么么?

    glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现...

    总的来说,不说运行在linux上的一些应用,或者你之前部署过的产品,就是很多linux的基本命令,比如cp, rm, ls, mv, ssh, scp之类,命令都得依赖于它

    网上很多人有惨痛教训,升级失败后系统绝大部分命令无法运行,系统退出后无法重新进入。。。。。。

    对于CentOS这样的系统,为了追求稳定性(这个值得商榷)往往各种库版本都很低,比如6.5甚至7.0自带的还是glibc2.12, 而ubuntu 14.04带glibc2.19

    我遇到问题的系统是CentOS 5.9,通过查看发现系统自带的GLIBC版本是2.5,而开发的程序运行需要GLIBC版本达到2.11,因此就得手动升级GLIBC。

    第一次首先是下载GLIBC_2.12编译安装,但是安装报错,于是再尝试下载GLIBC_2.11编译安装,还是继续报错,通过查找资料得到结果应该是系统版本太低,不支持安装太高版本的GLIBC,于是下载GLIBC_2.10的编译安装,结果成功了,但是无法满足程序要求的GLIBC版本达到2.11,有两个解决方法:修改程序代码要求GLIBC版本达到2.10即可运行;更换更高版本的CentOS系统,推荐6.3以上的,自带的GLIBC都是2.12的了。

    首先查看先有的情况,在CentOS5.9下


    [root@localhost ~]# ll /lib64/libc.so.6
    lrwxrwxrwx 1 root root 11 Aug 27 2014 /lib64/libc.so.6 -> libc-2.5.so
    [root@localhost ~]# strings /lib64/libc.so.6 |grep GLIBC
    GLIBC_2.2.5
    GLIBC_2.2.6
    GLIBC_2.3
    GLIBC_2.3.2
    GLIBC_2.3.3
    GLIBC_2.3.4
    GLIBC_2.4
    GLIBC_2.5
    GLIBC_PRIVATE

    libc.so.6是一个软连接,当前的glibc是2.5版本,开发的程序问题是GLIBC_2.7和GLIBC_2.11找不到的问题,所以需至少升级到2.11,前面说了,2.11安装失败,于是安装2.10吧

    对于低版本glibc,还有glibc-linuxthreads-2.x需要编译,可参考很多网上文档,但2.10没有,所以不用了


    [root@localhost ~]# wget http://ftp.gnu.org/gnu/glibc/glibc-2.10.1.tar.gz

    [root@localhost ~]# wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.10.1.tar.gz

    [root@localhost ~]# tar -xvf glibc-2.10.1.tar.gz

    [root@localhost ~]# tar -xvf glibc-ports-2.10.1.tar.gz

    [root@localhost ~]# mv glibc-ports-2.10.1 glibc-2.10.1/ports

    [root@localhost ~]# mkdir glibc-build-2.10.1

    [root@localhost ~]# cd glibc-build-2.10.1

    [root@localhost ~]# ../glibc-2.10.1/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

    [root@localhost ~]# make

    [root@localhost ~]# make install


    如果提示install成功,去看glibc所在的共享库:


    [root@localhost ~]# ll /lib64/libc*
    可以看到2.5的旧库文件还在,多了2.10版本的库文件,而且软链接文件全部指向了2.10版本。


    -rwxr-xr-x 1 root root 8313772 Jun 4 12:10   /lib64/libc-2.10.1.so
    -rwxr-xr-x 1 root root 1720712 Jan 28 01:33  /lib64/libc-2.5.so
    lrwxrwxrwx 1 root root 14 May 25 15:02        /lib64/libcap.so.1 -> libcap.so.1.10
    -rwxr-xr-x 1 root root 17384 Mar 15 2007      /lib64/libcap.so.1.10
    -rwxr-xr-x 1 root root 197744 Jan 28 01:33   /lib64/libcidn-2.5.so
    lrwxrwxrwx 1 root root 14 Jun 2 14:31           /lib64/libcidn.so.1 -> libcidn-2.5.so
    lrwxrwxrwx 1 root root 17 May 26 15:40       /lib64/libcom_err.so.2 -> libcom_err.so.2.1
    -rwxr-xr-x 1 root root 10096 Sep 18 2014      /lib64/libcom_err.so.2.1
    -rwxr-xr-x 1 root root 109360 Jun 4 12:10          /lib64/libcrypt-2.10.1.so
    -rwxr-xr-x 1 root root 45728 Jan 28 01:33          /lib64/libcrypt-2.5.so
    -rwxr-xr-x 1 root root 1369312 May 13 04:58    /lib64/libcrypto.so.0.9.8e
    lrwxrwxrwx 1 root root 19 May 26 15:40          /lib64/libcrypto.so.6 -> libcrypto.so.0.9.8e
    lrwxrwxrwx 1 root root 18 Jun 4 12:10             /lib64/libcrypt.so.1 -> libcrypt-2.10.1.so
    lrwxrwxrwx 1 root root 14 Jun 4 12:10             /lib64/libc.so.6 -> libc-2.10.1.so

    [root@localhost ~]# strings /lib64/libc.so.6 |grep GLIBC

    GLIBC_2.2.5
    GLIBC_2.2.6
    GLIBC_2.3
    GLIBC_2.3.2
    GLIBC_2.3.3
    GLIBC_2.3.4
    GLIBC_2.4
    GLIBC_2.5
    GLIBC_2.6
    GLIBC_2.7
    GLIBC_2.8
    GLIBC_2.9
    GLIBC_2.10
    GLIBC_PRIVATE

    到这里就成功更新了GLIBC,需要注意的是整个安装编译过程时间比较长,需要耐心等候。

  • 相关阅读:
    将对象转成 json 以及 将字符串 hash(SHA1) 加密
    Model First 开发方式
    DataSet结果转模型类
    Table 类(数据表基类)
    只返回数据表的部分字段(不建类)
    修改数据表部分字段方法封装-及-动态生成对象并动态添加属性
    封装方法:通过方法名调用类内的方法
    同步 VS 异步
    使用 Lambda表达式替换使用 ElemMatch 的方式查询集合类型的字段是否符合某条件
    使用Newtonsoft.Json将数据导出至Json文件
  • 原文地址:https://www.cnblogs.com/fjping0606/p/4551477.html
Copyright © 2011-2022 走看看