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++")