2016-12-04 35 views
0

计划:GCC 6.2.0线程不是性病的成员

#include <thread> 

int main(void) 
{ 
    std::thread t; 
    return 0; 
} 

test.cpp: In function ‘int main()’: 
test.cpp:6:5: error: ‘thread’ is not a member of ‘std’ 
    std::thread t; 
    ^~~ 

GCC信息:

$ g++ test.cpp -H 
. /home/nathan/development/toolchain/gnu/x86_64-unknown-linux-gnu/include/c++/6.2.0/thread 

$ gcc -v 
Using built-in specs. 
COLLECT_GCC=gcc 
COLLECT_LTO_WRAPPER=/home/nathan/development/toolchain/gnu/x86_64-unknown-linux-gnu/libexec/gcc/x86_64-pc-linux-gnu/6.2.0/lto-wrapper 
Target: x86_64-pc-linux-gnu 
Configured with: ../gcc/configure --prefix=/home/nathan/development/toolchain/gnu/x86_64-unknown-linux-gnu --enable-languages=c,c++,fortran --disable-multilib --enable-threads=posix --enable-libstdcxx-threads 
Thread model: posix 
gcc version 6.2.0 (GCC) 

使用STL其他地方工作的就好了,它只是thread失败了。我在 错过了什么?配置后,GCC将选择线程模型。

编辑1

重新编译GCC与--enable-threads。仍然产生相同的错误。

编辑2

重新编译GCC与--enable-libstdcxx-threads。仍然产生相同的错误。

编辑3

重新编译GCC与--enable-threads=posix。仍然产生相同的错误。

编辑4

要拍清楚,我是用分支gcc-6_2_0-release回购建设。

+1

你可能已经建立了GCC,不必穿线C++支持。试试'g ++。exe -dM -E -x C++ -std = C++ 11 test.cpp | egrep'_GLIBCXX_HAS_GTHREADS | _GLIBCXX_USE_C99_STDINT_TR1'。如果你没有看到两个定义,你的构建没有线程支持。不知道是否仍需要'--enable-threads'。 –

+0

我只看到'的#define _GLIBCXX_USE_C99_STDINT_TR1 1'。猜猜我用'--enable-threads'重建。为什么这不是2016年的默认设置? – nathansizemore

+0

@ n.m。我刚刚用'--enable-threads'完成构建,并且仍然出现相同的错误。我错过了别的吗? – nathansizemore

回答

1

试图多次以建立一个使用回购源之后,我最终还是放弃了,并利用释放tar包从GNU编译镜。不知道什么选择会作出从什么是在回购VS什么被释放的差异,但我只是用:

--enable-languages=c,c++ --disable-multilib

,一切工作正常。

+1

很高兴知道,我想我会注意到总是使用release tarballs ...你可以试着看看他们是否在某处放了“gcc”指令?确实可能会有一些额外的准备步骤,如从其他回购站复制代码或其他内容。 –