【发布时间】:2014-05-15 12:04:28
【问题描述】:
错误
我正在尝试使用 std::thread,但是当我尝试运行它时出现此错误。
在抛出 'std::system_error' 的实例后调用终止
what(): 启用多线程以使用 std::thread: Operation not 允许
中止(核心转储)
我的研究结果
有很多关于它的问题,每个答案都说类似的话: 我必须使用“-pthread”或“-lpthread”构建。也有人说要加上“-Wl,--no-as-needed”。
我尝试了很多东西,但都没有成功。
详情
我在 Lubuntu 上使用 Code::Blocks 12.11、GNU GCC 编译器进行编译。 在编译器设置菜单中,我检查了编译器标志
“让 g++ 遵循 C++11 ISO C++ 语言标准 [-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
我仍然有完全相同的错误。我真的不知道该尝试什么。 你有什么想法吗?
【问题讨论】:
-
尝试将
-pthread也添加到.so编译中。 -
我不知道该怎么做,你知道我应该用谷歌搜索哪里可以修改吗?我有点迷失在这一切中
-
在你的第二行
g++中,添加-pthread(并可能删除-lpthread,-pthread应该会为你这样做。) -
已经由code::blocks自动生成。我可以通过选项对其进行修改,但“其他选项”字段会更改第一行。
-
IMO 标准库开始重载
EPERM以表示完全不同的含义有点出乎意料。
标签: c++ linux multithreading c++11 compilation