Я понятия не имею, почему, но после включения 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
Почему это происходит?
Вы связались с '-pthread'? – Duck
Нет, что это? – Vladp
Thread обертывает собственную поточную библиотеку lib, которая на linux является pthreads. Не знаете, как eclipse обрабатывает параметры компиляции, но добавляет '-pthread' в конец вашей команды компиляции/ссылки. – Duck