Debian 10.12编译安装GCC7.4.0 教程 -理论通用版

教程环境

系统为: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 cleanmake distclean清理上次编译的残留文件

链接共享库

将安装目录下的lib文件夹中的共享库链接到/usr/lib 中

ln -s /usr/local/gmp-6.1.0/lib/libgmp.so.10 /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.4 /usr/lib/libmpfr.so.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.3 /usr/lib/libmpc.so.3

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.15 /usr/lib/libisl.so.15

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

编译参数说明:

  • –prefix=/usr/local/ 指定安装路径

  • –enable-bootstrap 这里引用网上一些文献对该参数的解释:用第一次编译生成的程序进行第二次编译,然后用再次生成的程序进行第三次编译,并且检查比较第二次和第三次结果的正确性,也就是进行冗余的编译检查工作。 非交叉编译环境下,默认已经将该值设为 enable,可以不用显示指定;交叉编译环境下,需要显示将其值设为 disable。

  • –enable-checking=release 以软件发布版的标准来对编译时生成的代码进行一致性检查;设置该选项为 enable并不会改变编译器生成的二进制结果,但是会导致编译的时间增加;该选项仅支持gcc编译器; 总体而言,对于上面这个选项,机器的硬件配置较低,以及不愿等待太久编译时间的童鞋,可以设置为 disable;但是这会增加产生未预期的错误的风险,所以应该慎用。 可以同时设置 --disable-bootstrap 与 --disable-checking,这对编译过程的提速很有帮助。

  • –enable-threads=posix 顾名思义,启用posix标准的线程支持 ,要让程序能在符合POSIX规范的linux发布版上正确运行,就应该启用该选项,取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。

  • –enable-languages=c,c++ 支持的高级语言类型和运行时库,可以设置的所有语言包括 ada,c,c++,Fortran,java,objc,obj-c++,GO 等语言。这里只开启了c和c++,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。

  • –disable-multilib 如果你的操作系统是32位,默认就已经设置为 disable,这意味着gcc仅能生成32位的可执行程序;如果你的操作系统是64位,默认就已经设置为 enable,这意味着用gcc编译其它源文件时可以通过 -m32 选项来决定是否生成32位机器代码。如果在64位系统上,要禁止生成32位代码, 设置 --disable-multilib。

  • –enable-gather-detailed-mem-stats 允许收集详细的内存使用信息,如果设置该参数为 enable,则将来编译好的gcc可执行程序,可以通过 -fmem-report 选项来输出编译其它程序时的实时内存使用情况。

  • –with-long-double-128 指定 long double 类型为128位(16字节!);设置为 without,则 long double类型将为64位(8字节),这将与普通的 double 类型一样。 基于 Glib 2.4以上版本编译时,默认已经是128位。

  • gcc -v查看是否成功

posted @ 2022-07-04 01:43  tothk  阅读(2450)  评论(0编辑  收藏  举报