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 lzip
–lzip -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