g++でc++11の機能を使ってコンパイルする時のメモ
コンパイルの方法
g++ -std=c++11 -O2 -Wall ‘root-config --cflags —libs’ -o test test.C
とすればtestという名前のオブジェクトファイルができる。
./test
とかすれば実行される。
main関数に引数を与える場合は
./test (引数1) (引数2) とかやれば通る。
一度書いてしまえば毎回コピペなのだけど、一応オプションの意味も書いておく。
基本形は
g++ -o test test.C
でtest.Cをコンパイルして、testという名前という名前の実行ファイルを作ってくれる。
-O2 : 最適化を行なってくれる。最適化を行うと、コンパイルの時間はかかるが実行時間とかメモリ使用量が軽減されるらしい。
-Wall : 警告を表示するオプション
‘root-config —flags —libs : rootを使う時に必要。(rootはCERNが開発しているデータ解析フレームワークです)
コンパイラのバージョンの確認
unorderd mapなど、c++11から実装された新しいテンプレートクラスを使うにはコンパイラもそれに対応していなければならない。
環境によってコンパイルが通らないことがある。
$ gcc -dumversion
でバージョンの確認。
4.8.2
とか出てくる。もうちょい詳しく見たいときは
$gcc —version
とすれば詳細がいろいろ出てくる。
gccの部分をg++にすればg++のバージョンも出てくる。
どちらもほぼ同じだった。
このg++は2014年と書いてある。この場合はc++11の機能は使えた。
一方で4.4.7 (201203013)のほうだとこけた。
cc1plus: error: unrecognized command line option “-std=c++11”
とでる。「c++11なんて知らんわ」というエラー。
https://gcc.gnu.org/projects/cxx-status.html#cxx11
このページを見た限り、バージョン4.7だか4.8以降じゃないと使えないみたいだ。
以上!