在标题中遇到了这个问题..
我有这段代码:
#include <thread>
#include <iostream>
void my_thread_func()
{
std::cout<<"hello"<<std::endl;
}
int main()
{
std::thread t(my_thread_func);
t.join();
}
从网站上的某个地方。编译器选项-pthread -std = gnu ++ 0x (也试过-std = c ++ 0x)我有段错误。一切都在vmBox上的Debian上。我之前已经启动了其他代码,并且他们工作了。突然间,我在所有正在运行的应用程序中使用std :: thread进行了线程段错误。
编辑:这是来自gdb:
(gdb) where
#0 0x00000000 in ?? ()
#1 0x08048dc9 in thread<void (*)()> (this=0xbffff3fc,
__f=0x8048b9f <my_thread_func()>) at /usr/include/c++/4.4/thread:129
#2 0x08048bea in main () at ../test.cpp:18
(当我使用std :: thread t(&amp; ClassName :: my_thread_func,ptr)启动更多高级应用时,错误是相同的,但是其他行[thread:133])
我正在通过网络搜索,但我没有发现任何合适的内容。
答案 0 :(得分:7)
使用g++ -std=c++0x -lpthread
进行编译。请注意l
之前的pthread
。
答案 1 :(得分:1)
Gcc 4.4对C ++ 11功能的支持非常有限,特别是在线程领域。由于库没有准备好,我在gcc 4.4和4.5中看到了许多线程相关的崩溃。
我非常有信心它是一个编译器“bug”*并建议你升级到至少gcc 4.7。
*“bug”因为gcc 4.4从未声称完全支持std::thread
,因此您无法真正期望它能够正常工作。
编辑:我想到的一件事是,有时静态链接到glibc和/或libpthread在旧版本中不起作用。