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