29
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

以下のような状況で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!

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

29
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?