• gcc编译升级&&解决GLIBC_2.18 not found


    升级GLIBC前,需要将默认的gcc4.85升级,而升级gcc走编译有强依赖包,如下操作即可完成升级。

    0、gcc 与 g++ 区别

    gcc【全称GNU Compiler Collection】 是gnu的c编译器
    g++ 是c++编译器

    1、 升级gcc

    升级gcc有两种方法,1)yum 安装;2)编译安装。当yum安装有问题时,走编译安装

    1.1 yum安装 gcc

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    yum clean all && yum makecache
    
    yum -y install centos-release-scl
    yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
    
    scl enable devtoolset-7 bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。

    如果要长期使用gcc 7.3的话:

    echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile
    
    • 1

    验证gcc版本:

    gcc  --version
    
    • 1

    参考:https://www.vpser.net/manage/centos-6-upgrade-gcc.html

    1.2 编译安装 gcc

    gcc编译安装存在依赖关系,需要按以下顺序安装:

    • gmp 【gmp-5.0.1.tar.gz】
    • mpfr(GNU镜像) 或 官网 【mpfr-3.1.5.tar.gz】
    • mpc 【mpc-1.0.3.tar.gz】
    • gcc 【gcc-4.9.2】

    1)安装 gmp: http://ftp.gnu.org/gnu/gmp/

    wget http://ftp.gnu.org/gnu/gmp/gmp-5.0.1.tar.gz
    tar -xvzf gmp-5.0.1.tar.gz
    cd gmp-5.0.1/ && mkdir temp && cd temp/
    ../configure --prefix=/usr/local/gmp-5.0.1
    make && sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2)安装 mpfr:http://ftp.gnu.org/gnu/mpfr/

    wget http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.5.tar.gz
    tar -xvzf mpfr-3.1.5.tar.gz
    cd mpfr-3.1.5/ && mkdir temp && cd temp/
    ../configure --prefix=/usr/local/mpfr-3.1.5 --with-gmp=/usr/local/gmp-5.0.1
    make && sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3)安装 mpc:http://ftp.gnu.org/gnu/mpc/

    wget http://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
    tar -xvzf mpc-1.0.3.tar.gz
    cd mpc-1.0.3/ && mkdir temp && cd temp/
    ../configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.5
    make && sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5

    安装三个依赖库后,需要把库路径添加到/etc/ld.so.conf文件中:

    vim /etc/ld.so.conf

    /usr/local/gmp-5.0.1
    /usr/local/mpfr-3.1.5
    /usr/local/mpc-1.0.3
    
    • 1
    • 2
    • 3

    添加完路径后,执行生效,将新添加的路径进入动态cache

    ldconfig
    
    • 1

    4)安装 gcc: http://ftp.gnu.org/gnu/gcc/

    http://ftp.gnu.org/gnu/gcc/gcc-4.9.2.tar.gz
    tar -jxvf gcc-4.9.2.tar.gz
    cd gcc-4.9.2/ && mkdir output && cd output/
    ../configure --prefix=/usr/local/gcc-4.9 --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.3
    make -j4 && sudo make install 【该过程耗时约 1 h 】
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5)验证安装

    /usr/local/gcc-4.9/bin/gcc  --version
    
    • 1

    6)添加软链接

    cd /bin/
    sudo mv gcc gcc_4.85 
    sudo mv g++ g++_4.85
    sudo mv cpp cpp_4.85
    sudo mv c++ c++_4.85
    .. ..
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    sudo ln -s /usr/local/gcc-4.9/bin/gcc  /bin/gcc
    sudo ln -s /usr/local/gcc-4.9/bin/G++  /bin/g++
    sudo ln -s /usr/local/gcc-4.9/bin/cpp  /bin/cpp
    sudo ln -s /usr/local/gcc-4.9/bin/c++  /bin/c++
    ... ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    g++  --version
    
    • 1

    2 升级 GLIBC_2.18

    1)查看 当前版本

    ldd --version
    
    • 1
    ldd (GNU libc) 2.17
    Copyright (C) 2012 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    Written by Roland McGrath and Ulrich Drepper.
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2)将 gcc 从 4.85 版本升级,如上步骤

    3)升级glibc

    sudo wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
    tar -zxvf glibc-2.18.tar.gz
    cd glibc-2.18
    mkdir build
    cd build
    
    ../configure   --prefix=/usr  --disable-profile --enable-add-ons  --with-headers=/usr/include  --with-binutils=/usr/bin
    
    make -j4 && sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    # 验证版本
    ldd  --version
    strings   /lib64/libc.so.6  | grep '^GLIBC_'
    
    • 1
    • 2
    • 3
  • 相关阅读:
    Android 使用 ToneGenerator 实现按键提示音
    Redis为什么能抗住10万并发?揭秘性能优越的背后原因
    【HarmonyOS】鸿蒙开发之Video组件——第3.7章
    Nginx网络服务之监控模块
    数据结构题目收录(二十三)
    通过mybatis自定义参数类型转换器,进行数据库字段加密脱敏
    django-ORM
    S32DS踩坑日记五-bootloader跳转APP时触发DefaultISR
    Matlab,Python(Linux):mat文件无法被linux的loadmat识别
    windows的powershell中apt命令的替换命令
  • 原文地址:https://blog.csdn.net/Sunny_Future/article/details/126376561