Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@tukiyo3

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

More than 1 year has passed since last update.

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

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に対して(略)

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tukiyo3

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?