|
Boost Users : |
Subject: Re: [Boost-users] [serialization] Multiply defined symbol:guid_initializer
From: Robert Dailey (rcdailey_at_[hidden])
Date: 2009-04-03 10:56:08
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_at_[hidden]> 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_at_[hidden]> wrote in message
> news:496954360904021720o79c9c17cs18b1cf3f53da08c_at_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_at_VStaticText@rs@@@detail_at_archive@boost@
> @2ABU?$guid_initializer_at_VStaticText@rs@@@234_at_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_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
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