「インストール - GCC」の版間の差分
| 29行目: | 29行目: | ||
または、以下のコマンドを実行してダウンロードする。<br> | または、以下のコマンドを実行してダウンロードする。<br> | ||
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.1.0/gcc-10.1.0.tar.xz | wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.1.0/gcc-10.1.0.tar.xz | ||
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.1.0/sha512.sum | |||
tar zxvf gcc-10.1.0.tar.gz -o src | tar zxvf gcc-10.1.0.tar.gz -o src | ||
<br> | |||
sha512.sumファイルを使用して、ダウンロードしたgcc-10.1.0.tar.xzファイルのチェックを行う。<br> | |||
<code>sha512sum: gcc-8.2.0.tar.gz: No such file or directory</code>や<code>gcc-8.2.0.tar.xz: FAILED open or read</code>というメッセージが表示されるが、<br> | |||
gcc-10.1.0.tar.gzファイルをダウンロードしていないため表示されているだけなので、特に問題ない。<br> | |||
sha512sum --check sha512.sum | |||
<br> | <br> | ||
ここでは、ホームディレクトリにインストールを行う。<br> | ここでは、ホームディレクトリにインストールを行う。<br> | ||
| 35行目: | 41行目: | ||
<br> | <br> | ||
以下のコマンドを実行して、GCCをビルドおよびインストールする。<br> | 以下のコマンドを実行して、GCCをビルドおよびインストールする。<br> | ||
オプションの説明を記載する。 | |||
* enable-languages=c,c++,fortran | |||
*: C、C++、FORTRANのコンパイラをビルド対象とする。 | |||
* disable-bootstrap | |||
*: 3-stage bootstrap buildの無効化。 | |||
* disable-multilib | |||
*: 64bit専用コンパイラとする(OSが64bitの場合は指定) | |||
cd gcc-10.1.0 | cd gcc-10.1.0 | ||
mkdir build && cd build | mkdir build && cd build | ||
2020年10月13日 (火) 14:34時点における版
概要
CentOSやSUSEのパッケージ管理システムで提供されているGCCのバージョンは古い可能性がある。
最新のGCCでは、C++11からC++17を完全にサポートしており、また、C++20を部分的にサポートしている。
また、最新のGCCでは、C11およびC++14のサポートがデフォルトで有効になっている。(-std=c11または-std=c++14を追加する必要はない)
依存関係のライブラリのインストール
まず、システムが最新であることを確認する。
# CentOS sudo yum update # SUSE sudo zypper update
依存関係のライブラリを、以下に示す2種類のいずれかの方法でインストールする。
- パッケージ管理システムの使用
# CentOS sudo yum install gmp-devel mpfr-devel libmpc-devel # SUSE sudo zypper install gmp-devel mpfr-devel mpc-devel
- GCCのモジュールの使用
./contrib/download_prerequisites
GCCのインストール
GCCの公式Webサイトにアクセスして、GCCのソースコードをダウンロードして解凍する。
または、以下のコマンドを実行してダウンロードする。
wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.1.0/gcc-10.1.0.tar.xz wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-10.1.0/sha512.sum tar zxvf gcc-10.1.0.tar.gz -o src
sha512.sumファイルを使用して、ダウンロードしたgcc-10.1.0.tar.xzファイルのチェックを行う。
sha512sum: gcc-8.2.0.tar.gz: No such file or directoryやgcc-8.2.0.tar.xz: FAILED open or readというメッセージが表示されるが、
gcc-10.1.0.tar.gzファイルをダウンロードしていないため表示されているだけなので、特に問題ない。
sha512sum --check sha512.sum
ここでは、ホームディレクトリにインストールを行う。
mkdir -p ~/InstallSoftware/GCC/gcc-10_1_0 && cd ~/InstallSoftware/GCC
以下のコマンドを実行して、GCCをビルドおよびインストールする。
オプションの説明を記載する。
- enable-languages=c,c++,fortran
- C、C++、FORTRANのコンパイラをビルド対象とする。
- disable-bootstrap
- 3-stage bootstrap buildの無効化。
- disable-multilib
- 64bit専用コンパイラとする(OSが64bitの場合は指定)
cd gcc-10.1.0 mkdir build && cd build ../configure -v --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=$HOME/InstallSoftware/GCC/gcc-10_1_0 --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --disable-bootstrap --program-suffix=-10.1 make -j 8 make install-strip
インストールしたGCCへ環境変数のパスを通す。
vi ~/.profile # .profileファイル export export PATH=$HOME/InstallSoftware/GCC/gcc-10_1_0/bin:$PATH export LD_LIBRARY_PATH=$HOME/InstallSoftware/GCC/gcc-10.1.0/lib64:$LD_LIBRARY_PATH
最後に、PCを再起動する。
C++14 / C++17のサンプルコード
C++14では、ラムダ式のパラメータのタイプにautoが使用できる。
// sample.cpp
#include <iostream>
int main()
{
std::cout << [](auto a, auto b) { return a + b; } (5, 6) << std::endl;
std::cout << [](auto a, auto b) { return a + b; } (5.23, 6.45) << std::endl;
return 0;
}
# 実行 g++-10.1 -Wall -pedantic sample.cpp -o sample ./sample # 出力 11 11.68
このページの冒頭で述べたように、GCC 10.1は、C++17を完全にサポートしている。
以下の例では、static_assertへのC++17変更の使用例をテストしている。
// sample.cpp
#include <type_traits>
#include <iostream>
struct A
{
int foo;
};
struct B
{
int foo = 0;
};
template <typename T>
void print(const T& a)
{
static_assert(std::is_pod<T>::value);
std::cout << a.foo << '\n';
}
int main()
{
A x{1};
B y{2};
B z;
print<A>(x);
print<B>(y);
print<B>(z);
return 0;
}
コンパイルを行うには、-std=c++17オプションを付与する。
また、上記のコードの17行目と24行目でトリガーされたコンパイルエラーが表示される。
# 実行
g++-10.1 -std=c++17 -Wall -pedantic sample.cpp -o sample
# 出力
sample.cpp: In instantiation of ‘void print(const T&) [with T = B]’:
sample.cpp:24:13: required from here
sample.cpp:14:33: error: static assertion failed
17 | static_assert(std::is_pod<T>::value);
もし、C++11の構文の詳細に興味がある場合は、Bjarne StroustrupによるC++プログラミング言語を読むことを推奨する。