2015-09-14 80 views
3

創建線程時出現分段錯誤我是C++多線程新手。 我寫了一個簡單的程序來使用線程打印hello world。使用#include <thread>

<<mythread.cpp>> 

#include<iostream> 
#include<thread> 
using namespace std; 
void hello() 
{ 
std::cout<<"Hi this is a thread"; 
} 


int main() 
{ 

std::thread mythread(hello); 
cout<<'1'; 
if (mythread.joinable()) 
     { 
     cout<<'2'; 
     mythread.join(); 
     cout<<'3'; 
     } 

return 0; 
} 

Copilation命令:克++ -std =的C++ 0x mythread.cpp

它編譯成功但放棄Segmentaion故障在運行時。

我檢查覈心文件:

(gdb) bt 
#0 0x0000003ac340df7c in _dl_fixup() from /lib64/ld-linux-x86-64.so.2 
#1 0x0000003ac3414625 in _dl_runtime_resolve() from /lib64/ld-linux-x86-64.so.2 
#2 0x0000003ac84b65c7 in std::thread::_M_start_thread(std::shared_ptr<std::thread::_Impl_base>)() from /usr/lib64/libstdc++.so.6 
#3 0x00000000004010d0 in std::thread::thread<void (*)()>(void (*)())() 
#4 0x0000000000400e15 in main() 

請幫我解決這個錯誤似乎有些庫不支持。

+4

我相信GCC需要使用-pthread'命令行選項'和''工作時。 – Angew

+0

確切地說,當你運行'g ++ -std = C++ 0x -o mythread mythread.cpp'時,'g ++'應該給你鏈接器錯誤,而不用'-pthread'。您的問題不可重現,因爲您的命令行不會生成可執行文件(但是無法生成可執行文件)。 –

回答

5

該程序看起來是正確的。與-pthread標誌編譯:

g++ -pthread -std=c++0x mythread.cpp 
+0

謝謝它解決了這個問題。 –

+0

如果您使用單獨的編譯和鏈接步驟,則還必須鏈接相同的標誌。 –

+0

@Sambhavjain在這種情況下,考慮[接受答案](http://stackoverflow.com/help/someone-answers)(使用它旁邊的綠色複選標記,每個問題最多可接受一個答案)。這標誌着問題已經解決,並給你和回答者一些聲譽。 – Angew