
Hello, I had a similar problem, you must call a function in the compilation unit if you put only the macros in the .cpp if will not work. BOOST_CLASS_EXPORT(Curve2); BOOST_CLASS_EXPORT(Line2); BOOST_CLASS_EXPORT(Circle2); /** * DO NOT REMOVE THIS FUNCTION * The C++ standard guarantees that all global objects contained * in a compilation unit (a CPP file) are initialized by the time * execution enters a function from that compilation unit. So, if * execution never enters a function from that compilation unit, * the compiler is allowed to deadstrip it. * * BOOST_CLASS_EXPORT is based upon global objects. */ void force_serialize_export(); ________________________________ De : boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] De la part de Robert Dailey Envoyé : vendredi 3 avril 2009 16:56 À : boost-users@lists.boost.org Objet : Re: [Boost-users] [serialization] Multiply defined symbol:guid_initializer But I've already tried that, as I said. It fails at runtime with an exception saying "unregistered void cast". I'll test it once more, but I don't expect different results. On Thu, Apr 2, 2009 at 10:07 PM, Robert Ramey <ramey@rrsd.com> wrote: Look at the pimple demo in the examples or test directory. Basically you're getting some things defined twiice. Move the implementation of template< class Archive > void serialize( Archive& archive, unsigned int version ) to the *.cpp and move BOOST_CLASS_EXPORT( rs::StaticText ) to the *.cpp file as well. compile that/those *.cpp files and include in the library. This is touched upon in the manual in the part describing EXPORT. Robert Ramey "Robert Dailey" <rcdailey@gmail.com> wrote in message news:496954360904021720o79c9c17cs18b1cf3f53da08c@mail.gmail.com... Hi, I'm currently trying to polymorphically serialize a class without using RTTI. I'm doing this currently in a file called StaticText.hpp: #ifndef RS_GUI_WIDGETS_STATICTEXT_HPP #define RS_GUI_WIDGETS_STATICTEXT_HPP #include <boost/scoped_ptr.hpp> #include <boost/serialization/access.hpp> #include <boost/serialization/base_object.hpp> #include <boost/serialization/string.hpp> #include <boost/serialization/extended_type_info_no_rtti.hpp> #include <boost/serialization/export.hpp> #include <rs/gui/widgets/Widget.hpp> #include <rs/gui/Text.hpp> namespace rs { class StaticText : public Widget { public: StaticText( std::string const& text ); void Update(); void Render( RenderSystem& renderer, Camera& camera ); char const* get_key() const; private: StaticText() {} template< class Archive > void serialize( Archive& archive, unsigned int version ) { archive & boost::serialization::base_object<Widget>( *this ); std::string text; archive & text; m_text.reset( new Text( text ) ); } boost::scoped_ptr<Text> m_text; friend class boost::serialization::access; }; } BOOST_CLASS_TYPE_INFO( rs::StaticText, extended_type_info_no_rtti<rs::StaticText> ) BOOST_CLASS_EXPORT( rs::StaticText ) #endif // RS_GUI_WIDGETS_STATICTEXT_HPP When I compile this into a LIB first, and then link the lib into an EXE, the linker says this (Visual Studio 2008): gui.lib(StaticText.obj) : error LNK2005: "public: static struct boost::archive::detail::guid_initializer<class rs::StaticText> const & const boost::archive::detail::init_guid<class rs::StaticText>::guid_initializer" (?guid_initializer@?$init_guid@VStaticText@rs@@@detail@archive@boost@@2ABU?$guid_initializer@VStaticText@rs@@@234@B) already defined in main.obj If I move the 2 macro calls into the StaticText.cpp file, everything compiles/links just fine but I end up getting an exception thrown at runtime that says "unregistered void cast". ________________________________ _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users