【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】

文章目录

    • Linux-centos7.9系统GNU编译器套件(gcc/g++/gfortran)离线编译安装
        • 一、★GNU编译器套件定义
        • 二、★GNU-GCC编译环境说明
        • 三、★GNU-GCC编译安装
          • 3.1 依赖软件包安装
          • 3.2 gcc-7.5版本编译安装
        • 四、★GNU-GCC环境导入
          • 4.1 个人主机环境
          • 4.2 HPC集群环境
          • 4.3 gcc版本验证
        • 五、★GNU-GCC使用情景
          • 5.1 仅有GNU编译器套件
          • 5.2 GNU编译套件和INTEL编译器共存
        • 六、★GNU-GCC支持C++特性
        • 七、★最后

Linux-centos7.9系统GNU编译器套件(gcc/g++/gfortran)离线编译安装


本篇文章主要讲解在centos7.9系统中,如何源码编译GNU编译器套件下GCC7.5,并正确的导入用户环境,以及同时存在GCC编译器和INTEL编译器时如何指定哪种编译器。

一、★GNU编译器套件定义


GNU编译器套件包括C、C++、 Objective-C、 Fortran、java、Go等语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)

GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)

二、★GNU-GCC编译环境说明


  • Linux系统:centos7.9离线(已配置离线YUM源)
    Centos7.9_YUM源离线配置链接
  • 编译器:GCC4.8.5(系统默认安装版本)
  • GCC软件版本:gcc-7.5.0.tar.gz
  • 依赖软件包版本:gmp-6.1.0.tar.bz2 isl-0.16.1.tar.bz2 mpc-1.0.3.tar.gz mpfr-3.1.4.tar.bz2

注意! 不同版本的gcc编译的时候,依赖的三方包软件的版本都不太一样,所以一定要安装对应的版本

gcc-7.5源码包及对应三方库源码包

三、★GNU-GCC编译安装


3.1 依赖软件包安装
# 联网安装模式
tar -zxvf gcc-7.5.0.tar.gz
cd gcc-7.5.0
./contrib/download_prerequisites # 自动安装依赖库
# 离线安装模式,主备好4个依赖软件包
tar -zxvf gcc-7.5.0.tar.gz
cd gcc-7.5.0
cp gmp-6.1.0.tar.bz2 isl-0.16.1.tar.bz2 mpc-1.0.3.tar.gz mpfr-3.1.4.tar.bz2 ./ # 复制依赖包到gcc目录
./contrib/download_prerequisites

注意! gcc依赖包不需要解压,直接放到gcc-7.5.0目录中即可。作者也看到有很多人把四个依赖包单独编译安装,这样不仅麻烦还容易出错,其实在gcc源码包中就有安装依赖包的脚本文件,如上执行运行脚本即可轻松安装4个依赖软件包。

3.2 gcc-7.5版本编译安装
# 软件版本:gcc-7.5.0.tar.gz
cd gcc-7.5.0
./configure --enable-bootstrap --enable-shared --enable-threads=posix \
--enable-checking=release --with-system-zlib --enable-__cxa_atexit \
--disable-libunwind-exceptions --enable-gnu-unique-object \
--enable-linker-build-id --with-linker-hash-style=gnu \
--enable-languages=c,c++,fortran --enable-plugin \
--enable-initfini-array --disable-libgcj \
--enable-gnu-indirect-function --with-tune=generic \
--disable-multilib --prefix=指定gcc安装路径
make -j 8
make install

注意! gcc编译强烈建议要指定安装路径,也就是呀加上参数–prefix=,因为在cenos7系统中,有默认的gcc版本4.8.5,如果选择默认安装,在后面转换gcc版本的时候就会出现问题。在进行make编译时,强烈建议调用多核,这样可以更快的编译完成。如果只调用单核,编译过程可能需要2小时左右。

四、★GNU-GCC环境导入


4.1 个人主机环境
vim ~/.bashrc # 打开个人环境配置文件.bashrc,增加如下命令,保存退出
export PATH=指定gcc安装路径/bin:$PATH
export LD_LIBRARY_PATH=指定gcc安装路径/lib64:$LD_LIBRARY_PATH
source ~/.bashrc # 立即生效
4.2 HPC集群环境
module avail  # 确定当前是否安装Environment Modules软件包,如果有可以看到环境配置文件路径
cd /当前环境的路径/modules5/modulefiles # 进入到自己Environment Modules中的配置目录中
mkdir gcc;cd gcc 
vim 7.5  # 新建文件,以gcc的版本号为名字加以区分,增加如下命令,保存退出
#%Module1.0
## Module file created by author
conflict gcc
proc ModulesHelp { } {
puts stderr "by gcc 4.8.5"
}
prepend-path PATH "指定gcc的安装路径/bin"
prepend-path LD_LIBRARY_PATH "指定gcc的安装路径/lib64"
module avail # 查看gcc环境是否已配置正确
module load gcc/7.5.0  #导入gcc环境
4.3 gcc版本验证

当gcc编译安装好后,加载到当前环境,通过命令查看是否加载正确,同时查看版本信息。

# 三个命令的版本信息应该一样,如下图所示
gcc -v
g++ -v
gfortran -v

在这里插入图片描述

五、★GNU-GCC使用情景


5.1 仅有GNU编译器套件

当系统环境中,只有GNU编译器的时候,但有不同版本。这个时候确定使用哪个版本,就加载哪个版本进行编译,同时要保证当前的源码统一使用同一版本。因为使用不同版本GCC编译下的源码,运行的时候需要对应版本GCC环境。

5.2 GNU编译套件和INTEL编译器共存

当系统中同时存在GNU编译套件和INTEL编译器的时候,那么在源码编译的时候就使用命令参数指定使用GNU编译套件下的GCC,如下所示:

# 指定GNU-gcc编译器
CC=gcc CXX=g++ FC=gfortran  cmake .. -DCMAKE_INSTALL_PREFIX=指定安装路径
make
make install
# 指定INTEL编译器
CC=icc CXX=icpc FC=ifort  cmake .. -DCMAKE_INSTALL_PREFIX=指定安装路径
make
make install

六、★GNU-GCC支持C++特性


C++版本 GCC版本支持情况 GCC版本 指定版本的命令标志
C++98 完全支持 从GCC 6.1之前版本的默认模式 -std=c++98 or -std=gnu++98
C++11 完全支持 从GCC4.8.1版本开始完全支持 -std=c++11 or -std=gnu++11
C++14 完全支持 从GCC 6.1版本开始完全支持 -std=c++14 or -std=gnu++14
C++17 完全支持 从GCC 5版本开始到GCC7版本 -std=c++17 or -std=gnu++17
C++20 完全支持 从GCC 8版本开始陆续支持C++20特性 -std=c++20 or -std=gnu++20
C++23 未完全支持 从GCC 11版本开始支持C++23特性 -std=c++2b or -std=gnu++2b

注意! gcc版本很多,什么时候需要使用老版本,什么时候又需要调用新版本呢?这个取决于需要编译的源码程序。当编译的源码比较老旧的时候,c++新特性不高于c++11的时候用默认4.8.5的版本就可以,反之如果编译的时候出现很多编译器导致的错误类型,那么就要考虑调用更高版本的GCC。

七、★最后


以上内容都是经过实战验证过的,关于调用gcc版本的问题,作者建议能使用默认版本(gcc4.8.5)就不要调用更高的版本,在实际的工作中并不是所有的环境都会有高版本被安装的。
(●’◡’●)最后感谢屏幕另一端你的支持。

你可能感兴趣的:(linux,gnu,centos,bash,c++)