目次 >> GCC
gcc(GNU Compiler Collection)はCやC++、FORTRANなどを含んだ無料のコンパイラ集。
まず、インスタンスを立ち上げる前に、最近のGCCはファイルサイズも大きいので、ディスクの容量にも気を付けること。20GB程度あるとよい。
ftp://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.xz
からダウンロードする。
ビルドするには、下記の3つも入れておく必要がある。
$sudo yum install gmp-devel
$sudo yum install mpfr-devel
$sudo yum install libmpc-devel
あるいはまとめて
$sudo yum install gmp-devel mpfr-devel libmpc-devel
なお、
sudo yum groupinstall "Development Tools"
で多くのツールを一度にインストールすることができる。
そして、まずgcc-10.1.0.tar.xzを解凍する
$ tar xvJf gcc-10.1.0.tar.xz
ディレクトリを移動する
$ cd gcc-10.1.0/
ビルド用のディレクトリを作成する
$ mkdir build
そこへ移動
$ cd build
rootではなくユーザーのホームディレクトリにインストール
$ ../configure --prefix=${HOME}/local/gcc-10.1.0 --disable-multilib --enable-languages=c,c++
一つ目の引数は、インストール場所を、二つ目の引数は32ビット用は作らず64ビット用のみを作ることを指示している。
--enable-languages=c,c++
は容量節約のためC、C++しかコンパイルしないようにしている。ほかのコンパイラも使用するようであれば、このオプションを削除する。
そして
$ make
かなり時間がかかる。インスタンスにもよるが、数時間かかる場合も。
nanoやmicroインスタンスのようなメモリの小さなインスタンスを使っている場合、メモリ不足でコンパイルが途中で終了してしまう場合がある。
下記のようなエラーが出る。
virtual memory exhausted: Cannot allocate memory make[3]: *** [gimple-match.o] Error 1 make[3]: Leaving directory `/home/satod/gcc-10.1.0/build/gcc' make[2]: *** [all-stage3-gcc] Error 2 make[2]: Leaving directory `/home/satod/gcc-10.1.0/build' make[1]: *** [stage3-bubble] Error 2 make[1]: Leaving directory `/home/satod/gcc-10.1.0/build' make: *** [all] Error 2
その場合は、下記のコマンドで、スワップ領域を500MB程度確保するとよい。
$ SWAP=/tmp/swap $ dd if=/dev/zero of=$SWAP bs=1M count=500 $ mkswap $SWAP $ sudo swapon $SWAP
コンパイルが終わったら、
$ make install
でインストールする。
そして
.bash_profile
に
export PATH=$HOME/local/gcc-10.1.0/bin:$PATH export LD_LIBRARY_PATH=$HOME/local/gcc-10.1.0/lib64/:$LD_LIBRARY_PATH
を追加する。これで、マスターノードでコンパイルしたり、実行したりできる。
計算ノードで使えるようにするには、投入するジョブスクリプトに
export LD_LIBRARY_PATH=$HOME/local/gcc-10.1.0/lib64/:$LD_LIBRARY_PATH
を追加しておく必要がある。
まずはダウンロードしてくる。ミラーサイトはこちらから
wget ftp://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.bz2
解凍する
tar xvjf gcc-10.1.0.tar.bz2
ディレクトリを移動する
cd gcc-10.1.0/
ビルド用のディレクトリを作成する
mkdir build
そこへ移動
cd build
rootではなくユーザーのホームディレクトリにインストール
../configure --prefix=${HOME}/local/gcc-10.1.0 make
注:今のGCCは"make"だけで stage2やstage3までbuildしてくれる
make install
-O3 -fomit-frame-pointer -funroll-loops -march=opteron -ffast-math
makeを並列で行うには、-jオプションをつければよい。bashを使っている場合は、.bashrcで
alias make='make -j'
の様に指定しておくとよい。
CentOSでは他のディストリビューションと少し違い、
# yum install gcc-c++
とすると、g++がインストールされる。
# yum install gcc
Loaded plugins: refresh-packagekit
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.3.2-7 set to be updated
--> Processing Dependency: libgomp = 4.3.2-7 for package: gcc
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc
--> Processing Dependency: binutils >= 2.17.50.0.17-3 for package: gcc
--> Processing Dependency: libgomp.so.1()(64bit) for package: gcc
--> Running transaction check
---> Package libgomp.x86_64 0:4.3.2-7 set to be updated
---> Package binutils.x86_64 0:2.18.50.0.9-7.fc10 set to be updated
---> Package glibc-devel.x86_64 0:2.9-2 set to be updated
--> Processing Dependency: glibc-headers = 2.9-2 for package: glibc-devel
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.9-2 set to be updated
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers
--> Processing Dependency: kernel-headers for package: glibc-headers
--> Running transaction check
---> Package kernel-headers.x86_64 0:2.6.27.5-117.fc10 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
gcc x86_64 4.3.2-7 fedora 10 M
Installing for dependencies:
binutils x86_64 2.18.50.0.9-7.fc10 fedora 3.1 M
glibc-devel x86_64 2.9-2 fedora 2.5 M
glibc-headers x86_64 2.9-2 fedora 606 k
kernel-headers x86_64 2.6.27.5-117.fc10 fedora 747 k
libgomp x86_64 4.3.2-7 fedora 79 k
Transaction Summary
================================================================================
Install 6 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 17 M
Is this ok [y/N]: y
Downloading Packages:
(1/6): libgomp-4.3.2-7.x86_64.rpm | 79 kB 00:00
(2/6): glibc-headers-2.9-2.x86_64.rpm | 606 kB 00:09
(3/6): kernel-headers-2.6.27.5-117.fc10.x86_64.rpm | 747 kB 00:07
(4/6): glibc-devel-2.9-2.x86_64.rpm | 2.5 MB 00:29
(5/6): binutils-2.18.50.0.9-7.fc10.x86_64.rpm | 3.1 MB 00:36
(6/6): gcc-4.3.2-7.x86_64.rpm | 10 MB 02:11
--------------------------------------------------------------------------------
Total 82 kB/s | 17 MB 03:35
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : binutils 1/6
Installing : libgomp 2/6
Installing : kernel-headers 3/6
Installing : glibc-headers 4/6
Installing : glibc-devel 5/6
Installing : gcc 6/6
Installed:
gcc.x86_64 0:4.3.2-7
Dependency Installed:
binutils.x86_64 0:2.18.50.0.9-7.fc10
glibc-devel.x86_64 0:2.9-2
glibc-headers.x86_64 0:2.9-2
kernel-headers.x86_64 0:2.6.27.5-117.fc10
libgomp.x86_64 0:4.3.2-7
Complete!
Ubuntuの場合は、apt-get install g++でインストールする。
$ sudo apt-get install g++ Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: g++-4.6 libstdc++6-4.6-dev Suggested packages: g++-multilib g++-4.6-multilib gcc-4.6-doc libstdc++6-4.6-dbg libstdc++6-4.6-doc The following NEW packages will be installed: g++ g++-4.6 libstdc++6-4.6-dev 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 8,615 kB of archives. After this operation, 25.4 MB of additional disk space will be used. Do you want to continue [Y/n]? y Get:1 http://us.archive.ubuntu.com/ubuntu/ precise/main libstdc++6-4.6-dev amd64 4.6.3-1ubuntu5 [1,660 kB] Get:2 http://us.archive.ubuntu.com/ubuntu/ precise/main g++-4.6 amd64 4.6.3-1ubuntu5 [6,954 kB] Get:3 http://us.archive.ubuntu.com/ubuntu/ precise/main g++ amd64 4:4.6.3-1ubuntu5 [1,442 B] Fetched 8,615 kB in 3s (2,667 kB/s) Selecting previously unselected package libstdc++6-4.6-dev. (Reading database ... 167726 files and directories currently installed.) Unpacking libstdc++6-4.6-dev (from .../libstdc++6-4.6-dev_4.6.3-1ubuntu5_amd64.deb) ... Selecting previously unselected package g++-4.6. Unpacking g++-4.6 (from .../g++-4.6_4.6.3-1ubuntu5_amd64.deb) ... Selecting previously unselected package g++. Unpacking g++ (from .../g++_4%3a4.6.3-1ubuntu5_amd64.deb) ... Processing triggers for man-db ... Setting up g++-4.6 (4.6.3-1ubuntu5) ... Setting up g++ (4:4.6.3-1ubuntu5) ... update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode. Setting up libstdc++6-4.6-dev (4.6.3-1ubuntu5) ...
gccでコンパイルした場合、__GNUC__がdefineされている。
#ifdef __GNUC__ //gccの場合にコンパイルされる #endif
最終更新日