serialization problems (undefined reference - boost::archive::detail::archive_pointer_oserializer<...>)

Hi, I've written my own archive, which works fine until I try serialising a boost::shared_ptr<X>, in which case I get: undefined reference to `boost::archive::detail::archive_pointer_oserializer<boost::archive::boost_oarchive>::~archive_pointer_oserializer(). (boost::archive::boost_oarchive is my archive class, in case this causes confusion). I'm on gcc4.1.2, ceontos4 x86_64. I'm linking to libboost_serialization-gcc41-mt-1_35.so also. I've hit a bit of a brick wall here so any help would be greatly appreciated. I've searched around but can't seem to find any relevant posts on this subject. cheers A _________________________________________________________________ Get all your favourite content with the slick new MSN Toolbar - FREE http://clk.atdmt.com/UKM/go/111354027/direct/01/

On Sep 15, 2008, at 11:18 AM, Allan Johns wrote:
Do you use your own archive class? If so, please look at the serialization source files to see how to compile the sorces for your archive and which additional headers your archive source files need to include. Matthias

Hi again, No joy so far. Have added these headers to my archive: #include <boost/archive/shared_ptr_helper.hpp> #include <boost/archive/detail/auto_link_archive.hpp> and my archive now derives like so: class boost_iarchive: public detail::common_iarchive<boost_iarchive>, public detail::shared_ptr_helper I still get the same undefined reference :/
_________________________________________________________________ Get all your favourite content with the slick new MSN Toolbar - FREE http://clk.atdmt.com/UKM/go/111354027/direct/01/

Have you looked at the source files (the *.cpp files ) of the archives: in the archive source files you have to #include <boost/archive/impl/archive_pointer_oserializer.ipp> or #include <boost/archive/impl/archive_pointer_iserializer.ipp> Matthias On Sep 16, 2008, at 11:31 AM, Allan Johns wrote:

Thanks Matthias, I now have an archive which works with shared_ptrs! In my header I added: #include <boost/archive/shared_ptr_helper.hpp> #include <boost/serialization/shared_ptr.hpp> , and derived my iarchive/oarchive classes from detail::shared_ptr_helper. Then, in the cpp, I added: #include <boost/archive/impl/archive_pointer_iserializer.ipp> #include <boost/archive/impl/archive_pointer_oserializer.ipp> , and namespace boost { namespace archive { template class detail::archive_pointer_iserializer<my_iarchive> ; template class detail::archive_pointer_oserializer<my_oarchive> ; }} I guess the boost docs threw me off in this case as they have an example of an archive implementation, however no mention is made of shared_ptr serialization as a special case... I didn't think I had to do anything specific in my implementation, and indeed did not even know what an .ipp file is for... thanks muchly A
_________________________________________________________________ Win New York holidays with Kellogg’s & Live Search http://clk.atdmt.com/UKM/go/111354033/direct/01/
participants (3)
-
Allan Johns
-
Matthias Troyer
-
Robert Ramey