物理と数学とITのあれこれ

物理や数学、パソコンの設定とかプログラミングとかいろいろ書きなぐってます。

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を使う時に必要。(rootCERNが開発しているデータ解析フレームワークです)

-std=c++11 : c++11の機能を有効にする

 

コンパイラのバージョンの確認

 

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以降じゃないと使えないみたいだ。

以上!