コミケ告知

サークル活動の詳細は circle タグの記事へ。
2013年3月19日火曜日

g++ -std=c++11で色々と"not declared"が発生する場合

状況

  • g++でコンパイル
  • -stdの指定をしなければ万事うまくいく
  • -std=c++11を指定すると、not declaredになる関数がたくさん出る
    • snprintf, strdup, fileno等 
例:
hoge.cpp:20:21: error: ‘strdup’ was not declared in this scope

解決方法

-std=c++11ではなく、-std=gnu++11を使用する。

参考にしたのは、2年ほど前のstackoverflowの記事でした。
acceptされた解答にあるように、厳密に標準のC++の関数ではなくてGNU拡張であるため、こういうことが起きるようです。

使用したg++はCygwin上の4.7.2でした。

2 件のコメント:

  1. > std=c++11ではなく、-std=gnu++11を使用する。
    これは本当に盲点でした。
    今、debian でも c++11 への切り替えが始まっているようですが、
    この件が抜け落ちているようで、後で、問題になる気がします。
    貴重なヒントをありがとうございます。

    返信削除
  2. あちこち引っかかりそうですね。
    幸い単純な解決法なので、知っていれば手間は大したことないですが。

    返信削除