侧边栏壁纸
博主头像
qiql博主等级

水能载舟,亦可赛艇

  • 累计撰写 33 篇文章
  • 累计创建 28 个标签
  • 累计收到 11 条评论

目 录CONTENT

文章目录

💫Linux 平台 Gcc 安装及调试指南【附安装脚本】

qiql
2022-07-15 / 2 评论 / 0 点赞 / 1,340 阅读 / 3,035 字

TIME: 2022年6月24日09:30:07
AUOTR: qiql
EMAIL: hi@qiql.net

1 下载软件包

Gcc 可以到 官网 下载[1],同时,安装 Gcc 需要五个依赖,分别是:m4, gmp, mpfr, mpc, isl ,读者可以根据自身情况选择版本,本文示例的安装版本如下:

软件包 版本
Gcc 11.2.0 (tar.gz)
m4 1.4.19 (tar.gz)
gmp 6.2.1 (tar.xz)
mpfr 4.1.0 (tar.gz)
mpc 1.2.1 (tar.gz)
isl 0.24 (tar.bz2)

2 安装 Gcc 依赖

安装 Gcc 之前,需要先顺次安装前文所述的五个依赖

以下安装命令将安装包放到了 /root/share/soft/pkgs 目录,将压缩包解压到了 /root/share/soft/build 目录,将编译后的库安装到了 /root/share/soft/tool 目录,因为要安装的软件或库的版本可能不止一个,所以安装目录写成了 软件名 / 软件版本 的格式,便于管理。

安装 m4:

tar -zxvf /root/share/soft/pkgs/m4-1.4.19.tar.gz -C /root/share/soft/build/
cd /root/share/soft/build/m4-1.4.19
./configure --prefix=/root/share/soft/tool/m4/1.4.19
make
make install

安装完毕之后,最好将m4的bin目录声明到PATH中

export PATH=/root/share/soft/tool/m4/1.4.19/bin:$PATH

否则在安装gmp时,可能会报错:configure: error: No usable m4 in $PATH or /usr/5bin 说找不到m4

安装 gmp:

tar -xf /root/share/soft/pkgs/gmp-6.2.1.tar.xz -C /root/share/soft/build/
cd /root/share/soft/build/gmp-6.2.1
./configure --prefix=/root/share/soft/tool/gmp/6.2.1
make
make check
make install

安装 mpfr:

tar -zxvf /root/share/soft/pkgs/mpfr-4.1.0.tar.gz -C /root/share/soft/build/
cd /root/share/soft/build/mpfr-4.1.0
./configure --prefix=/root/share/soft/tool/mpfr/4.1.0 --with-gmp=/root/share/soft/tool/gmp/6.2.1
make
make check
make install

安装 mpc:

tar -zxvf /root/share/soft/pkgs/mpc-1.2.1.tar.gz -C /root/share/soft/build/
cd /root/share/soft/build/mpc-1.2.1
./configure --prefix=/root/share/soft/tool/mpc/1.2.1 --with-gmp=/root/share/soft/tool/gmp/6.2.1 --with-mpfr=/root/share/soft/tool/mpfr/4.1.0
make
make check
make install

安装 isl:

tar -jxvf /root/share/soft/pkgs/isl-0.24.tar.bz2 -C /root/share/soft/build/
cd /root/share/soft/build/isl-0.24
./configure --prefix=/root/share/soft/tool/isl/0.24/ --with-gmp-prefix=/root/share/soft/tool/gmp/6.2.1/
make
make check
make install

安装完成之后,建议将这五个依赖的库文件写入到环境变量 LD_LIBRARY_PATH 中:

export LD_LIBRARY_PATH=/root/share/soft/tool/m4/1.4.19:/root/share/soft/tool/mpc/1.2.1/lib:/root/share/soft/tool/gmp/6.2.1/lib:/root/share/soft/tool/mpfr/4.1.0/lib:/root/share/soft/tool/isl/0.24/lib:$LD_LIBRARY_PATH

3 安装 Gcc

tar -zxvf /root/share/soft/pkgs/gcc-11.2.0.tar.gz -C /root/share/soft/build/gcc/11.2.0
cd /root/share/soft/build/gcc-11.2.0
./configure --prefix=/root/share/soft/tool/gcc/11.2.0 --enable-threads=posix --enable-languages=c,c++,fortran --disable-checking --disable-multilib --disable-multilib --disable-libcc1cd --with-gmp=/root/share/soft/tool/gmp/6.2.1 --with-mpfr=/root/share/soft/tool/mpfr/4.1.0 --with-mpc=/root/share/soft/tool/mpc/1.2.1 --with-isl=/root/share/soft/tool/isl/0.24
make -j
make install

gcc 的编译过程十分漫长,如果不使用并行编译,可能需要七八个小时,笔者最快一次编译大约花费了半个小时,使用了36个核心。

可能会遇到的一些问题:

In file included from ./kinds.h:75,
              from ../.././libgfortran/libgfortran.h:242,
              from ../.././libgfortran/caf/libcaf.h:32,
              from ../.././libgfortran/caf/single.c:26:
../.././libgfortran/kinds-override.h:40:5: error: #error "Where has __float128 gone?"
40 | #   error "Where has __float128 gone?"
   |     ^~~~~

解决方案参考:https://blog.csdn.net/qiao_junfeng/article/details/78258885

根据错误信息,__float128的定义有四个,编译器此时不知道用哪个所以报错,可以考虑卸载其他的icc,gcc环境,酌情加载所需要的环境变量

A compiler with support for C++11 language features is required.

这个错误出现的原因是机器上没有 g++ 环境,需要自行再安装 g++

在centos操作系统,且机器能连接外网的情况下,可以通过yum安装:yum install -y gcc-c++

4 安装 module 工具

module 是一个环境变量管理工具,手动安装gcc的读者很可能不会只安装一个版本的 gcc,所以一般都会使用 module 来进行软件版本的管理,安装 module 之前需要先安装 TCL 这一脚本工具

4.1 安装 TCL

笔者在安装时选择了 8.5.9 版本,安装命令如下:

tar -zxvf /root/share/soft/pkgs/tcl-8.5.9.tar.gz -C /root/share/soft/build/
cd /root/share/soft/build/tcl8.5.9/unix
# 必须要进入unix目录才能执行./configure 命令
./configure --prefix=/root/share/soft/tool/tcl/8.5.9
make
make install

如果读者有 root 权限,最好在 /usr/bin 目录下创建一个软链接:

ln -sf /root/share/soft/tool/tcl/8.5.9/tclsh8.5 /usr/bin/tclsh

否则,在安装 module 时,会报错:tclsh could not be found

4.2 安装 module

tar -zxvf /root/share/soft/pkgs/modules-5.0.1.tar.gz -C /root/share/soft/build
cd /root/share/soft/build/modules-5.0.1
# 按照./configure -h 的说明,--with-tcl参数所指定的tcl的路径应该要有需要包含lib目录,因为此目录下才有 tclConfig.sh 这个文件
./configure --prefix=/root/share/soft/tool/modules/5.0.1 --with-tcl=/root/share/soft/tool/tcl/8.5.9/lib
make
make install

4.3 配置 module

进入到刚才安装的module目录下的modulefiles文件夹

新建一个gcc文件夹并进入该文件夹

然后新建一个11.2.0文本文件,并将以下内容添加到该文件中

#%Module
#
## gcc11.2.0
#
proc ModulesHelp { } {
  puts stderr "\tThis module adds gnu 11.2.0 compiler to the user environment"
}
  set gccbasedir /qiql/tool/gcc/11.2.0
  set basedir /qiql/tool
  
  prepend-path PATH ${gccbasedir}/bin
  prepend-path PATH ${basedir}/m4/1.4.19/bin
  prepend-path LD_LIBRARY_PATH ${gccbasedir}/lib
  prepend-path LD_LIBRARY_PATH ${gccbasedir}/lib64
  prepend-path LD_LIBRARY_PATH ${basedir}/mpc/1.2.1/lib
  prepend-path LD_LIBRARY_PATH ${basedir}/m4/1.4.19/lib
  prepend-path LD_LIBRARY_PATH ${basedir}/mpfr/4.1.0/lib
  prepend-path LD_LIBRARY_PATH ${basedir}/gmp/6.2.1/lib
  prepend-path LD_LIBRARY_PATH ${basedir}/isl/0.24/lib
unset basedir
gccbasedir=/home/tool/gcc/11.2.0
basedir=/home/tool

export PATH=${gccbasedir}/bin:$PATH
export LD_LIBRARY_PATH=${gccbasedir}/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${gccbasedir}/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${basedir}/mpc/1.2.1/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${basedir}/m4/1.4.19/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${basedir}/mpfr/4.1.0/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${basedir}/gmp/6.2.1/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=${basedir}/isl/0.24/lib:$LD_LIBRARY_PATH

在环境变量脚本 ~/.bashrc 文件中声明刚才安装的 module 的路径

# Module
export MODULEPATH=/qiql/tool/modules/5.0.1/modulefiles:$MODULEPATH

然后执行 source ~/.bashrc 以使其生效

4.4 module 命令

执行 module avail 可以查看当前可以使用的模块

执行 module load 模块名 可以在当前会话窗口中加载相应的模块和环境变量

执行 module unload 模块名 可以在当前会话窗口中卸载相应的模块及环境变量

执行 module list 可以查看会话窗口中已经当前加载的所有模块

执行 module purge 可以卸载所有之前加载的模块

附录1 参考链接

附录2 安装脚本

gcc 的安装脚本

#!/usr/bin/bash
### 本文件为 gcc 的安装脚本,在执行本脚本之前,需要修改本文件中的一些配置
### 脚本作者:https://iqiql.com,当前时间:2022年6月24日16:29:38

### 开始指定/配置
## 指定 gcc 的安装包路径(默认与本脚本在同一目录)
gcc_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定 gcc 的版本号
gcc_version=11.2.0
## 指定 gcc 的 build 目录【可选】(默认与安装包在同一路径)
gcc_build_dir=${gcc_pkg_dir}/build
## 指定 gcc 的安装目录
gcc_install_dir=/to/your/path/gcc/${gcc_version}
## 指定 gcc 的五个依赖的安装包目录【可选】(默认与本脚本在同一目录)
gcc_rely_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定这五个依赖的 build 目录【可选】(默认与安装包在同一路径)
gcc_rely_build_dir=${gcc_rely_pkg_dir}/build
## 指定这五个依赖的安装目录
gcc_rely_install_dir=/to/your/path
## 指定 m4 的版本号
m4_version=1.4.19
## 指定 gmp 的版本号
gmp_version=6.2.1
## 指定 mpfr 的版本号
mpfr_version=4.1.0
## 指定 mpc 的版本号
mpc_version=1.2.1
## 指定 isl 的版本号
isl_version=0.24
### 指定完毕,配置完成

### 创建 gcc 的 build 目录
mkdir -p ${gcc_build_dir}
### 创建五个依赖的 build 目录
mkdir -p ${gcc_rely_build_dir}

## 开始安装 m4
tar -zxvf ${gcc_rely_pkg_dir}/m4-${m4_version}.tar.gz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/m4-${m4_version}
./configure --prefix=${gcc_rely_install_dir}/m4/${m4_version}
make
make install
export PATH=${gcc_rely_install_dir}/m4/${m4_version}/bin:$PATH
## 安装 m4 完毕

## 开始安装 gmp
tar -xf ${gcc_rely_pkg_dir}/gmp-${gmp_version}.tar.xz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/gmp-${gmp_version}
./configure --prefix=${gcc_rely_install_dir}/gmp/${gmp_version}
make
make check
make install
## 安装 gmp 完毕

## 开始安装 mpfr
tar -zxvf ${gcc_rely_pkg_dir}/mpfr-${mpfr_version}.tar.gz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/mpfr-${mpfr_version}
./configure --prefix=${gcc_rely_install_dir}/mpfr/${mpfr_version} --with-gmp=${gcc_rely_install_dir}/gmp/${gmp_version}
make
make check
make install
## 安装 mpfr 完毕

## 开始安装 mpc
tar -zxvf ${gcc_rely_pkg_dir}/mpc-${mpc_version}.tar.gz -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/mpc-${mpc_version}
./configure --prefix=${gcc_rely_install_dir}/mpc/${mpc_version} --with-gmp=${gcc_rely_install_dir}/gmp/${gmp_version} --with-mpfr=${gcc_rely_install_dir}/mpfr/${mpfr_version}
make
make check
make install
## 安装 mpc 完毕

## 开始安装 isl
tar -jxvf ${gcc_rely_pkg_dir}/isl-${isl_version}.tar.bz2 -C ${gcc_rely_build_dir}
cd ${gcc_rely_build_dir}/isl-${isl_version}
./configure --prefix=${gcc_rely_install_dir}/isl/${isl_version} --with-gmp-prefix=${gcc_rely_install_dir}/gmp/${gmp_version}
make
make check
make install
## 安装 isl 完毕

## 将安装得到的库文件路径写入到环境变量 LD_LIBRARY_PATH 中去
export LD_LIBRARY_PATH=${gcc_rely_install_dir}/m4/${m4_version}:${gcc_rely_install_dir}/gmp/${gmp_version}/lib:${gcc_rely_install_dir}/mpfr/${mpfr_version}/lib:${gcc_rely_install_dir}/mpc/${mpc_version}/lib:${gcc_rely_install_dir}/isl/${isl_version}/lib:$LD_LIBRARY_PATH

## 开始安装 gcc
tar -zxvf ${gcc_pkg_dir}/gcc-${gcc_version}.tar.gz -C ${gcc_build_dir}
cd ${gcc_build_dir}/gcc-${gcc_version}
./configure --prefix=${gcc_install_dir} --enable-threads=posix --enable-languages=c,c++,fortran --disable-checking --disable-multilib --disable-multilib --disable-libcc1cd --with-gmp=${gcc_rely_install_dir}/gmp/${gmp_version} --with-mpfr=${gcc_rely_install_dir}/mpfr/${mpfr_version} --with-mpc=${gcc_rely_install_dir}/mpc/${mpc_version} --with-isl=${gcc_rely_install_dir}/isl/${isl_version}
make -j
make install
## 安装完毕

echo "gcc has been installed to " ${gcc_install_dir}
echo `${gcc_install_dir}/bin/gcc -v`

### END

module 的安装脚本

#!/usr/bin/bash
### 本文件为 module 工具的安装脚本,在运行本脚本之前,需要修改本文件的一些配置
### 脚本作者:https://iqiql.com,当前时间:2022年6月24日16:29:27

## 指定 module 安装包的路径(默认与本脚本位于同一路径)
module_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定 module 的版本号
module_version=5.0.1
## 指定 module 的 build 目录(默认与安装包位于同一路径)
module_build_dir=${module_pkg_dir}/build
## 指定 module 的安装目录
module_install_dir=/to/your/path/module/${module_version}
## 指定 tcl 脚本工具安装包的路径(默认与本脚本位于同一路径)
tcl_pkg_dir=$(dirname $(readlink -f "$0"))
## 指定 tcl 的版本号
tcl_version=8.5.9
## 指定 tcl 的 build 目录(默认与安装包位于同一路径)
tcl_build_dir=${tcl_pkg_dir}/build
## 指定 tcl 的安装目录
tcl_install_dir=/to/your/path/tcl/${tcl_version}
### 指定配置完毕

## 开始安装 tcl
mkdir -p ${tcl_build_dir}
tar -zxvf ${tcl_pkg_dir}/tcl${tcl_version}-src.tar.gz -C ${tcl_build_dir}
cd ${tcl_build_dir}/tcl${tcl_version}/unix
# 必须要进入unix目录才能执行./configure 命令
./configure --prefix=${tcl_install_dir}
make
make install
## 安装 tcl 完毕

## 开始安装 module
mkdir -p ${module_build_dir}
tar -zxvf ${module_pkg_dir}/modules-${module_version}.tar.gz -C ${module_build_dir}
cd ${module_build_dir}/modules-${module_version}
# 按照./configure -h 的说明,--with-tcl参数所指定的tcl的路径应该要有需要包含lib目录,因为此目录下才有 tclConfig.sh 这个文件
./configure --prefix=${module_install_dir} --with-tcl=${tcl_install_dir}/lib
make
make install

echo "module has been installed to " ${module_install_dir}

### END

  1. gcc 各版本下载页 ↩︎

0

评论区