带代码的线程::在运行时阻止错误

时间:2014-09-24 14:04:26

标签: c++ multithreading c++11 codeblocks

编译此文件:

//Create a C++11 thread from the main program

#include <iostream>
#include <thread>

//This function will be called from a thread
void call_from_thread()
{
    std::cout << "Hello, from thread! " << std::endl;
}

int main()
{
    std::cout << "Hello, from main! " << std::endl;

    //Launch a thread
    std::thread t1(call_from_thread);

    //Join the thread with the main thread
    t1.join();

    return 0;
}

使用code :: blocks和copmpiler选项“use C ++ 11”选中。

code :: blocks编译器说:g ++ -Wall -fexceptions -g -std = c ++ 11 -pthread -c /home/main.cpp -o obj / Debug / main.o

请注意,-std = c ++ 11 -pthread已传递给编译器。

运行程序时,收到此消息:

Hello, from main! 
terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)

Process returned 134 (0x86)   execution time : 0.110 s
Press ENTER to continue.

如何开展这项工作? 谢谢你的帮助。

====================

PS。我看过这篇文章Compiling multithread code with g++。然后尝试使用技巧

我试过了:

g ++ -Wall -fexceptions -g -std = c ++ 11 -pthread -Wl --no-as-needed -c /home/olivier/main.cpp -o obj / Debug / main.o

但得到了以下内容。

g++: error: unrecognized command line option ‘-Wl’
g++: error: unrecognized command line option ‘--no-as-needed’

1 个答案:

答案 0 :(得分:1)

如果使用-pthread进行编译,则应链接-lpthread。

第二个很简单,它必须是:-Wl,--no-as-needed(&#39;,&#39;缺失),但它用于链接器。您的呼叫只会编译成目标文件,因此您可以将其删除。

关于第二个问题的另一个注意事项,可能是因为a bug in some gcc version

而您实际上必须与-Wl,--no-as-needed关联

对于Code :: Blocks,您可以在构建选项的链接器选项卡中添加-Wl,--no-as-needed和-lpthread。