以下のような状況でgcc 8.3.0をソースからビルドしました。
#状況
- インターネット接続なし
- root権限なし
- デフォルトのgccのバージョンが低い(gcc-4.8.5)
- Linux
昨今は情報漏洩等の関連でインターネット接続なしの計算機で機械学習等を行うことも多いと聞きます。
また、そのような場合にはroot権限がないこともあるでしょう。
また、gccのバージョンが4.xだったり古い場合もあるでしょう。
一方、新しいバージョンのgccが必要なことも多いと思います。
このような環境のもと
- 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!
が出力されれば成功です。
お疲れ様でした。