您好我在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:不操作 允许
答案 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?