Пример Http-сервера Boost Завершается сбоем при boost::thread в Ubuntu 10.10

#c #multithreading #boost #segmentation-fault #boost-asio

#c #многопоточность #boost #ошибка сегментации #boost-asio #c

Вопрос:

Я пытаюсь скомпилировать и запустить следующий пример в Ubuntu 10.10

http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/example/http/server3/

но он терпит крах при:

 // Create a pool of threads to run all of the io_services.

std::vector<boost::shared_ptr<boost::thread> > threads;
for (std::size_t i = 0; i < thread_pool_size_;   i)
{
    boost::shared_ptr<boost::thread> thread(new boost::thread(
          boost::bind(amp;boost::asio::io_service::run, amp;io_service_)));
    threads.push_back(thread);
}
  

Стек вызовов:

 Thread [1] 573 [core: 0] (Suspended : Signal : SIGSEGV:Segmentation fault)  
    boost::thread::start_thread() at 0x8064a64  
    boost::thread::thread<boost::_bi::bind_t<unsigned int, boost::_mfi::mf0<unsigned int, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >() at thread.hpp:204 0x805e8c6   
    http::server3::server::run() at server.cpp:57 0x8059cbf 
    main() at HttpServer3.cpp:38 0x8048522  
  

Однако он НЕ выходит из строя в Ubuntu 11.04 для того же проекта Eclipse CDT.

Есть какие-нибудь советы?

Комментарии:

1. Мое первоначальное предположение заключается в том, что Boost. Поток не собран должным образом в вашей установке 10.10.

2. Я успешно создал boost lib в 10.10. Забавно, что 11.04 я получил некоторые ошибки при создании boost, но он работает нормально.

3. Возможно, вы правы. Смотрите мой собственный ответ.

Ответ №1:

Кажется, первоначальное предположение ильджарна может быть правильным.

Я обнаружил, что в моем Ubuntu 10.10 есть две версии библиотеки boost. Я тщательно удалил их и установил последнюю версию, и проблема исчезла.