2013-12-25 5 views
2

Я понятия не имею, почему, но после включения C++ 11 в мой проект в eclipse и работе с новыми функциями, такими как std :: array <>, он неожиданно не работает, когда я используйте std :: thread.std :: thread not working on linux eclipse

Вот пример я пытаюсь запустить:

#include <iostream> 
#include <string> 
#include <thread> 

void print_message_function(const std::string& msg); 

int main() 
{ 
    std::string message1 = "Thread 1"; 
    std::string message2 = "Thread 2"; 

    std::thread thread1(print_message_function, message1); 
    std::thread thread2(print_message_function, message2); 

    thread1.join(); 
    thread2.join(); 
} 

void print_message_function(const std::string& msg) 
{ 
    std::cout << msg << std::endl; 
} 

Нет ошибок при компиляции и сообщения об ошибках, когда не работает (не выход тоже ..), но при использовании инструмента отладки это происходит сбой на этой линии :

std::thread thread1(print_message_function, message1); 

это стек в момент аварии:

Thread [1] (Suspended: Signal 'SIGSEGV' received. Description: Segmentation fault.) 
    5 _dl_fixup() 0x0000003d6920df7c 
    4 _dl_runtime_resolve() 0x0000003d69214625 
    3 std::thread::_M_start_thread() 0x0000003d762b65a7  
    2 std::thread::thread<void (&)(std::string const&), std::string&>() /usr/include/c++/4.4.4/thread:133 0x0000000000402268  
    1 main() /.../Main.cpp:12 0x0000000000401e8d  

Почему это происходит?

+1

Вы связались с '-pthread'? – Duck

+0

Нет, что это? – Vladp

+0

Thread обертывает собственную поточную библиотеку lib, которая на linux является pthreads. Не знаете, как eclipse обрабатывает параметры компиляции, но добавляет '-pthread' в конец вашей команды компиляции/ссылки. – Duck

ответ

5

В вашей команде компиляции необходимо связать библиотеку pthreads с -pthread.

+1

Обратите внимание, '-pthread' не только для * ссылки * (В противном случае можно просто использовать' -lpthread'. См. [Этот вопрос SO] (http://stackoverflow.com/questions/2127797/gcc-significance-of- pthread-flag-when-compiling) для получения дополнительной информации. – juanchopanza