Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] problem with custom archive type
From: Robert Ramey (ramey_at_[hidden])
Date: 2010-08-25 23:42:26


Kenneth Riddile wrote:
> 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:

The following is labeled "HEADER CONTENTS" but it looks like a *.cpp file to
me.

I compiled with msvc 7.1 with no problem WHEN I inserted the ...SOURCE line.
This line signals that declspec(export) should be used rather than ..import

Robert Ramey

> // HEADER CONTENTS

#define BOOST_ARCHIVE_SOURCE

> #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