Boost logo

Boost Users :

Subject: [Boost-users] serialization: "derived class not registered or exported" exception , 1.45 boost
From: Hicham Mouline (hicham_at_[hidden])
Date: 2010-12-19 13:50:26


Hello,

 

I have moved all serialization code in a separate static library that I
called serialization. This, in my case, depends on mpi.

The headers in this static library:

1. include <boost/serialization/export.hpp>

2. include the definition of the derived class being serialized

3. declare a template function serialize() that takes a reference to
the derived class being serialized in the boost::serialization namespace

4. invoke the BOOST_CLASS_EXPORT_KEY(<derivedclass>) macro at the
global namespace scope

 

The corresponding source files in this static library:

1. include the header

2. define the function template serialize()

3. explicitly instantiate the serialize() function with all the
archives used: mpi::packed_iarchive and mpi::packed_oarchive in the
boost::serialization namespace

4. invoke the BOOST_CLASS_EXPORT_IMPLEMENT(<derivedclass>) macro at
the global namespace scope

 

The main program links against this static library, and invokes a mpi
function (broadcast) that serializes by the base pointer. The base class is
polymorphic. All class derivations are public.

 

Debugging, the code reaches : archive/detail/oserializer.hpp

 

boost::archive::detail::save_pointer_type<boost::mpi::packed_oarchive>::poly
morphic::save<baseclass>(boost::mpi::packed_oarchive & ar={...}, baseclass&
t={...}) Line 400 + 0x38 bytes

 

where NULL==true_type

 

However, looking at the t argument of save(), it shows that is the correct
derived object. But the type T is the base class.

 

What am I missing?

regards,



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net