cstring
ヘッダーファイルで必要なc ++インクルードディレクトリにbits/c++config.h
というファイルはありません。しかし、ヘッダーcstring
を含めてg++
でコンパイルすると、エラーは発生しません。この問題は、clang++
コンパイラを使用してプログラムを次のようにコンパイルしようとしたときに発生しました。
$clang++ -cc1 -I/usr/include -I/usr/include/c++/4.6.1 -I/usr/lib/gcc/i686-linux-gnu/4.6.1 -I/usr/include/i386-linux-gnu -I opt_149739_build/include hello.cpp
In file included from /media/space/hello.cpp:2:
In file included from /media/space/opt_149739_build/include/clang/Driver/Driver.h:13:
In file included from /media/space/opt_149739_build/include/clang/Basic/Diagnostic.h:17:
In file included from /media/space/opt_149739_build/include/clang/Basic/DiagnosticIDs.h:18:
In file included from /media/space/opt_149739_build/include/llvm/ADT/StringRef.h:14:
/usr/include/c++/4.6.1/cstring:42:10: fatal error: 'bits/c++config.h' file not found
#include <bits/c++config.h>
Ubuntu 11.04でg ++ 4.6.1を使用しています
何が悪かったのか?
ファイル bits/c++config.h
は現在のコンパイラに関連するプラットフォーム固有のインクルードであるため、別のディレクトリに隠されており、デフォルトではg ++では検索されますが、clang ++では検索されないようです。
私のマシンでは、locate c++config.h
は、次の(関連する)ファイルを提供します。
/usr/include/c++/4.6/i686-linux-gnu/64/bits/c++config.h
/usr/include/c++/4.6/i686-linux-gnu/bits/c++config.h
1つ目は64ビット用、2つ目は32ビット用です。
したがって、-I/usr/include/c++/4.6/i686-linux-gnu
または-I/usr/include/c++/4.6/i686-linux-gnu/64
またはプラットフォームに必要なもの。
これは、clang ++がヘッダーファイルを検索する方法に関連している可能性があります。
4か月前のFedora 15の修正方法のサンプルパッチ here が見つかります。
詳細はこちら Red Hat bugzilla post を参照してください。