Twitterに投稿 はてなブックマークに追加 Yahoo!ブックマークに追加 Google Bookmarksに追加

目次 >> GCC

GCC

gcc(GNU Compiler Collection)はCやC++、FORTRANなどを含んだ無料のコンパイラ集。

awsでAmazon Linux AMIに最新のGCCを入れる

まず、インスタンスを立ち上げる前に、最近のGCCはファイルサイズも大きいので、ディスクの容量にも気を付けること。20GB程度あるとよい。

ftp://ftp.gnu.org/gnu/gcc/gcc-7.1.0/gcc-7.1.0.tar.bz2

からダウンロードする。

前提

ビルドするには、下記の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-7.1.0.tar.bz2を解凍する

$ tar xvjf gcc-7.1.0.tar.bz2

ディレクトリを移動する

$ cd gcc-7.1.0/

ビルド用のディレクトリを作成する

$ mkdir build

そこへ移動

$ cd build

rootではなくユーザーのホームディレクトリにインストール

$ ../configure --prefix=${HOME}/local/gcc-7.1.0 --disable-multilib

一つ目の引数は、インストール場所を、二つ目の引数は32ビット用は作らず64ビット用のみを作ることを指示している。
ここで、もしC、C++しか使用しないようであれば、
--enable-languages=c,c++
オプションをつけてもよい。

そして

$ make

かなり時間がかかる。インスタンスにもよるが、数時間かかる場合も。

nanoやmicroインスタンスのようなメモリの小さなインスタンスを使っている場合、メモリ不足でコンパイルが途中で終了してしまう場合がある。
下記のようなエラーが出る。

make[3]: Entering directory `/home/ec2-user/gcc-7.1.0/build/gcc'
build/genattrtab ../../gcc/common.md ../../gcc/config/i386/i386.md insn-conditions.md \
        -Atmp-attrtab.c -Dtmp-dfatab.c -Ltmp-latencytab.c
make[3]: *** [s-attrtab] Killed
make[3]: Leaving directory `/home/ec2-user/gcc-7.1.0/build/gcc'
make[2]: *** [all-stage1-gcc] Error 2
make[2]: Leaving directory `/home/ec2-user/gcc-7.1.0/build'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/home/ec2-user/gcc-7.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-7.1.0/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/gcc-7.1.0/lib64/:$LD_LIBRARY_PATH

を追加する。これで、マスターノードでコンパイルしたり、実行したりできる。

計算ノードで使えるようにするには、投入するジョブスクリプトに

export LD_LIBRARY_PATH=$HOME/local/gcc-7.1.0/lib64/:$LD_LIBRARY_PATH

を追加しておく必要がある。

gccのインストール方法(rootではなく、ユーザーが自分のホームディレクトリにインストールする場合)

まずはダウンロードしてくる。ミラーサイトはこちらから

wget ftp://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2

解凍する

tar xvjf gcc-6.1.0.tar.bz2

ディレクトリを移動する

cd gcc-6.1.0/

ビルド用のディレクトリを作成する

mkdir build

そこへ移動

cd build

rootではなくユーザーのホームディレクトリにインストール

../configure --prefix=${HOME}/local/gcc-6.1.0
make

注:今のGCCは"make"だけで stage2やstage3までbuildしてくれる

make install

最適化オプション

-O3 -fomit-frame-pointer -funroll-loops -march=opteron -ffast-math

make

makeを並列で行うには、-jオプションをつければよい。bashを使っている場合は、.bashrcで

alias make='make -j'

の様に指定しておくとよい。

CentOSでg++を使うには

CentOSでは他のディストリビューションと少し違い、

# yum install gcc-c++

とすると、g++がインストールされる。

gccのインストール

# 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かどうかの判定

gccでコンパイルした場合、__GNUC__がdefineされている。

#ifdef __GNUC__
//gccの場合にコンパイルされる
#endif


最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて17.04、18.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2014 Chikuma Engineering Co., Ltd. All Rights Reserved.