g++ 4.6 issue no <bits/c++config.h> file as required by the header cstring

34,300

The file bits/c++config.h is the platform specific include relative to the current compiler, so it is hidden in another directory, searched by default by g++, but not by clang++, as it seems.

In my machine, running locate c++config.h gives the following (relevant) files:

/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

The first one is for 64-bits and the second one for 32-bits.

So just add -I/usr/include/c++/4.6/i686-linux-gnu or -I/usr/include/c++/4.6/i686-linux-gnu/64 or whatever you need for your platform.

Share:
34,300
A. K.
Author by

A. K.

llvm + clang contributor Compiler Engineer, Facebook, California Twitter: hiraditya

Updated on July 09, 2022

Comments

  • A. K.
    A. K. almost 2 years

    There is no file called bits/c++config.h in the c++ include directory which is required by the cstring header file. But when I include the the header cstring and compile with g++, it does not give me error. The problem occurred when I tried to compile the program with clang++ compiler in the following way.

    $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>
    

    I am using g++ 4.6.1 on Ubuntu 11.04

    What went wrong?

  • A. K.
    A. K. over 12 years
    yes i found out it is there in the same directory what you got. thanks
  • A. K.
    A. K. over 12 years
    While installing clang I did edit the Frontend/InitHeaderSearch.cpp file to include the required directories to address the problem. Still I got this error. For now, I have added all the required paths in my CMakeLists.txt to address this issue.
  • Brien Coffield
    Brien Coffield almost 11 years
    If you don't have the appropriate c++config.h for your architecture, install libstdc++-devel from your repository.
  • Eugene B
    Eugene B almost 11 years
    in some cases this might not be enough: sometimes you need -I/usr/include/c++/4.6/i686-linux-gnu/c++/4.6 I use -I/usr/include/i386-linux-gnu/c++/4.7/ for my machine and 4.7 version of gcc and it all works