来自 c++11 的 std::thread 问题

Posted

技术标签:

【中文标题】来自 c++11 的 std::thread 问题【英文标题】:Issue with std::thread from c++11 【发布时间】:2017-02-04 22:54:54 【问题描述】:

我在尝试从标准模板库编译具有多线程的程序时遇到了一些麻烦。 当我尝试编译以下程序时,它返回给我一个模糊的错误:

#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

谁能帮帮我?

【问题讨论】:

【参考方案1】:

-pthread 传递给编译器。 This flag combines what is necessary to compile and link the pthread library (-lpthread is not always enough)。见this question。

【讨论】:

谢谢,解决了\o/ 为了完整性:g++ - Why do I have to pass “-pthread” option while using std::thread?

以上是关于来自 c++11 的 std::thread 问题的主要内容,如果未能解决你的问题,请参考以下文章

C++11 的 std::thread 是不是与 POSIX 信号量兼容?

C++11 std::thread 和虚函数绑定

在 C++11 中通过引用 std::thread 传递对象

C++11:如何在 std::thread 的执行函数退出后立即加入它?

使用 c++11 std::thread 获取段错误

混合 C++11 std::thread 和 C 系统线程(即 pthreads)