编译此文件:
//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’
答案 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。