【发布时间】:2016-12-04 16:23:36
【问题描述】:
计划:
#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
使用--enable-threads 重新编译 GCC。仍然产生同样的错误。
编辑 2
使用--enable-libstdcxx-threads 重新编译 GCC。仍然产生同样的错误。
编辑 3
使用--enable-threads=posix 重新编译 GCC。仍然产生同样的错误。
编辑 4
想说明我是使用分支 gcc-6_2_0-release 上的 repo 构建的。
【问题讨论】:
-
您可能已经构建了 gcc,但没有对 C++ 的线程支持。试试
g++.exe -dM -E -x c++ -std=c++11 test.cpp | egrep '_GLIBCXX_HAS_GTHREADS|_GLIBCXX_USE_C99_STDINT_TR1。如果您没有看到这两个定义,则您的构建没有线程支持。不知道是否还需要--enable-threads。 -
我只看到
#define _GLIBCXX_USE_C99_STDINT_TR1 1。我猜我用--enable-threads重建。为什么这不是 2016 年的默认值? -
@n.m.我刚刚用
--enable-threads完成了构建,但我仍然遇到同样的错误。我还缺少其他东西吗? -
不知道。 grep 构建日志以获取有关线程的消息。
-
不应该是
--enable-threads=posix吗?我认为gcc配置文档中提到了这一点:gcc.gnu.org/install/configure.html
标签: multithreading c++11 gcc stl