【Linux】 最新のGCCをソースからインストールする手順

GCCはパッケージ管理システム(aptやyumなど)を用いることで簡単にインストール可能です.

インストールされるGCCのバージョンはOSに依存するため,最新バージョンをインストールしたい場合,ソースからビルドし,インストールする必要があります.

ソースからインストールする方法は,管理者権限を有さないユーザでも任意のバージョンをインストールすることができるというメリットがあります

目次

GCCをインストールするために必要なライブラリをインストールする

GCCをソースからビルドする場合,下記ライブラリが要求されます.

  1. GMP
  2. MPFR
  3. MPC

GMPのインストール

まず,GNU Multiple Precision arithmetic library (GMP)をソースからインストールする手順を示します.

ここでは,2022/10/6時点での最新版(6.2.1)をインストールします.最新版はGMPの公式サイトより確認できます.

まず,m4をインストールしておく必要があります.


apt install m4

続いて,GMPのインストールを行います.


wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
tar xvf gmp-6.2.1.tar.xz
cd gmp-6.2.1
mkdir build
cd build
../configure --prefix=/path/to/install/gmp/6.2.1 --enable-cxx
make
make install

インストールが成功すると,ディレクトリ構造は下記のようになっています.


/path/to/install/gmp/6.2.1/
|-- include/
|   |-- gmp.h
|   `-- gmpxx.h
|-- lib/
|   |-- libgmp.a
|   |-- libgmp.la*
|   |-- libgmp.so –> libgmp.so.10.4.1*
|   |-- libgmp.so.10 –> libgmp.so.10.4.1*
|   |-- libgmp.so.10.4.1*
|   |-- libgmpxx.a
|   |-- libgmpxx.la*
|   |-- libgmpxx.so –> libgmpxx.so.4.6.1*
|   |-- libgmpxx.so.4 –> libgmpxx.so.4.6.1*
|   |-- libgmpxx.so.4.6.1*
|   `-- pkgconfig/
|       |-- gmp.pc
|       `-- gmpxx.pc
`-- share/
    `-- info/
        |-- dir
        |-- gmp.info
        |-- gmp.info-1
        `-- gmp.info-2


MPFRのインストール

次にMPFRをインストールします.2022/10/6時点での最新版は4.1.0です.最新版はこちらから確認できます.

先ほどインストールしたGMPを指定し,下記コマンドのようにインストールします.


wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.xz
tar xvf mpfr-4.1.0.tar.xz
cd mpfr-4.1.0
mkdir build
cd build
../configure --prefix=/path/to/install/mpfr/4.1.0 --with-gmp=/path/to/gmp
make
make install

インストールが成功すると,下記のようなディレクトリ構造が確認できます.


/path/to/install/mpfr/4.1.0/
|-- include/
|   |-- mpf2mpfr.h
|   `-- mpfr.h
|-- lib/
|   |-- libmpfr.a
|   |-- libmpfr.la*
|   |-- libmpfr.so –> libmpfr.so.6.1.0*
|   |-- libmpfr.so.6 –> libmpfr.so.6.1.0*
|   |-- libmpfr.so.6.1.0*
|   `-- pkgconfig/
|       `-- mpfr.pc
`-- share/
    |-- doc/
    |   `-- mpfr/
    |       |-- AUTHORS
    |       |-- BUGS
    |       |-- COPYING
    |       |-- COPYING.LESSER
    |       |-- examples/
    |       |   |-- can_round.c
    |       |   |-- divworst.c
    |       |   |-- ReadMe
    |       |   |-- rndo-add.c
    |       |   |-- sample.c
    |       |   |-- threads.c
    |       |   `-- version.c
    |       |-- FAQ.html
    |       |-- NEWS
    |       `-- TODO
    `-- info/
        |-- dir
        `-- mpfr.info

MPCのインストール

最後にMPFRをインストールします.2022/10/6時点での最新版は1.2.1です.最新版はこちらから確認できます.

上記でインストールしたGMPおよびMPFRを持ちいて,下記コマンドのようにインストールします.


wget https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz
tar xvf mpc-1.2.1.tar.gz
cd mpc-1.2.1
mkdir build
cd build
../configure --prefix=/path/to/install/mpc/1.2.1 --with-gmp=/path/to/gmp --with-mpfr=/path/to/mpfr
make
make install

インストールが成功すると,下記のようなディレクトリ構造が確認できます.


/path/to/install/mpc/1.2.1/
|-- include/
|   `-- mpc.h
|-- lib/
|   |-- libmpc.a
|   |-- libmpc.la*
|   |-- libmpc.so –> libmpc.so.3.2.1*
|   |-- libmpc.so.3 –> libmpc.so.3.2.1*
|   `-- libmpc.so.3.2.1*
`-- share/
    `-- info/
        |-- dir
        `-- mpc.info

GCCのインストール

上記で,GMP,MPFR,MPCをインストールが完了したので,いよいよGCCをインストールします.

ここではgcc, g++, gfortranをインストールします.

12.2.0のインストール


wget https://ftp.jaist.ac.jp/pub/GNU/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz
tar xvf gcc-12.2.0.tar.gz
cd gcc-12.2.0
mkdir build
cd build
unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
../configure --prefix=/path/to/install/gcc/12.2.0 --enable-languages=c,c++,fortran --disable-multilib --disable-bootstrap --with-gmp=/path/to/gmp --with-mpfr=/path/to/mpfr --with-mpc=/path/to/mpc
make
make install

付録

Environment Modulues用の設定ファイル


#%Module1.0

conflict gcc

set module_root      /path/to/gcc/12.2.0
set ver              12.2.0

setenv GCC_ROOT ${module_root}
setenv CC    gcc
setenv CXX   g++
setenv FC    gfortran

prepend-path PATH            ${module_root}/bin
prepend-path LD_LIBRARY_PATH ${module_root}/lib
prepend-path LD_LIBRARY_PATH ${module_root}/lib64
prepend-path LIBRARY_PATH    ${module_root}/lib
prepend-path LIBRARY_PATH    ${module_root}/lib64
prepend-path CPATH           ${module_root}/include
prepend-path MANPATH         ${module_root}/share/man

set module_description "GNU Compiler Collection ${ver}"

module-whatis    $module_description

proc ModulesHelp { } {
    global set module_description
    puts stderr "
        $module_description
    "
}
よかったらシェアしてね!
目次