错误
我正在尝试使用 std::thread,但在运行时出现以下错误:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)
我的研究结果
有很多关于这个问题的提问,每一个回答都说类似的事情: 我必须用"-pthread"或"-lpthread"来构建。一些人还说要添加"-Wl,--no-as-needed"。
我尝试了很多方法,但没有一个起作用。
细节
我正在使用Lubuntu上的Code::Blocks 12.11、GNU GCC编译器进行编译。 在编译器设置菜单中,编译器标志下我勾选了以下选项
"Have g++ follow the C++11 ISO C++ language standard [-std=c++11]"
在其他选项下,我写了答案中给出的内容,以下是一个例子
-pthread
-Wl,--no-as-needed
这是我拥有的构建日志(我不确定它是否重要)。
g++ -Wall -fexceptions -std=c++11 -g -pthread -Wl,--no-as-needed -std=c++11 -I../DeskManagerDll -I/usr/include/X11/extensions -I/usr/include/X11 -c /home/julien/Documents/test/main.cpp -o obj/Debug/main.o
g++ -L/home/julien/Documents/DeskManagerDll -L-L/usr/lib/i386-linux-gnu -o bin/Debug/test obj/Debug/main.o -L/usr/X11R6/lib -lX11 -lXext -lpthread -Wl,--no-as-needed /home/julien/Documents/DeskManagerDll/bin/Debug/libDeskManagerDll.so
Output size is 187,15 KB
我的问题
我做错了什么?我错过了什么?
编辑
我编写了一个非常简单的程序,以排除其他任何问题。
#include <thread>
void test()
{
}
int main()
{
std::thread thread_fct (test);
return 0;
}
这个程序生成的构建日志:
g++ -Wall -fexceptions -std=c++11 -g -pthread -Wl,--no-as-needed -std=c++11 -c /home/julien/Documents/test/main.cpp -o obj/Debug/main.o
g++ -o bin/Debug/test obj/Debug/main.o
我仍然遇到完全相同的错误。我真的不知道该怎么试了。你有什么想法吗?
g++
行中加入-pthread
(可能需要删除-lpthread
,-pthread
应该会为您处理它。) - juanchopanzaEPERM
的含义有点出乎意料。 - Brian Cain