11
12

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 3 years have passed since last update.

g++ (GCC) が対応している言語規格(std値) を確認する方法

Last updated at Posted at 2019-10-18

サポートしている 言語規格一覧の確認

g++ -v --help 2>/dev/null | grep -E "^\s+\-std=.*$"

言語規格の指定方法

export CXXFLAGS="-std=gnu++98"

ABI互換性

どの言語規格を指定すればよいか

GCC(より具体的には、libstdc++)は、ABIの安定性を保証するために労を惜しみませんが、この保証はlibstdc++の中のC++のすべての部分に及ぶわけではありません。公式には、3.4以降のバージョンにおいて、GCC/libstdc++はC++98/C++03 ABIの安定性のみを保証し、それ以上ではありません。このことはC++11に依存するパッケージに関しては重大です。GCCはC++11 ABIの安定性の保証をバージョン5.1以降でのみ提供しています。これは、gccのバージョン(マイナーバージョンであっても)の変更(4.7.3 -> 4.7.4など)はC++11のコードからビルドされたバイナリにABI破壊をもたらす、ということを意味しています。

ということから、C++98 か C++03 、そしてGCC5.1以降では C++11 を指定することも良いようですね。

江添さんがC++11について本を出されたのは久しぶりのメジャーアップデートだったからなのでしょう。 本の虫: C++11参考書の公開:C++11の文法と機能

  • 昔は C++11 は C++0x と呼ばれていた。
  • C++14はC++11のマイナーアップデート。
  • C++17 は メジャーアップデート

なお C++11の文法と機能 について C++11: Syntax and Featureで読むことができる。

GCC 4.1 / GCC 5.1

そう、C++です、ほとんどの非互換はC++ ABIの中で生じるためです。もしあなたがGCC 4.1やGCC 5.1へアップグレードした場合、おそらくABIの問題に直面することになるでしょう。

これを防ぐには、GCC 3からGCC 4.1へのアップグレードの場合はlibstdc++.so.5に、GCC 4からGCC 5.1へのアップグレードの場合はlibstdc++.so.6に対して(略)

11
12
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
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?