ошибка мгновенной сегментации с debian и std::thread c++

получил эту проблему - в заголовке ..

У меня есть этот код:

#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), и у меня есть segfault. Все на Дебиане на vmBox.. Я раньше запускал другие коды, и они работали. Внезапно у меня возникает segfault в потоках с 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(&ClassName::my_thread_func,ptr) ошибка такая же, но другая строка [thread:133])

Я искал в Интернете, но я не нашел ничего подходящего.


person Wiciu    schedule 21.08.2012    source источник
comment
Работает с boost::thread? Какая версия gcc? А как насчет просмотра /usr/include/c++/4.4/thread:129?   -  person ForEveR    schedule 21.08.2012
comment
Я попробовал это на Ubuntu 11.04, и у меня все работает нормально. Нет сегфолта.   -  person Tudor    schedule 21.08.2012
comment
g++ (Debian 4.4.5-8) 4.4.5 , с бустом не проверял   -  person Wiciu    schedule 21.08.2012
comment
Вы получаете виртуальную функцию Pure, называемую сообщением?   -  person mfontanini    schedule 21.08.2012
comment
нет.. кроме того.. я не хочу использовать буст..   -  person Wiciu    schedule 21.08.2012
comment
Фактическая версия @Wiciu - 4.7. О вашей версии проверьте gcc.gnu.org/gcc-4.4/cxx0x_status.html   -  person ForEveR    schedule 21.08.2012
comment
да .. но я довольно слаб в линуксе. и apt-get показывает мне, что у меня есть новейшая версия для Debian. Я постараюсь обновить все   -  person Wiciu    schedule 21.08.2012


Ответы (2)


скомпилировать с помощью g++ -std=c++0x -lpthread. Обратите внимание на l перед pthread.

person user2k5    schedule 21.08.2012

Поддержка Gcc 4.4 функций C++11 крайне ограничена, особенно в области многопоточности. Я видел много сбоев, связанных с потоками, в gcc 4.4 и 4.5 из-за того, что библиотека не была готова.

Я вполне уверен, что это «ошибка» компилятора*, и предлагаю вам обновиться как минимум до gcc 4.7.

* «ошибка», потому что gcc 4.4 никогда не заявлял о полной поддержке std::thread, поэтому вы не можете ожидать, что он будет работать.

изменить: одна вещь, которая только что пришла мне в голову, это то, что иногда статическое связывание с glibc и/или libpthread не работало в этих старых версиях.

person PlasmaHH    schedule 21.08.2012