教程环境
系统为:Debian10.12,其他操作系统大同小异,只是在包管理器命令以及包名上有微小差异
安装方式为:最小化安装
本教程全程使用root用户操作
GCC源码准备
阿里镜像源地址:https://mirrors.aliyun.com/gnu/
GCC阿里云镜像地址:https://mirrors.aliyun.com/gnu/gcc/
大学镜像:
http://mirror.hust.edu.cn/gnu/gcc/
http://mirrors.nju.edu.cn/gnu/gcc/
http://mirrors.ustc.edu.cn/gnu/gcc/
https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/
选择你要的GCC版本版本,下载后会得到一个压缩包,解压并进入解压文件夹
apt-get install -y wget
wget https://mirrors.aliyun.com/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.gz
#gz文件
tar -zxvf gcc-7.4.0.tar.gz
#xz文件
tar -jxvf gcc-7.4.0.tar.xz
编译环境准备
更新源(非更新软件)
apt-get update
安装gcc环境:编译gcc需要gcc环境,编译好后会覆盖之前装的版本,可用于安装指定版本的gcc或者升级/降级gcc
apt-get install -y gcc g++
- 输入 gcc -v有版本信息输出则说明安装成功,g++同理
安装make编译工具环境以及依赖
apt-get install -y automake autoconf libtool make
- 输入make -v有版本信息输出则说明安装成功
补充:build-essential 包是C语言的开发包,包含了gcc、make、gdb和libc函数库等很多工具,后面学习JVM虚拟机的时候看到的,前面出问题可以选择安装这个包
GCC依赖环境安装
方式一
最简单的解决方案是使用download_prerequisites
脚本将GMP,MPFR,MPC和ISL源代码添加到GCC源代码树,这将导致GCC自动为您构建它们,并静态链接到它们。
在gcc解压后的文件夹内输入
./contrib/download_prerequisites
gcc自带脚本会解决所有依赖,包括下载、配置、连接等。如果你这一步非常顺利,最后屏幕输出
All prerequisites downloaded successfully.
则说明配置完成。
但如果中途出了什么问题,请自行百度,因为我输入这条命令后半天一点动静都没有,科学也好,换源也好,都没用。
方式二
根据方式一中的文件,找到依赖包的信息,自行编译安装链接,适合无网络环境
得到依赖包信息,在gcc解压后的文件夹内输入
cat contrib/download_prerequisites
在文件的头部你会得到如下信息,这就是gcc的依赖包以及版本信息
gmp=’gmp-6.1.0.tar.bz2′
mpfr=’mpfr-3.1.4.tar.bz2′
mpc=’mpc-1.0.3.tar.gz’
isl=’isl-0.16.1.tar.bz2′
gmp编译安装
目录地址:https://mirrors.aliyun.com/gnu/gmp/
下载并解压
wget https://mirrors.aliyun.com/gnu/gmp/gmp-6.1.0.tar.bz2
tar -jxvf gmp-6.1.0.tar.bz2
编译安装
cd gmp-6.1.0
./configure --prefix=/usr/local/gmp-6.1.0 --enable-cxx
make -j$(nproc)
make check
make install
- make -j:j后跟CPU核心数量,越大越好,但是不要超过物理核心数量
- make -j$(nproc) ,自动填写最大化核心数量
- –prefix:指定安装路径
- –enable-language:启动某项语言的支持
- –enable-cxx:开启对C、C++的支持
makefile文件成功信息
make编译一旦出错,需要输入make clean
和make distclean
清理上次编译的残留文件
链接共享库
将安装目录下的lib文件夹中的共享库链接到/usr/lib 中
ln -s /usr/local/gmp-6.1.0/lib/libgmp.so /usr/lib/libgmp.so.10
mpfr编译安装
目录地址:https://mirrors.aliyun.com/gnu/mpfr/
下载并解压
wget https://mirrors.aliyun.com/gnu/mpfr/mpfr-3.1.4.tar.bz2
tar -jxvf mpfr-3.1.4.tar.bz2
编译安装
cd mpfr-3.1.4
./configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0
make
make check
make install
链接共享库
ln -s /usr/local/mpfr-3.1.4/lib/libmpfr.so /usr/lib/libmpfr.so
ln -s /usr/local/mpfr-3.1.4/lib/libmpfr.so.4 /usr/lib/libmpfr.so.4
ln -s /usr/local/mpfr-3.1.4/lib/libmpfr.so.4.1.4 /usr/lib/libmpfr.so.4.1.4
- –with-gmp:mpfr需要依赖gmp
mpc编译安装
目录地址:https://mirrors.aliyun.com/gnu/mpc/
下载并解压
wget https://mirrors.aliyun.com/gnu/mpc/mpc-1.0.3.tar.gz
tar -zxvf mpc-1.0.3.tar.gz
编译安装
cd mpc-1.0.3
./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4
make
make check
make install
链接共享库
ln -s /usr/local/mpc-1.0.3/lib/libmpc.so /usr/lib/libmpc.so
ln -s /usr/local/mpc-1.0.3/lib/libmpc.so.3 /usr/lib/libmpc.so.3
ln -s /usr/local/mpc-1.0.3/lib/libmpc.so.3.0.0 /usr/lib/libmpc.so.3.0.0
isl编译安装
目录地址:http://www.mirrorservice.org/sites/sourceware.org/pub/gcc/infrastructure/
下载并解压
wget http://www.mirrorservice.org/sites/sourceware.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2
tar -jxvf isl-0.16.1.tar.bz2
编译安装
cd isl-0.16.1
./configure --prefix=/usr/local/isl-0.16.1 --with-gmp-prefix=/usr/local/gmp-6.1.0
make
make check
make install
- 编译isl是需要依懒gmp库的,旧版本的isl编译选项为–with-gmp,新版本的isl编译参数为–with-gmp-prefix
- 注意此处
--with-gmp-prefix
如果报configure: error: gmp.h header not found
错误,则需要更改为--with-gmp-include=abs_dir_path
加上--with-gmp-lib=abs_dir_path
,
链接共享库
ln -s /usr/local/isl-0.16.1/lib/libisl.so /usr/lib/libisl.so
ln -s /usr/local/isl-0.16.1/lib/libisl.so.15 /usr/lib/libisl.so.15
ln -s /usr/local/isl-0.16.1/lib/libisl.so.15.1.1 /usr/lib/libisl.so.15.1.1
GCC编译
为了避免编译产生的文件污染源代码文件夹,所以我们需要新建一个文件夹用来存放编译产物
cd gcc-7.4.0/
mkdir build
cd build
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4 --with-mpc=/usr/local/mpc-1.0.3 --with-isl=/usr/local/isl-0.16.1
make
make install
-
–enable-languages:用于设定 GCC 编译器支持编译的编程语言的类别,例如 c、c++、java、objc、obj-c++、go 等。
-
gcc -v查看是否成功
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/271436.html