21

bits/c++config.h头文件所需的 c++ 包含目录中没有调用cstring文件。但是当我包含标题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

什么地方出了错?

4

2 回答 2

32

该文件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

第一个用于 64 位,第二个用于 32 位。

因此,只需添加-I/usr/include/c++/4.6/i686-linux-gnu-I/usr/include/c++/4.6/i686-linux-gnu/64您的平台所需的任何内容。

于 2012-02-08T22:28:22.020 回答
0

它可能与 clang++ 如何搜索其头文件有关。

您可以在此处找到 15、4 个月前他们如何为 fedora 修复它的示例补丁。

有关更多信息,请参阅此red hat bugzilla 帖子

于 2012-02-08T22:32:16.200 回答