g ++ libstdc ++-v3“线程”不是“ std”的成员

时间:2019-05-12 23:25:08

标签: c++11 gcc

我正在构建gcc 9.10,它在c线程中很好用,但是我在g ++和libstdc ++-v3中做错了,我只是不知道什么。

我编译gcc / g ++,glibc和libstdc ++-v3 我看到该文件位于include / c ++ / 9.1.0 / threads 当我去编译一个简单的测试程序时,我得到了

error: ‘thread’ is not a member of ‘std’

C pthread测试程序编译

#include <pthread.h>
int main(){
    tpthread_t t;
}

C测试程序编译

#include <threads.h>
int main(){
    thrd_t t;
}

Cxx测试程序无法编译

#include <thread>
int main(){
    std::thread t;
}

出现错误

error: ‘thread’ is not a member of ‘std’

查看头文件include / c ++ / 9.1.0 / threads

#if defined(_GLIBCXX_HAS_GTHREADS)

如果未定义,它将跳过所有内容 我该如何检查情况是否如此,为什么?

我做了这个小测试,它编译后向我指示_GLIBCXX_HAS_GTHREADS未定义

int main(){
    #if defined(_GLIBCXX_HAS_GTHREADS)
    123 here error
    #endif
}

我在编译libstdc ++-v3时使用

../libstdc++-v3/configure -v --enable-libstdcxx-threads=yes

即使我认为应该在linux x64系统上默认启用线程

另一个问题对我的情况没有帮助,那是很久以前的事了,海湾合作委员会已经改变了。一则评论似乎触及了我的问题,但没有深入探讨

If you look in the thread header, it appears that the class only exists #if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1). I'm not sure though, what you'd have to do to have those defined

那是我遇到的问题,但没有解决办法

1 个答案:

答案 0 :(得分:0)

答案是使用--enable-threads = yes配置,我不知道为什么很难找到它,为什么那不是默认值