g ++ libstdc ++ - v3 'thread' не является членом 'std' - PullRequest
0 голосов
/ 13 мая 2019

Я собираю 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’

Просмотр заголовка включает / 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

Другой вопрос не помогает моей ситуациис давным-давно и GCC изменился.Один комментарий выглядит так, как будто он касается моей проблемы, но не углубляется

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 голосов
/ 13 мая 2019

Ответ состоял в том, чтобы настроить с помощью --enable-threads = да, я не знаю, почему это было так трудно найти, и почему это не по умолчанию

...