• centons6升级gcc和glibc版本


    一、先升级gcc

    这里配置yum源来升级

    centos6系列更换阿里yum源

    1.首先备份原来的cent os官方yum源

    cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

    2.获取阿里的yum源覆盖本地官方yum源

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

    3.清理yum缓存,并生成新的缓存

    yum clean all
    yum makecache

    二、升级glibc版本到指定版本,也可以自己下载别的版本

     1)产生原因
    是由于Linux系统的glibc版本太低,而软件编译时使用了较高版本的glibc引起的!

    查看系统glibc支持的版本
    [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_2.11
    GLIBC_2.12
    GLIBC_PRIVATE
     
    [root@localhost ~]# rpm -qa |grep glibc
    glibc-common-2.12-1.209.el6_9.2.x86_64
    glibc-2.12-1.209.el6_9.2.x86_64
    glibc-headers-2.12-1.209.el6_9.2.x86_64
    glibc-devel-2.12-1.209.el6_9.2.x86_64
     
    可以看到最高只支持2.12版本。现在需要将glibc支持的版本升级到GLIBC_2.14
     
    2)升级glibc支持的版本到GLIBC_2.14
     
    到http://www.gnu.org/software/libc/下载最新版本,这里下载了glibc-2.14.tar.xz 这个版本,解压到/usr/local/src目录下
    百度云盘下载地址:https://pan.baidu.com/s/1YGia4YD45s42xMq9VapJow
    提取密码:nejp
        
    [root@uatblockchain01 ~]# cd /usr/local/src/
    [root@uatblockchain01 src]# ll
    total 9888
    -rw-r--r-- 1 root root 10122492 Apr  8 03:21 glibc-2.14.tar.xz
    [root@uatblockchain01 src]# tar -vxf glibc-2.14.tar.xz
        
    创建/var/VMdisks,将解压后的glibc-2.14移到/var/VMdisks目录下
    [root@uatblockchain01 src]# mkdir -p /var/VMdisks
    [root@uatblockchain01 src]# mv glibc-2.14 /var/VMdisks/
        
    在glibc源码目录建立构建目录,并cd进入构建目录
    [root@uatblockchain01 src]# cd /var/VMdisks/glibc-2.14/
    [root@uatblockchain01 glibc-2.14]# mkdir build && cd build/
    [root@uatblockchain01 build]# ../configure --prefix=/usr/local/glibc-2.14
    [root@uatblockchain01 build]# make -j4
    [root@uatblockchain01 build]# make install
     
    执行make install时出现:

    /media/linux_install_ai/glibc-2.14/build/elf/ldconfig:

    Can't open configuration file/opt/glibc-2.14/etc/ld.so.conf: No such file or directory

    make[1]: Leaving directory`/media/linux_install_ai/glibc-2.14'

    [root@www build]# find / -name"ld.so.conf"

    /etc/ld.so.conf
    [root@www build]# cp/etc/ld.so.conf /opt/glibc-2.14/etc/
    make install OK!

        
    临时修改环境变量
    [root@uatblockchain01 build]# export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH
    [root@uatblockchain01 build]# echo $LD_LIBRARY_PATH
    /opt/glibc-2.14/lib:
    ================================================================================================
    注意:
    这里环境变量要如上一样临时修改,决不能写在/etc/profile文件里,并source使之生效!否则会导致某些shell命令执行不了。
    比如:
    [root@uatblockchain01 build]# vim /etc/profile
    .......
    export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH
    [root@uatblockchain01 build]# source /etc/profile
     
    这样,将会出现一些命令卡住的现象。
    [root@uatblockchain03 ~]# java -version      //一直卡着不动
     
    [root@uatblockchain03 ~]# su - app           //一直卡着不动
     
    解决办法:
    将上面那条配置从/etc/profile文件里删除,然后source使之生效!
    重新登录机器即可解决!
    ================================================================================================
     
    如果是在普通用户下,就修改普通用户下的环境变量。比如这里我是在app账号下启动的leveldb程序,那么:
    [app@uatblockchain01 ~]$ export LD_LIBRARY_PATH=/usr/local/glibc-2.14/lib:$LD_LIBRARY_PATH
    [app@uatblockchain01 ~]$ echo $LD_LIBRARY_PATH
    /opt/glibc-2.14/lib:
        
    修改/lib64/libc.so.6的软链接来源,由之前的libc-2.12.so修改为libc-2.14.so
    [root@uatblockchain01 ~]# cd /lib64
    [root@uatblockchain01 ~]# ll libc.so.6
    lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.12.so
        
    [root@uatblockchain01 ~]# ll /usr/local/glibc-2.14/lib/libc-2.14.so
    -rwxr-xr-x 1 root root 9645192 Apr  8 03:28 /usr/local/glibc-2.14/lib/libc-2.14.so
    [root@uatblockchain01 ~]# cp /usr/local/glibc-2.14/lib/libc-2.14.so /lib64/
        
    删除libc-2.12.so之前的软链接
    [root@uatblockchain01 ~]# unlink /lib64/libc.so.6
    或者直接执行
    [root@uatblockchain01 ~]# rm -f /lib64/libc.so.6
    ==============================================================================================
    如果上面删除命令执行后,导致该机器的很多shell命令无法执行!甚至于机器无法登陆!报错如下:
    error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
        
    注意:千万不要关闭当前的终端窗口,因为此时机器可能无法登陆了。只能在当前终端窗口下进行紧急修复:
    [root@uatblockchain01 ~]# ldconfig
      
    原因可能是:前面设置"export LD_LIBRARY_PATH= "有误导致的。
    linux调用so的库文件时,搜素路径为当前路径,再是系统lib目录。
    可能是由于前面提供了一个LD_PRELOAD系统变量来改变这个顺序。
    设置LD_PRELOAD了后,库加载的顺序就改变了。
    搜素路径为:LD_PRELOAD ,当前路径,再是系统lib目录。
    ==============================================================================================
        
    然后做/lib64/libc.so.6新的软链接,软链接到libc-2.14.so
    [root@uatblockchain01 lib64]# ln -s libc-2.14.so /lib64/libc.so.6
    [root@uatblockchain01 lib64]# ll libc.so.6
    lrwxrwxrwx 1 root root 12 Apr  8 03:50 libc.so.6 -> libc-2.14.so
        
    最后再查看系统glibc支持的版本:
    [root@uatblockchain01 lib64]# 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_2.11
    GLIBC_2.12
    GLIBC_2.13
    GLIBC_2.14
    GLIBC_PRIVATE
        
    发现glibc最高可以支持到2.14版本了。
        
    然后再执行leveldb程序,就会发现不会有那个报错了!问题得到解决!
  • 相关阅读:
    为什么大家都说 SELECT * 效率低?
    一个 Java 方法,最多能定义多少参数?
    牛逼哄哄的布隆过滤器,到底有什么用?
    10w+ Excel 数据导入,怎么优化?
    为什么 wait 方法要在 synchronized 中调用?
    使用Redis存储聊天数据的一种方案(使用lua解决原子性问题)
    Linux下安装redis
    Django Rest Framework组件:解析器JSONParser、FormParser、MultiPartParser、FileUploadParser
    API测试之Postman使用全指南(转载)
    Django Rest Framework组件:序列化与反序列化模块Serializer
  • 原文地址:https://www.cnblogs.com/xingyunfashi/p/11805760.html
Copyright © 2020-2023  润新知