C ++ 11线程错误运行时

时间:2013-10-14 11:19:07

标签: c++ multithreading c++11

您好我在C ++ 11中遇到线程问题。我有使用g ++ 4.8.1的ubuntu 64bit 13.10(测试)。 我试着编译代码:

#include <thread>

void func()
{
   // do some work
}

int main()
{
   std::thread t(func);
   t.join();
   return 0;
}

带选项:-std = c ++ 11 -pthread -lpthread。编译成功,但当我尝试运行它时,我收到了一个错误:

  

在抛出'std :: system_error'实例后终止调用   what():启用多线程以使用std :: thread:不操作   允许

3 个答案:

答案 0 :(得分:6)

我认为其他答案有点误导。重要的是你只需要-pthread标志的顺序是重要!

-pthread会自动与libpthread关联,并且会正确执行此操作。请注意,您需要在编译链接代码时提供这个选项(当然,除非您立即执行所有操作)。

只有当您明确提供-lpthread时,您放置的位置顺序可能很重要,但如前所述,使用-pthread时不应明确添加。

答案 1 :(得分:5)

你可能遇到与此处提到的相同的问题:
https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1228201

将此标志添加到命令行。它将迫使g ++与给定的库链接。

-Wl,--no-as-needed

答案 2 :(得分:2)

似乎订单很重要,或者至少是这个帖子中的内容: C++ Threads, std::system_error - operation not permitted?