20

この記事は最終更新日から1年以上が経過しています。

オフライン環境でgcc 8.3.0をソースからビルドする

以下のような状況でgcc 8.3.0をソースからビルドしました。

状況

  1. インターネット接続なし
  2. root権限なし
  3. デフォルトのgccのバージョンが低い(gcc-4.8.5)
  4. Linux

昨今は情報漏洩等の関連でインターネット接続なしの計算機で機械学習等を行うことも多いと聞きます。
また、そのような場合にはroot権限がないこともあるでしょう。
また、gccのバージョンが4.xだったり古い場合もあるでしょう。
一方、新しいバージョンのgccが必要なことも多いと思います。
このような環境のもと

  1. gccの最新版(8.3)をオフライン環境でroot権限なしでソースからビルド ということを行いました。

参考:
http://buko106.hatenablog.jp/entry/2017/08/09/232356

gccのインストール

ソースコードの取得

まず、インターネットに接続できるマシンを用意します。
ここではMacを用いています。

gcc-8.3.0をどこかのミラーサイトからダウンロードします。

wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz

次に、gccが必要とするものをダウンロードします。
そのバージョンのgccが必要とするものは、gccを解凍した中に
contrib/download_prerequisites
に書いてありますので、テキストファイルで開くと見つかります。
8.3.0では

gmp='gmp-6.1.0.tar.bz2'
mpfr='mpfr-3.1.4.tar.bz2'
mpc='mpc-1.0.3.tar.gz'
isl='isl-0.18.tar.bz2'

とあります。
別のgccのバージョンではgccを解凍して中身を見て確認しましょう。
上に挙げられた四つをダウンロードします。

wget https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.bz2
wget https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.bz2
wget https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

ここでダウンロードした5つのファイルを、何らかの方法で対象とするオフラインのマシンにコピーします。

依存関連ソフトウエアのインストール

これからは全て対象とするオフラインマシン上で行います。OSはLinuxであるとします。
まず、ホームディレクトリ上に

mkdir src

と新しいディレクトリを作り、そこに5つのファイルをコピーします。
また、gccその他のインストール先として、

mkdir mygcc

というディレクトリを作っておきましょう。名前はなんでも構いません。
ファイルをコピーしましたら、srcディレクトリに移動し、

tar -xvf gmp-6.1.0.tar.bz2
tar -xvf mpfr-3.1.4.tar.bz2 
tar -xvf mpc-1.0.3.tar.gz 
tar -xvf isl-0.18.tar.bz2 

と四つのファイルを解凍します。

gmp

まずgmpをインストールします。

cd gmp-6.1.0/

として、

./configure --prefix=$HOME/mygcc --enable-cxx
make
make check
make install
cd ..

mpfr

次にmpfrをインストールします。

cd mpfr-3.1.4/
./configure --prefix=$HOME/mygcc --with-gmp=$HOME/mygcc
make -s -j4
make -s check
make install
cd ..

mpc

次にmpcをインストールします。

cd mpc-1.0.3/
./configure --prefix=$HOME/mygcc --with-gmp=$HOME/mygcc --with-mpfr=$HOME/mygcc
make -s -j4
make check -s -j4
make install
cd ..

isl

最後に、islをインストールします。

cd isl-0.18/
./configure --prefix=$HOME/mygcc --with-gmp-prefix=$HOME/mygcc
make -j4
make check
make install
cd ..

gccのビルド

次は、gccをビルドします。
まず、解凍し、移動します。

tar -xvf gcc-8.3.0.tar.gz
cd ./gcc-8.3.0/

次に、ビルド用のディレクトリを作ります。

mkdir build
cd build

gccをビルドするにはいくつかの環境変数をリセットしておかないといけないようです。また、islを呼ぶためにLD_LIBRARY_PATHが必要です。
したがって、makeは

../configure --disable-multilib --enable-languages=c,c++,fortran --prefix=$HOME/mygcc --with-gmp=$HOME/mygcc --with-mpc=$HOME/mygcc --with-mpfr=$HOME/mygcc --with-isl=$HOME/mygcc
unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
LD_LIBRARY_PATH=$HOME/mygcc/lib make -j4
make install

のようになります。j4の4は並列処理の数ですので、計算機のCPUコアの数にしておくとより早く終わります。
かなり時間がかかりますので、makeを始めたら放っておきましょう。
なお、このmakeではgfortranもコンパイルしています。

インストールが終わったら、~/.bashrc

export PATH=$HOME/mygcc/bin:$PATH
export LD_LIBRARY_PATH=$HOME/mygcc/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$HOME/mygcc/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$HOME/mygcc/lib64:$LIBRARY_PATH
export LIBRARY_PATH=$HOME/mygcc/lib:$LIBRARY_PATH

と追記しておきましょう。これでloginし直すかsource ~/.bashrc
使えるようになります。

gcc -v

でバージョンを確認して、8.3.0になっていることを確認し、

#include <stdio.h>

int main(int argc, char *args[])
{
  printf("Hello, world!\n");
  return 0;
}

というファイルをhello.cと保存して、

gcc -o hello hello.c
./hello 

を行なって、

Hello, world!

が出力されれば成功です。
お疲れ様でした。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
cometscome_phys
Fortran90、Python、Juliaを使う物性理論な人

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
Azure Kubernetes Serviceに関する記事を投稿しよう!
~