Eclipse内容辅助无法识别std :: thread,但可以正确编译

时间:2014-07-18 23:13:39

标签: c++ eclipse ubuntu eclipse-cdt stdthread

我正在运行Ubuntu 14.04。

我重现的步骤:

  1. 创建一个新的C ++项目(New - > C ++ - > Hello World项目),我称之为TestStdThread

  2. 将主文件中的代码更改为:

    #include <thread>
    #include <iostream>
    
    int main() {
        std::cout << "You have " << std::thread::hardware_concurrency() << " cores." << std::endl;
        return 0;
    }
    
  3. 转到TestStdThread - &gt;属性 - &gt; C / C ++ Build - &gt;设置 - &gt; GCC C ++编译器,并将命令选项从g++更改为g++ -std=c++11

  4. 转到TestStdThread - &gt;属性 - &gt; C / C ++ Build - &gt;设置 - &gt; GCC C ++编译器 - &gt;包括,将/usr/include添加到包含路径(-I),并将pthread.h添加到包含文件(-include)

  5. 转到TestStdThread - &gt;属性 - &gt; C / C ++ Build - &gt;设置 - &gt; GCC C ++链接器 - &gt;库,将pthread添加到库(-l),然后将/usr/lib/x86_64-linux-gnu添加到库搜索路径(-L)

  6. TestStdThread - &gt;建设项目

  7. 点击“运行”

  8. 没有构建错误。 Eclipse告诉我项目有错误并且询问我是否想要运行它,当我说是的时,输出是正确的:You have 4 cores.。但是,Eclipse仍然用红色标记了std::thread::hardware_concurrency部分,并将其报告(悬停时),因为“函数'hardware_concurrency'无法解析”,而std::thread在键入{{1}时未显示} Ctrl + 空格

    这是我用来查找std::文件在pthread内的位置的bash命令(省略/usr,因为它包含了许多我不想要的doc文件) :

    /usr/share

1 个答案:

答案 0 :(得分:10)

转到Project - &gt; Properties - &gt; C/C++ General - &gt; Preprocessor include paths, etc - &gt; Providers - &gt; CDT GCC Builtin Compiler Settings并将-std=c++11附加到编译器规范。

您也可以为前往Window - &gt;的所有项目执行此操作Preferences - &gt; C/C++ - &gt; Build - &gt; Settings - &gt; Discovery并将-std=c++11附加到CDT GCC Builtin Compiler Settings规范。

确保之后重新编制项目索引。

这些说明适用于Eclipse Luna(4.4.0),对于以前的版本,路径类似。