Linux下源码编译gcc指定版本

gcc是linux机器上的默认编译工具,但在有些时候版本不符合开发需求,就需要从源码编译相应版本的gcc,但是如果在离线断网环境下,需要修改一下默认的编译步骤,下面总结了整个编译步骤。
首先你得有一个编译器才能编译编译器

1. 下载GCC源码并解压

wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
tar -zxvf gcc-9.3.0.tar.gz

这里我选择了gcc-9.3.0版本

2. 下载依赖文件

方式一:联网环境下直接用gcc自带的配置文件下载依赖包即可

cd gcc-9.3.0
./contrib/download_prerequisites

方式二:断网环境下手动下载并解压依赖包到相应目录

# 1. 查看配置文件`./contrib/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'
# 2. 手动下载以上几个包(以下链接注意要改版本号)
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/gmp-6.1.0.tar.bz2
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.bz2
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/isl/isl-0.18.tar.bz2
# 3. 解压以上4个包
tar -xjvf gmp-6.1.0.tar.bz2 && mv gmp-6.1.0 gmp
tar -xjvf mpfr-3.1.4.tar.bz2 && mv mpfr-3.1.4 mpfr
tar -xzvf mpc-1.0.3.tar.gz && mv mpc-1.0.3 mpc
tar -xjvf isl-0.18.tar.bz2 && mv isl-0.18 isl

3. 编译前配置(configure)

mkdir build && cd build
../configure --enable-threads=posix --enable-checking --disable-multilib --enable-languages=c,c++,fortran,lto --prefix=/opt/envs/gcc-9.3.0 --host=x86_64-pc-linux-gnu

这里我选择安装目录为/opt/envs/gcc-9.3.0, 建议设置自定义安装目录,后续可以方便同时管理或切换多个gcc版本

4. 编译并安装(看机器配置尽可能多线程,gcc编译很耗时)

make -j4 && make install 

5. 设置GCC到环境遍历

export GCC_ROOT=/opt/envs/gcc-9.3.0
export PATH=${GCC_ROOT}/bin:${PATH}
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}/lib64:${LD_LIBRARY_PATH}

刷新终端尝试运行gcc -v, 查看gcc版本是否切换成功

如果编译工程时显示gcc未切换成功或者编译找不到正确头文件,则在CMAKE头部配置一下:

SET(CMAKE_C_COMPILER "/opt/envs/gcc-9.3.0/bin/gcc")
SET(CMAKE_CXX_COMPILER "/opt/envs/gcc-9.3.0/bin/g++")
posted @ 2023-10-16 20:03  Lee-zq  阅读(1569)  评论(0编辑  收藏  举报