Centos下手动编译gcc

centos7下编译gcc

为什么有这个需求?是因为编译TensorRT需要glib,centos自带的库不支持。因为是在服务器上开发,为了避免我安装的软件影响到其它人,所以我选择编译源码而不是yum安装。

centos信息:Linux username 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

准备条件

  • wget https://gmplib.org/download/gmp/gmp-6.2.0.tar.lz(为了解压这个软件还需要安装sudo yum install lziplzip -d gmp-6.2.0.tar.lz)
  • wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.zip
  • wget http://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
  • wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

安装

安装路径自定义为:/home/user_name/gcc9:根据自己的需要自动设置,make使用16核心,根据自己的电脑配置设置。

  • 安装gmp
    • cd gmp-6.2.0
    • ./configure --prefix=/home/user_name/gcc9
    • make -j16&&make install
  • 安装mpfr
    • ·cd mpfr-4.1.0·
    • ./configure --prefix=/home/user_name/gcc9 --with-gmp-include=/home/user_name/gcc9/include/ -- with-gmp-lib=/home/user_name/gcc9/lib/
    • make -j16&&make install
  • 安装mpc
    • cd mpc-1.1.0
    • ./configure --prefix=/home/user_name/gcc9 --with-gmp-include=/home/user_name/gcc9/include/ -- with-gmp-lib=/home/user_name/gcc9/lib/
    • make -j16&&make install
  • 安装isl
    • cd isl-0.18
    • ./configure --prefix=/home/user_name/gcc9 --with-gmp-prefix=/home/user_name/gcc9
    • make -j16&&make install
  • 安装gcc
    • cd gcc-9.1.0
    • ./configure --prefix=/home/user_name/gcc9 --with-gmp=/home/user_name/gcc9/ --with-gmp-lib=/ho me/user_name/gcc9/lib/ --with-gmp-include=/home/user_name/gcc9/include --disable-multilib:注意,禁用了32位的库。因为我用不到,否则这里会报错。
    • export LD_LIBRARY_PATH="/home/user_name/gcc9/lib/":${LD_LIBRARY_PATH}:添加上一步编译的libsil.so动态库,否则会提示找不到此库。
    • make -j16&&make install:编译安装。
    • export LD_LIBRARY_PATH=/home/user_name/gcc9/lib/:${LD_LIBRARY_PATH}

升级glibc库(危险操作)

此库安装有点不同,需要LD_LIBRARY_PATH不能包含当前路径。这里说的当前路径可能是gcc指定的路径,让这个环境变量为空即可。另外改代码编译不能在代码目录下,如果你创建自己的目录就没问题了。

  • wget https://mirrors.tuna.tsinghua.edu.cn/gnu/glibc/glibc-2.32.tar.xz
  • tar xJvf glibc-2.32.tar.xz&&cd glibc-2.32&mkdir build&&cd build
  • ../configure --prefix=/usr/local/glic-2.32:(不能直接安装在/usr/local下)
  • make -j8&sudo make install
    需要glibc里面的so请直接将此so导入到需要的当前环境变量,否则会出现命令段错误。

一键安装

一键安装脚本

#!/bin/bash
HOME_PATH=${HOME}
SAVE_PATH=${HOME}/Source

gmp_compressed=gmp-6.2.0.tar.xz
mpdr_compressed=mpfr-4.1.0.zip
mpc_compressed=mpc-1.2.0.tar.gz
isl_compressed=isl-0.18.tar.bz2
gcc_compressed=gcc-7.5.0.tar.xz

gcc_path=`echo ${gcc_compressed}|grep -Eo "\<[a-z].+[0-9]"`
echo "You will download file $gmp_compressed"
echo "You will download file $gmp_compressed"
echo "You will download file $mpdr_compressed"
echo "You will download file $isl_compressed"
echo "You will download file $gcc_compressed"
echo "You choose gcc version:${gcc_path}"
function dep_zip(){
    SAVE_PATH=${1}
    if [ ! -d ${SAVE_PATH} ];then
        mkdir ${SAVE_PATH}
    fi

        if [ ! -f ${SAVE_PATH}/${gmp_compressed} ];then
        wget -c https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/${gmp_compressed} -P ${SAVE_PATH}
        else
                echo "File ${gmp_compressed} had been download!"
        fi
        if [ ! -f ${SAVE_PATH}/${mpdr_compressed} ];then
        wget -c https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/${mpdr_compressed} -P ${SAVE_PATH}
        else
                echo "File ${mpdr_compressed} had been download!"
        fi

        if [ ! -f ${SAVE_PATH}/${mpc_compressed} ];then
        wget -c https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/${mpc_compressed} -P ${SAVE_PATH}
        else
                echo "File ${mpc_compressed} had been download!"
        fi
        if [ ! -f ${SAVE_PATH}/${isl_compressed} ];then
        wget -c ftp://gcc.gnu.org/pub/gcc/infrastructure/${isl_compressed} -P ${SAVE_PATH}
        else
                echo "File ${isl_compressed} had been download!"
        fi
        if [ ! -f ${SAVE_PATH}/${gmp_compressed} ];then
        wget -c https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/${gcc_path}/${gcc_compressed} -P ${SAVE_PATH}
        else
                echo "File ${gmp_compressed} had been download!"
        fi
}
echo "Download need software into ${SAVE_PATH}!"
dep_zip ${SAVE_PATH}

default_install_path=/usr/local/${gcc_path}
install_path=${default_install_path}
read -p "Please input install path,default is:(${default_install_path}) [Y/y]: " choose
if [ "${choose}" == "y" -o "${choose}" == "Y" -o "${choose}" == "" ];then
    echo "You Choose install path:${install_path}"
else
    read -p "Please input your install path: " install_path
    echo "Your input install path is:${install_path}"
fi

echo "==> begin to install gmp!"
echo "file ${SAVE_PATH}/${gmp_compressed}"
tar -xJvf ${SAVE_PATH}/${gmp_compressed} -C /tmp
current_path=`echo ${gmp_compressed}|grep -Eo "\<[a-z].+[0-9]"`
cd /tmp/${current_path}
echo "Current Path: /tmp/${current_path}"
./configure --prefix=${install_path}
make -j8
sudo make install
echo "==> gmp module installed!"

echo "==> begin to install mpfr-4.1.0!"
tar -xJvf ${SAVE_PATH}/${mpdr_compressed} -C /tmp
current_path=`echo ${mpdr_compressed}|grep -Eo "\<[a-z].+[0-9]"`
cd /tmp/${current_path}
./configure --prefix=${install_path} --with-gmp-include=${install_path}/include/ -- with-gmp-lib=${install_path}/lib/
make -j8
sudo make install
echo "==> mpfr-4.1.0 module installed!"

echo "==> begin to install ${mpc_compressed}!"
tar -xJvf ${SAVE_PATH}/${mpc_compressed} -C /tmp
current_path=`echo ${mpc_compressed}|grep -Eo "\<[a-z].+[0-9]"`
cd /tmp/${current_path}
./configure --prefix=${install_path} --with-gmp-include=${install_path}/include/ -- with-gmp-lib=${install_path}/lib/
make -j8
sudo make install
echo "==> ${mpc_compressed} install finished!"

echo "==> ${isl_compressed} module begin to install!"
tar -xJvf ${SAVE_PATH}/${isl_compressed} -C /tmp
current_path=`echo ${isl_compressed}|grep -Eo "\<[a-z].+[0-9]"`
cd /tmp/${current_path}
./configure --prefix=${install_path} --with-gmp-prefix=${install_path}
make -j8
sudo make install
echo "==> isl-0.18 module installed!"

echo "==> ${gcc_compressed} begin to install!"
tar -xJvf ${SAVE_PATH}/${gcc_compressed} -C /tmp
current_path=`echo ${isl_compressed}|grep -Eo "\<[a-z].+[0-9]"`
cd /tmp/${current_path}

./configure --prefix=${install_path} --with-gmp=${install_path} --with-gmp-lib=${install_path}/lib --with-gmp-include=${install_path}/include --with-isl-lib=${install_path}/lib/ --with-isl-include=${install_path}/include  --disable-multilib
make -j8
sudo make install
echo "==> ${gcc_compressed} module installed!"
echo "==> Add env variable"

zsh_env=${HOME}/.zshrc
bash_env=${HOME}/.bashrc
if [ -f ${zsh_env} ];then
        check_var=`grep ${gcc_path} ${zsh_env}`
        if [ "${check_var}" == "" ];then
        sed -i "\$a PATH=\${PATH}:${install_path}/bin" ${zsh_env}
        fi
    source ${zsh_env}
else
        check_var=`grep ${gcc_path} ${bash_env}`
        if [ "${check_var}" == "" ];then
            sed -i "\$a PATH=\${PATH}:${install_path}/bin" ${bash_env}
        fi
        source ${bash_env}
fi


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值