How to make Eclipse CDT's Linux GCC toolchain resolve C++ standard library headers?

In Ubuntu 12.04 LTS I installed the Eclipse CDT plugin and opened the new hello world project to just test everything out. When I was creating the project, I chose the only toolchain: "Linux GCC"

When the project is created, however, it says that

#include<iostream>
#include<cstdlb>

are unresolved. Thus, lines with cout and endl can't be used and it cannot find std.

using namespace std; is also causing problems.

How can I get my #include directives for standard library headers recognized, to support code using the std namespace?


If you had the same issue I did, I suspect that your project builds but code-completion / code highlighting fails? I've just found some notes that may be useful. Here's what I did:

  • Project->Properties

  • C/C++ General

  • Paths and Symbols

  • select the appropriate language

  • Click "Add" and add the compiler-version specific directories

For language 'GNU C++' I added:

  /usr/include
  /usr/include/c++/4.6
  /usr/include/c++/4.6/bits
  /usr/include/i386-linux-gnu
  /usr/include/i386-linux-gnu/bits
  /usr/include/c++/4.6/debug
  /usr/include/c++/4.6/i686-linux-gnu
  /usr/include/c++/4.6/i686-linux-gnu/bits

For "GNU C" I added:

  /usr/include
  /usr/include/i386-linux-gnu
  /usr/include/i386-linux-gnu/bits

TBH, I don't think all the directories above are actually required (you could probably remove the 'bits' directories) but the list above worked for me at the time.

I am now using Eclipse Indigo (version 3.7.2) from eclipse.org and it automatically finds and adds the correct include directories. The list is different for me:

/usr/include/c++/4.6
/usr/include/c++/4.6/i686-linux-gnu
/usr/include/c++/4.6/backward
/usr/lib/gcc/i686-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/i686-linux-gnu/4.6/include-fixed
/usr/include/i386-linux-gnu
/usr/include

Clearly, only add the include directories that actually exist on your system ;-)