g ++ 4.6根据头文件cstring的要求不发出<bits/c ++ config.h>文件

A. *_* K. 20 c++ g++ clang cstring clang++

bits/c++config.hcstring头文件所需的c ++ include目录中没有调用文件.但是当我包含标题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>
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu 11.04上使用g ++ 4.6.1

什么地方出了错?

rod*_*igo 29

该文件bits/c++config.h是特定于平台的相对于当前编译器的包含,因此它隐藏在另一个目录中,默认情况下由g ++搜索,但不是像clang ++那样搜索.

在我的机器中,running 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
Run Code Online (Sandbox Code Playgroud)

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

所以只需为您的平台添加-I/usr/include/c++/4.6/i686-linux-gnu或者-I/usr/include/c++/4.6/i686-linux-gnu/64任何您需要的东西.

  • 如果您没有适合您的体系结构的 c++config.h,请从您的存储库安装 libstdc++-devel。 (2认同)