web-dev-qa-db-ja.com

g ++ 4.6は、ヘッダーcstringで必要とされる<bits / c ++ config.h>ファイルを発行しません

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を使用しています

何が悪かったのか?

20
A. K.

ファイル 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またはプラットフォームに必要なもの。

29
rodrigo

これは、clang ++がヘッダーファイルを検索する方法に関連している可能性があります。

4か月前のFedora 15の修正方法のサンプルパッチ here が見つかります。

詳細はこちら Red Hat bugzilla post を参照してください。

0
Coren