你好,我对C++11中的线程有问题,我用g++ 4.8.1测试了ubuntu64bit 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”实例后调用终止 什么():允许多线程使用std::线程:不允许的操作
发布于 2013-10-14 12:25:58
我认为其他的答案有点误导。重要的是,您只需要-pthread
。这个旗子的顺序不重要!
-pthread
将自动与libpthread
链接,并将正确地进行链接。请注意,在编译和链接代码时,需要同时提供此选项(当然,当您同时完成所有操作时除外)。
只有在显式提供-lpthread
时,放置位置的顺序才可能很重要,但正如前面提到的,在使用-pthread
时不应该显式地添加它。
发布于 2013-10-14 11:37:46
您可能遇到了与这里提到的相同的问题:
https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1228201
将此标志添加到命令行。它将强制g++与给定的库链接。
-Wl,--no-as-needed
发布于 2013-10-14 11:23:15
似乎秩序很重要,或者至少,这就是在这个线程中所说的:error - operation not permitted?
https://stackoverflow.com/questions/19358994
复制相似问题