C++ 使用code::Blocks GNU编译器编译多线程代码 错误

C++ 使用code::Blocks GNU编译器编译多线程代码 错误,c++,linux,multithreading,c++11,compilation,C++,Linux,Multithreading,C++11,Compilation,我试图使用std::thread,但在尝试运行它时出现了此错误 在抛出“std::system_error”实例后调用terminate what():启用多线程以使用std::thread:操作不可用 允许的 中止(堆芯转储) 我的研究结果 有很多关于它的问题,每个答案都说了类似的事情: 我必须使用“-pthread”或“-lphread”进行构建。也有人说要加上“-Wl,--不需要” 我做了很多尝试,但都没有成功 细节 我使用Code::Blocks12.11、gnugcc编译器在Lubu

我试图使用std::thread,但在尝试运行它时出现了此错误

在抛出“std::system_error”实例后调用terminate

what():启用多线程以使用std::thread:操作不可用 允许的

中止(堆芯转储)

我的研究结果 有很多关于它的问题,每个答案都说了类似的事情: 我必须使用“-pthread”或“-lphread”进行构建。也有人说要加上“-Wl,--不需要”

我做了很多尝试,但都没有成功

细节 我使用Code::Blocks12.11、gnugcc编译器在Lubuntu上编译。 在“编译器设置”菜单中,我已选中编译器标志

“G++遵循C++ 11的ISO C++语言标准[-STD= C++ 11 ] < < /P> 在“其他选项”下,我写下了答案的意思,下面是一个例子

-pthread
-Wl,--no-as-needed
这是我的构建日志(我不确定它是否重要)

我的问题 我做错了什么?我错过了什么

编辑 我做了一个非常简单的程序来排除任何其他问题

#include <thread>

void test()
{
    
}

int main()
{
    std::thread thread_fct (test);
    return 0;
}

我仍然有完全相同的错误。我真的不知道该试什么你有什么想法吗?

你的第一个问题是
-lpthread
是一个链接器选项,因此它属于链接器行(第二个命令)而不是编译行。(请注意,参数的顺序可能很重要;我是通过将
-lpthread
放在最后一个上来实现的。我还尝试使用
-pthread
而不是
-lpthread
,这看起来确实可行,而且对链接器行上的位置也不太敏感。但同样,这是一个链接器选项,而不是编译选项。)离子。)


修复后,我可以让您的程序编译并运行,但它退出时出现了一个不同的异常:
terminate called,但没有激活的异常
。要解决此问题,请调用
thread_fct.join()
main()
中。(所有线程在超出作用域之前都必须连接、分离或移动,否则您的程序将中止。)

对于代码::块来说,这对我很有用:

  • 项目->构建选项->让g++遵循C++11 ISO。。。[-std=c+11](选中复选框)

  • 项目->构建选项->链接器设置->添加其他链接器选项

    -Wl,--no-as-needed
    -pthread
    

  • 尝试将
    -pthread
    添加到
    中。这样也可以编译
    了。我不知道怎么做,你知道我应该在谷歌上搜索什么来找到我可以修改它的地方吗?在你的第二行
    g++
    中,添加
    -pthread
    (并可能删除
    -lphread
    -pthread
    应该为你做这些。)它是由code::blocks自动生成的。我可以通过选项对其进行修改,但“其他选项”字段会更改第一行。在我看来,标准库开始重载
    EPERM
    意味着完全不同的内容,这有点出乎意料。
    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    
    
    -Wl,--no-as-needed
    -pthread