centos7 升级gcc和glibc
-
可以通过strings /lib64/libc.so.6 | grep GLIBC 查询版本
-
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可以查看版本是否成功
-
升级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
-
安装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
-
额外,到现在运行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以上的版本了
-
安装后的问题
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)