C++ Pantheios和boost::thread

C++ Pantheios和boost::thread,c++,boost,boost-thread,pantheios,C++,Boost,Boost Thread,Pantheios,我在使用boost::threads的pantheios日志库时遇到了一些问题。如果我在创建线程之前使用任何pantheios日志记录,我会得到一个segfault 例如,以下方法可行: thread_ = new boost::thread(&foo); pantheios::log(pantheios::debug, "Hello world"); 但是如果语句的顺序被切换,堆栈跟踪显示我在boost中的start\u线程上崩溃 pantheios::log(pantheios::

我在使用boost::threads的pantheios日志库时遇到了一些问题。如果我在创建线程之前使用任何pantheios日志记录,我会得到一个segfault

例如,以下方法可行:

thread_ = new boost::thread(&foo);
pantheios::log(pantheios::debug, "Hello world");
但是如果语句的顺序被切换,堆栈跟踪显示我在boost中的
start\u线程
上崩溃

pantheios::log(pantheios::debug, "Hello world");
thread_ = new boost::thread(&foo);
// SEGFAULT!
有什么想法吗

编辑:更多上下文

int main()
{
    pantheios::log(...);
    MyClass myClass(/* some arguments, which are all literals */);

    // Do some more work

    return 0;
}

// MyClass constructor
MyClass::MyClass(/* args */)
    : member1_(arg1)
    , member2_(arg2)
{
    thread_ = new boost::thread(&MyClass::workerLoop, this);
}

// Destructor
MyClass::~MyClass()
{
    thread_->join();
    delete thread_;
}

这将在
start\u线程
处隔离故障。再次,如果我交换
main
中的两行,它将不会出现任何问题。

看起来我已经解决了。我正在链接到不同版本的
boost
。我的系统有boost版本1.40,而我也使用了我下载的更新版本boost,1.49。值得注意的是,我链接的boost线程是旧版本的


一旦我使boost的链接保持一致,一切都按预期进行。

什么是
foo
,一个函数?它做日志记录吗?它使用任何全局变量吗?
foo
实际上是一个类的成员函数。它使用
boost::bind
绑定到类“
this
foo
也使用pantheios,还使用网络套接字。pantheios应该是线程友好的,但是…您正在传递一个指针,
&foo
,因此它不能是成员函数或由
boost::bind
返回的函数对象。堆栈上是否声明了
foo
?它超出范围了吗?请显示更多的代码。以下是实际代码:
thread\ux=newboost::thread(&MyClass::workerLoop,this)
MyClass
构造函数中。请参阅我对问题的编辑以了解上下文。
MyClass
析构函数是否在
MyClass
超出范围之前加入线程?