centos7升级glibc版本、运行node18

centos7 升级gcc和glibc

  1. 可以通过strings /lib64/libc.so.6 | grep GLIBC 查询版本

  2. gcc

    1. yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
        # 如果1安装不上
        1.1 yum list installed | grep "scl"
        1.2 yum remove centos-release-scl.noarch
            yum remove centos-release-scl-rh.noarch
        1.3 yum install -y centos-release-scl centos-release-scl-rh
        1.4 yum install -y scl-utils scl-utils-build
        1.5 yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
            scl enable devtoolset-8 bash
            echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile
            source /etc/profile
    
    2. wget https://mirrors.cloud.tencent.com/gnu/gcc/gcc-8.5.0/gcc-8.5.0.tar.gz
        tar -zxvf gcc-8.5.0.tar.gz
        cd gcc-8.5.0
        yum -y install bzip2
        yum install bison
        2.1 ./contrib/download_prerequisites
            这个可能下载不动, 可以直接打开download_prerequisites
            将里面的地址ftp改成https或者直接通过浏览器下载或者wget下载,
            需要下载的四个文件和版本在download_prerequisites有
            gmp='gmp-6.1.0.tar.bz2'
            mpfr='mpfr-3.1.4.tar.bz2'
            mpc='mpc-1.0.3.tar.gz'
            isl='isl-0.18.tar.bz2'
            base_url='https://gcc.gnu.org/pub/gcc/infrastructure/'
            wget --no-check-certificate https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
            依次下载上面四个......
        2.2 ./configure -enable-checking=release \
            -enable-languages=c,c++ -disable-multilib
            # --prefix=/usr/local 安装目录
            # 如果有报错
              configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
              将./contrib/download_prerequisites下载包解压安装, 按照 gmp->mpfr->mpc顺序
              安装方式:
                  tar -xvf xx
                  cd xx
                  .configure
                  make && make install
               成功后再次执行2.2
        2.3 make 
            可以利用多核 make -j 4 后面的数字不要超过cpu核心
            make install 
            gcc -v可以查看版本是否成功
    
  3. 升级make

    wget --no-check-certificate https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
    tar -xzvf make-4.3.tar.gz 
    cd make-4.3
    ./configure  --prefix=/usr/local/make4.3
    make
    make install
    cd /usr/bin/
    mv make make.bak
    ln -sv /usr/local/make4.3/bin/make /usr/bin/make
    
  4. 安装GLIBC_2.28

    wget --no-check-certificate https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
    tar -xzvf glibc-2.28.tar.gz
    cd glibc-2.28
    mkdir build && cd build
    ../configure --prefix=/usr \
         --disable-profile \
        --enable-add-ons \
        --with-headers=/usr/include\
        --with-binutils=/usr/bin
    make
    make install
    	如果出现以下报错
    	make[1]: *** [Makefile:111: install] Error 1
    	make[1]: Leaving directory '/data/software/glibc-2.28'
    	make: *** [Makefile:12: install] Error 2
        这个错误没有影响
    
    # 查询版本成功
    strings /lib64/libc.so.6 | grep GLIBC
    
  5. 额外,到现在运行node>18的版本还是不会成功

    node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
    node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
    node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
    # 要用新生成的动态库替换旧版动态库
    find / -name "libstdc++.so*" 查找新版动态库
    # /xx/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25
    cd /xx/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs
    cp libstdc++.so.6.0.25 /usr/lib64
    cd /usr/lib64
    mv libstdc++.so.6  libstdc++.so.6.bak
    ln -s libstdc++.so.6.0.25 libstdc++.so.6
    strings /usr/lib64/libstdc++.so.6 | grep GLIBC
    

    到此在centos7上可以运行node18以上的版本了
    在这里插入图片描述

  6. 安装后的问题
    5.1 sudo命令带选项会异常, 比如sudo -i等等, 输出/var/tmp/sclXXXXXX: line 8: -i: command not found
    这是因为现在的sudo不是原来的sudo,可用which sudo查看此sudo的命令, 此sudo带选项参数会报错, 临时的解决方案是是用/bin/sudo
    5.2 编码有关的异常, echo $LANG还是会显示en_US.UTF-8, 但是系统默认编码实际不是这个了,在运行maven打包没指定utf-8编码或者java代码中"test".getBytes()没指定编码都会异常, java -XshowSettings:properties -version可查看默认的file.encoding
    在这里插入图片描述
    这个问题可以通过localedef -i en_US -f UTF-8 en_US.UTF-8解决。
    这个编码异常还会导致连接到终端的时候报如下警告
    Last login: Fri May 17 13:07:25 2024 from x.x.x.x
    -bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8)

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值