5

您好,我在 C++11 中遇到线程问题。我有 ubuntu 64bit 13.10(testing) 和 g++ 4.8.1。我试图编译代码:

#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:不允许操作

4

3 回答 3

6

我认为其他答案有点误导。重要的是您只需要-pthread. 这个标志的顺序并不重要!

-pthread将自动链接libpthread并正确链接。请注意,在编译链接代码时都需要提供此选项(当然,一次执行所有操作时除外)。

仅当您-lpthread明确提供时,放置位置的顺序可能很重要,但如前所述,您不应在使用-pthread.

于 2013-10-14T12:25:58.510 回答
5

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

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

-Wl,--no-as-needed
于 2013-10-14T11:37:46.893 回答
2

似乎顺序很重要,或者至少,这就是这个线程中所说的: C++ Threads, std::system_error - operation not allowed?

于 2013-10-14T11:23:15.243 回答