Запуск std :: thread со статическим связыванием вызывает ошибку сегментации

Для изучения c ++ 11 (и boost) я пишу простой http-сервер, использующий boost asio и c ++ 11 (для потоков и лямбд).

Я хочу протестировать новые лямбды c ++ 11 и std :: thread, поэтому я попытался запуститьio_service.run() вот так в std :: thread с лямбдой:

#include <iostream>
#include <thread>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
using std::cout;
using std::endl;
using boost::asio::ip::tcp;

class HttpServer
{
public:
    HttpServer(std::size_t thread_pool_size)
    : io_service_(),
    endpoint_(boost::asio::ip::tcp::v4(), 8000),
    acceptor_(io_service_, endpoint_)
    { }

    void Start() {
        acceptor_.listen();
        cout << "Adr before " << &io_service_ << endl;
        std::thread io_thread([this](){
            cout << "Adr inside " << &io_service_ << endl;
            io_service_.run();
        });
        io_thread.join();
    }

private:
    boost::asio::io_service io_service_;
    tcp::endpoint endpoint_;
    tcp::acceptor acceptor_;
};

int main() {
    HttpServer server(2);
    server.Start();
}

Это заканчивается ошибкой сегментации. Кроме того, иногда он запускает cout внутри лямбды, иногда нет (хотя endl должен смываться). В любом случае, он печатает правильный адресio_service_, Тем не менее, когда я заменяюstd::thread сboost::thread (никаких других изменений!), все работает нормально.

Я был бы признателен, если у кого-то есть идея, где возникает проблема (может быть asio, std :: thread или std :: lambda).

Дополнительная информация:

По другомуПочта доступ к члену io_service_ в пределах лямбды в порядке при захватеthis, как я это делаю.

Я бегу gcc 4.6.1 на Ubuntu и повысить 1.46. Параметры G ++:

g++ -std=c++0x -static -I/home/andre/DEV/boost_1_48_0/include/ -L/home/andre/DEV/boost_1_48_0/lib/ -o webserver main.cpp -lboost_system -lboost_thread -lpthread

Обновить:

Удаление -static устранило проблему. Я обнаружил, что проблема не имеет ничего общего с boost или lambdas и может быть воспроизведена при сборке и использовании staticstd::thread, По любой причине эта комбинация не работает. я думаю, что этоПочта описывает почти то же самое, однако я не очень понимаю детали и сообщение об ошибке другое.

Так что мне интересно, почемуstd::thread и статические ссылки не работают вместе. Есть ли причина, по которой статические ссылки здесь не разрешены? Я обновил заголовок вопроса и удалил тег повышения.

Ответы на вопрос(2)

Ваш ответ на вопрос