Проблема с std::thread из С++ 11

У меня возникли проблемы с попыткой скомпилировать программу с многопоточностью из стандартной библиотеки шаблонов. Он возвращает мне неясную ошибку, когда я пытаюсь скомпилировать следующую программу:

#include <iostream>
#include <thread>

void foo()
{
    std::cout << "Thread 1\n";
}

int main(int argc, char** argv)
{
    std::thread tr(foo);
    std::cout << "Main thread\n";
    tr.join();

    return 0;
}

Я не понимаю ошибки:

/tmp/ccE8EtL1.o : In the function « std::thread::thread<void (&)()>(void (&)()) » :
 file.cpp:(.text._ZNSt6threadC2IRFvvEJEEEOT_DpOT0_[_ZNSt6threadC5IRFvvEJEEEOT_DpOT0_]+0x21) : undefined reference to « pthread_create »
  collect2: error : ld has return 1 execution status code

Я компилирую его с помощью:

g++ -std=c++14 file.cpp -o test -Wall

Кто-нибудь может мне помочь ?


person Harry333Cover    schedule 04.02.2017    source источник


Ответы (1)


Передайте -pthread компилятору. Этот флаг объединяет то, что необходимо для компиляции и компоновки библиотеки pthread. (-lpthread не всегда достаточно). См. этот вопрос.

person BoBTFish    schedule 04.02.2017
comment
Спасибо, это было решение \o/ - person Harry333Cover; 05.02.2017