Boost logo

Boost Users :

Subject: [Boost-users] [serialization] problem with custom archive type
From: Kenneth Riddile (kfriddile_at_[hidden])
Date: 2010-08-25 21:26:47


I have a custom input archive type that has worked fine when statically
linked to the serialization library. I'm now must use serialization as
a DLL and the code no longer compiles. This is under MSVC9 with
BOOST_ALL_DYN_LINK defined. This code works fine on Linux/GCC with
serialization built as a shared library...so the problem appears
specific to Windows/MSVC. Here is a boiled down version of the code
that exhibits the problem:

// HEADER CONTENTS
#include <boost/archive/xml_iarchive.hpp>

class CustomArchive : public
boost::archive::xml_iarchive_impl<CustomArchive>
                     , public boost::archive::detail::shared_ptr_helper
{
public:
   CustomArchive( std::istream& is, int foo )
     : boost::archive::xml_iarchive_impl<CustomArchive>( is, 0 )
     , m_foo( foo )
   {

   }

   int GetFoo() const
   {
     return m_foo;
   }

   template<class T>
   void load( T& t )
   {
     boost::archive::xml_iarchive_impl<CustomArchive>::load( t );
   }

private:
   friend class boost::archive::xml_iarchive_impl<CustomArchive>;
   friend class boost::archive::basic_xml_iarchive<CustomArchive>;
   friend class boost::archive::load_access;

   int m_foo;
};

// CPP CONTENTS
#include <CustomArchive.hpp>
#include <boost/archive/impl/basic_xml_iarchive.ipp>
#include <boost/archive/impl/xml_iarchive_impl.ipp>
#include <boost/archive/impl/archive_serializer_map.ipp>

namespace boost
{
namespace archive
{
   template class basic_xml_iarchive<CustomArchive>;
   template class xml_iarchive_impl<CustomArchive>;
   template class detail::archive_serializer_map<CustomArchive>;
}
}

BOOST_SERIALIZATION_REGISTER_ARCHIVE( CustomArchive )

and here are the errors:

1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(41) : error
C2491: 'boost::archive::basic_xml_iarchive<Archive>::load_start' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(77) : error
C2491: 'boost::archive::basic_xml_iarchive<Archive>::load_end' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(83) : error
C2491: 'boost::archive::basic_xml_iarchive<Archive>::load_override' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(89) : error
C2491: 'boost::archive::basic_xml_iarchive<Archive>::load_override' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(95) : error
C2491: 'boost::archive::basic_xml_iarchive<Archive>::load_override' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(101) :
error C2491:
'boost::archive::basic_xml_iarchive<Archive>::load_override' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(108) :
error C2491:
'boost::archive::basic_xml_iarchive<Archive>::basic_xml_iarchive' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/basic_xml_iarchive.ipp(111) :
error C2491:
'boost::archive::basic_xml_iarchive<Archive>::~basic_xml_iarchive' :
definition of dllimport function not allowed
1>Warning: This header is deprecated. Please use:
boost/spirit/include/classic_rule.hpp
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(83) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::load' : definition
of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(114) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::load' : definition
of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(127) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::load' : definition
of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(140) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::load' : definition
of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(153) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::load_override' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(162) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::init' : definition
of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(189) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::xml_iarchive_impl' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/xml_iarchive_impl.ipp(202) : error
C2491: 'boost::archive::xml_iarchive_impl<Archive>::~xml_iarchive_impl'
: definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/archive_serializer_map.ipp(45) :
error C2491:
'boost::archive::detail::archive_serializer_map<Archive>::insert' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/archive_serializer_map.ipp(57) :
error C2491:
'boost::archive::detail::archive_serializer_map<Archive>::erase' :
definition of dllimport function not allowed
1>C:\Boost\include\boost/archive/impl/archive_serializer_map.ipp(67) :
error C2491:
'boost::archive::detail::archive_serializer_map<Archive>::find' :
definition of dllimport function not allowed


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