Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eclipse content assist doesn't recognize std::thread, but compiles correctly

I am running Ubuntu 14.04.

Steps I took to reproduce:

  1. Create a new C++ project (New -> C++ -> Hello World project), which I called TestStdThread

  2. Change the code in the main file to this:

    #include <thread>
    #include <iostream>
    
    int main() {
        std::cout << "You have " << std::thread::hardware_concurrency() << " cores." << std::endl;
        return 0;
    }
    
  3. Go to TestStdThread -> Properties -> C/C++ Build -> Settings -> GCC C++ Compiler, and change the Command options from g++ to g++ -std=c++11

  4. Go to TestStdThread -> Properties -> C/C++ Build -> Settings -> GCC C++ Compiler -> Includes, add /usr/include to the Include paths (-I), and add pthread.h to the Include files (-include)

  5. Go to TestStdThread -> Properties -> C/C++ Build -> Settings -> GCC C++ Linker -> Libraries, add pthread to the Libraries (-l), and add /usr/lib/x86_64-linux-gnu to the Library search path (-L)

  6. TestStdThread -> Build Project

  7. Click "Run"

There were no build errors. Eclipse told me that the project had errors and asked if I wanted to run it anyway, and when I said yes, the output was, correctly: You have 4 cores.. However, Eclipse still underlined the std::thread::hardware_concurrency part in red, and reported it (on hover) as "Function 'hardware_concurrency' could not be resolved," and std::thread didn't show up when typing std:: Ctrl+Space.

This is the bash command I used to find where my pthread files were located within /usr (/usr/share omitted as it contains lots of doc files that I'm not looking for):

llama@llama-Satellite-E55-A:/usr$ find -name "*pthread*" -not -path "./share/*"
./include/pthread.h
./include/x86_64-linux-gnu/bits/pthreadtypes.h
./lib/x86_64-linux-gnu/pkgconfig/pthread-stubs.pc
./lib/x86_64-linux-gnu/libpthread.so
./lib/x86_64-linux-gnu/libpthread_nonshared.a
./lib/x86_64-linux-gnu/libgpgme-pthread.so.11.11.0
./lib/x86_64-linux-gnu/libgpgme-pthread.so.11
./lib/x86_64-linux-gnu/libpthread.a
./lib/perl/5.18.2/bits/pthreadtypes.ph
./lib/debug/lib/x86_64-linux-gnu/libpthread-2.19.so
like image 455
tckmn Avatar asked Jul 18 '14 23:07

tckmn


1 Answers

Go to Project -> Properties -> C/C++ General -> Preprocessor include paths, etc -> Providers -> CDT GCC Builtin Compiler Settings and append -std=c++11 to the compiler specs.

You can also do this for all projects going to Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery and append -std=c++11 to the CDT GCC Builtin Compiler Settings specs.

Make sure to reindex your project afterwards.

These instructions are for Eclipse Luna (4.4.0), for previous versions the paths are similar.

like image 99
codestation Avatar answered Nov 06 '22 06:11

codestation