项目开放过程中,要使用第三方公司的库,他们是在ubuntu18.04上编译的,使用的是glibc2.28版本。

目前本公司的环境是centos7,glibc是2.17版本。因此,要使用第三方的库,就得升级本公司的glibc。

进行glibc的编译前,需要一些准备工作。

解压glibc 后,阅读INSTALL文件,查看需要升级或者安装一些依赖软件。

本机上,gcc 和make 需要手动安装。

其他的yum 安装,就符合版本要求了,yum install texinfo python3 bison libselinux-devel audit-devel gd-devel

gcc需要安装4.9以上的版本,make需要安装4.0以上的版本。

gcc的安装

centos7默认的gcc版本是4.8.5,需要安装大于4.9以上的版本。

gcc4.8已完全支持c++11

gcc6.1已完全支持c++14

gcc7以上的版本完全支持c++17

因为涉及用到一些c++17的特性,故下载gcc7.5.0版本。

tar -xvf gcc-7.5.0.tar.gz

cd gcc-7.5.0

./contrib/download_prerequisites 下载几个依赖包。

不能下载的,可以用wget下载tar包放在gcc-7.5.0下面。

wget https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.5.0.tar.gz
wget https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2
wget https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
wget http://isl.gforge.inria.fr/isl-0.18.tar.bz2

再执行下./contrib/download_prerequisites

./configure --prefix=/opt/gcc_build/ --enable-checking=release --enable-languages=c,c++ --disable-multilib

make -j10

make install

或者自己编译这些,如下图:

1.安装gmp
tar -xvf gmp-6.1.2.tar.bz2
cd gmp-6.1.2
./configure --prefix=/home/gmp_build
make -j
make install

2.安装mpfr
tar -zxvf mpfr-3.1.5.tar.gz
cd mpfr-3.1.5
./configure --prefix=/home/mpfr_build --with-gmp=/home/gmp_build
make -j
make install

3.安装mpc
tar -zxvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure -prefix=/home/mpc_build -with-gmp=/home/gmp_build -with-mpfr=/home/mpfr_build
make -j
make install

4.安装isl
tar -xvf isl-0.18.tar.bz2
cd isl-0.18
./configure --prefix=/home/isl_build --with-gmp=/home/gmp_build
make
make install

5.安装gcc
tar -zxvf gcc-7.5.0.tar.gz
cd gcc-7.5.0
./configure --prefix=/home/gcc_build --enable-checking=release --enable-languages=c,c++ --disable-multilib  --with-gmp=/home/gmp_build --with-mpfr=/home/mpfr_build --with-mpc=/home/mpc_build  --with-isl=/home/isl_build

export LD_LIBRARY_PATH=/home/gmp_build/lib:/home/mpc_build/lib:/home/mpfr_build/lib:/home/isl_build/lib:$LD_LIBRARY_PATH

make -j
make install

看了一些网友的博客,大多就是不配置--prefix,那么就直接安装到/usr/local下了,原先的gcc4.8.5就直接覆盖了。也不知道有没有非法覆盖?

还有就是直接拷贝到/usr/下。

还有就是建立软链接,不过之前的gcc4.8.5就没了,也没卸载。

我是写了一个脚本(就一行)

export PATH=/opt/gcc_build/bin:$PATH

把这个脚本放在/etc/proflie.d/下。

执行source /etc/profile.d/gcc7.5.0.sh

gcc -v 显示的是7.5.0版本。

安装make

make安装的是4.2.1版本

tar -xvf make-4.2.1.tar.gz

cd make-4.2.1

./configure  --prefix=/opt/make_build

make -j10

make install

不费劲了,直接把生成的拷贝到/usr目录下(bin下也就一个文件)

安装glibc

glibc 是linux 底层的API库,升级失败,将导致系统异常。

我是先编译在/opt/glibc_build下,没问题,再编译到/usr下。

tar -xvf glibc-2.28.tar.gz

cd glibc-2.28/

mkdir glibc_build
cd glibc_build

../configure --prefix=/opt/glibc_build --with-headers=/usr/include --with-binutils=/usr/bin

一定要看看config.log 有什么缺的,再安装下对应的版本。

make -j10

make install 

没啥问题。

../configure --prefix=/usr --with-headers=/usr/include --with-binutils=/usr/bin

make -j10

make install 

如果报错
/usr/bin/perl scripts/test-installation.pl /tmp/glibc-2.31/build/ 
/usr/bin/ld: cannot find -lnss_test2
...

请修改scripts/test-installation.pl,新增如下内容

报错 undefined reference to '_nsl_default_nss@GLIBC_PRIVATE'

请加--enable-obsolete-nsl

../configure --prefix=/root/glibc_build --with-headers=/usr/include --with-binutils=/usr/bin --enable-obsolete-nsl

make -j10

make install

我的成功了

你们呢?

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐