Простая программа потока C++ не может быть скомпилирована

Следующее является моей 1-й многопоточной программой. Но в то время как это было скомпилировано, существует связывающаяся ошибка. Часть сообщения об ошибке:

std::thread::thread<void (&)(int), int&>(void (&)(int), int&):
test.cpp (.text._ZNSt6threadC2IRFviEJRiEEEOT_DpOT0_[_ZNSt6threadC5IRFviEJRiEEEOT_DpOT0_]+0x33): undefined reference pthread_create
collect2: error ld return 1

#include<thread>

void f(int i) {}

int main() {
        std::thread t(f, 1);
        t.join();
        return 0;
}
0
задан 15 March 2018 в 11:17

3 ответа

Необходимо скомпилировать с -pthread как опция компиляции.

Я заставил Ваш код компилировать с этим (хотя я добавил -Wall функция, чтобы дать мне все предупредительные надписи):

g++ -pthread -out foo.exe foo.cpp

(где foo.cpp было входное имя файла, которое я использовал содержащий Ваш код),

3
ответ дан 30 October 2019 в 06:17

Даже если Ваша программа использует функцию поточной обработки 11 C++, необходимо указать '-pthread' для успешной компиляции программы.


Читайте ниже потока для большего количества информации https://bugs.debian.org/cgi-bin/bugreport.cgi? bug=763369

0
ответ дан 30 October 2019 в 06:17

Я исправил ту же проблему (неопределенная ссылка на Pthread_create). Так что проблема не в вашем коде, а в аргументе, который был упущен при создании объектного файла в компиляторе G ++

void threadFun()
{
    cout<<"\n"<<"   "<<"INSIDE THREAD"<<"\n";
}

int main()
{
    thread t1(threadFun);
    t1.join();

    return 0;
}

Вот проблема:

Я исправил это следующим образом:

1
ответ дан 7 February 2020 в 08:09

Другие вопросы по тегам:

Похожие вопросы: