的std ::线程不是使用Eclipse开普勒MinGW的一个空间std的成员的std ::线程不是

2019-05-12 06:48发布

我试图编译基于Eclipse开普勒/ MinGW的4.8.1和Win32使用的std ::线程一个简单的C ++程序。 我希望以后在Windows上开发多年的移动发展在某些时候到Linux。

#include "test.h"
#include <thread>
#include <algorithm>


int main()
{
    Test::CreateInstance();

    std::thread(
        [&]()
        {
            Test::I()->Output2();
        }
    );

    Test::DestroyInstance();
    return 0;
}

忽略测试的目的(它只是产生一些输出,我将继续扩充,一旦我得到的std ::线程工作单身!)

我在Eclipse中设置g ++编译器设置:

-c -fmessage-length=0  -std=c++0x -Wc++0x-compat

我已经定义了预处理符号是:

__GXX_EXPERIMENTAL_CXX0X__

建筑抱怨的std ::线程不是性病的成员:

    10:30:13 **** Incremental Build of configuration Debug for project test ****
Info: Internal Builder is used for build
g++ -D__GXX_EXPERIMENTAL_CXX0X__ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -Wc++0x-compat -o main.o "..\\main.cpp" 
..\main.cpp: In function 'int main()':
..\main.cpp:11:2: error: 'thread' is not a member of 'std'
  std::thread(
  ^

有人建议可以什么我可能会丢失正确地得到这个编译?

Answer 1:

普通的MinGW不能支持std::thread 。 您需要使用具有“POSIX”穿启用的MinGW-W64工具链(如附带的Qt 5),这样的libstdc ++公开<thread><mutex><future>的功能。

你可以找到一个安装在这里 ,但你也可以尝试只更换整个mingw与工具链的根文件夹,这些软件包之一 。 您可以选择32位或64位,记住选择threads-posix ,如果你要玩std::thread和朋友。 无特殊编译器选项比你已经需要的那些其他。 我不建议使用-std=c++11 ,如果你不需要GCC 4.6的兼容性。



Answer 2:

我有同样的问题,虽然我用Cygwin的编译工作来代替。 我所做的就是定义符号__cplusplus与价值201103L为预处理器。 我还使用标志-std=c++11的编译器。 这种设置对所有配置(调试和释放)进行。

你可以检查的另一件事是,你已经正确安装了编译器,验证你的编译器安装目录由rubenvb解释。



Answer 3:

看到这里,可以添加到任何C ++ 11版本的MinGW的本地实现: https://github.com/meganz/mingw-std-threads这是一个只有头库,所以你只需要包括在您的项目标题,你会得到C ++ 11线程,同步原语。



文章来源: std::thread is not a member of namespace std using Eclipse Kepler MinGW