Besides, it doesn't make sense to have the global function in the first place. I'm already creating instances of the very class I'm exporting via the macro. That alone should be enough to keep the compiler from stripping out the class specializations created by the boost class macros, right? This whole thing is just so confusing... why can't it just work like it is supposed to? I am doing things exactly as they are being done in the test_no_rtti unit test...

On Fri, Apr 3, 2009 at 11:26 AM, Robert Dailey <rcdailey@gmail.com> wrote:
What?? I see you have a force_serialize_export() function, but how can you guys expect me to mangle my interfaces to get boost::serialization to do its job? So I have to now call arbitrary global functions all over the place? This is unreasonable and unacceptable. There has to be a better way!


On Fri, Apr 3, 2009 at 11:05 AM, Renaud Lepere <Renaud.Lepere@alma.fr> wrote:
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



_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users