|
Boost Users : |
Subject: Re: [Boost-users] [serialization] Multiply defined symbol:guid_initializer
From: Renaud Lepere (Renaud.Lepere_at_[hidden])
Date: 2009-04-03 12:05:50
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_at_[hidden] [mailto:boost-users-bounces_at_[hidden]] De la part de Robert Dailey
Envoyé : vendredi 3 avril 2009 16:56
À : boost-users_at_[hidden]
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_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