BOOST_CLASS_EXPORT在main()结束时导致分段错误?

时间:2011-11-08 07:03:51

标签: c++ boost segmentation-fault boost-serialization

我将boost::serialization用于我的课程。由于我有一些继承,我必须使用BOOST_CLASS_EXPORT来“注册”我的课程。希望我没有误解任何事情。

我使用这个宏:

BOOST_CLASS_EXPORT(MyClass)

甚至我用这个:

BOOST_CLASS_EXPORT_GUID(MyClass, "MyClass")

在一个标题文件中,例如MyClass.h,它还包含MyClass的定义。但是,即使我试图将宏放在我的一个源(* .cpp)文件中,它也会再次失败。

我在main()结束时遇到分段错误。 Stacktrace显示调用堆栈与this problem几乎相同。我无法找到解决此问题的解决方案或解决方法。我认为问题是因为析构函数,但我不知道如何解决它。我甚至不能说这是我的错,或者是提升中的一个错误。 (我希望我能自己修理它是我的错)

这有什么解决方案/解决方法吗?为什么会出现这个问题?

我的构建环境是:Ubuntu 10.04 64位服务器(内核2.6.32),gcc 4.4.3,增强1.40。 (我在/usr/include/boost/version.hpp上找到它并使用apt-cache show libboost-dev查看版本)

我使用-Wall -g3 -O0作为编译器选项。

奇怪的是,问题只发生在我的一台机器上。运行CentOS(内核2.6.18),gcc 4.1.2和boost 1.41的另一台机器运行良好。


更新:我将整个项目简化为一个小例子。它放在底部,也可以在my gist上找到。这些课程什么都不做,而且(我的)程序什么都不做。然而BOOST_CLASS_EXPORT会导致分段错误。

请注意,如果我删除f1.cppf2.cpp,问题就会消失(需要多个编译单元)。类似的情况发生在class A/A_childB/B_child上。我不知道为什么只有一个班级不会出现这个问题。

代码

编译

g++ -Wall -g3 -O0 -o program main.cpp f1.cpp f2.cpp -lboost_serialization

f1.cpp

#include "MyClass.h"

f2.cpp(与f1.cpp相同)

#include "MyClass.h"

的main.cpp

int main(int argc, char *argv[])
{
}

MyClass.h

#ifndef MYCLASS_H
#define MYCLASS_H

#include <boost/serialization/export.hpp>
#include <boost/serialization/vector.hpp>

using namespace std;

class A
{
public:
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
    }
};

class A_child: public A
{
public:
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & boost::serialization::base_object<A>(*this);
    }
};
BOOST_CLASS_EXPORT(A_child)


class B
{
public:
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
    }
};

class B_child: public B
{
public:
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & boost::serialization::base_object<B>(*this);
    }
};
BOOST_CLASS_EXPORT(B_child)


#endif

0 个答案:

没有答案