Boost logo

Boost Users :

From: kauai (kauai_diver_at_[hidden])
Date: 2005-05-10 14:02:56


Hi Robert,

I've been looking into this further and found some
interesting behavior. Don't know if this will help or not,
but here goes:

* In linux I have my xyz.cpp file, several includes, the
archive include, then the export, like this:

#include <boost/serialization/export.hpp> // should
always be after archive includes

After that I have:
BOOST_CLASS_EXPORT(Foo::Bar::MyClass);

using namespace Foo::Bar;

// the rest of the file.

This code plus the rest will compile, link, and run
properly in Linux using gcc 3.2.2. (I can get more version
info if you need, kernel, glibc, etc.)

* In Windows Server 20003 with cl version 13.10.3077 I can
not compile. I get the same error message I stated
earlier.

Now the wierd part:

If I remove the
#include <boost/serialization/export.hpp>

I cannot compile anymore with gcc, as expected. There
error I get is this:
ISO C++ forbids declaration of `BOOST_CLASS_EXPORT' with no
type

In Windows not only does it compile, but it links and runs.
 'runs' meaning there is an .exe file but my serialization
test code still fails ;)

I dont know if these annoying details may help but I just
thought I'd share.

-K

--- kauai <kauai_diver_at_[hidden]> wrote:

> Date: Tue, 10 May 2005 11:24:06 -0700 (PDT)
> From: kauai <kauai_diver_at_[hidden]>
> Subject: Re: [Boost-users] Re: Re: Re: Boost
> serialization and dependencynightmares...
> To: boost-users_at_[hidden]
>
> Hi Robert,
>
> The EXPORT macros were initially inside a namespace,
> interesting that it compiled and linked with gcc.
>
> After fixing this I still have the same problem with
> Microsofts compiler. It complains about the same thing
> as
> I state below. Is there some include file that I may be
> missing? I can send you some code if that helps.
>
> Also where is the best place to call these macros? At
> the
> moment they are at the top in the appropriate .cpp files.
>
> Thanks,
> -K
>
>
> --- Robert Ramey <ramey_at_[hidden]> wrote:
>
> > Just a guess, but are the EXPORT macros being used in
> > side a namespace?
> > They should be outside of any namespace.
> >
> > Robert Ramey
> >
> > kauai wrote:
> > > In addition I resurrected this post to the newsgroup.
>
> > It
> > > is exactly the same problem I am having:
> > >
> > > boost 1.32, with VC7.1 I'm getting compiler errors in
> > two
> > > unrelated translation units both dealing with
> > > std::set<std::string> data members. I've gone through
> > and
> > > ensured that i've #include'd the <set.hpp> and
> > <string.hpp>
> > > headers from boost/serialization. Any ideas on what
> > might
> > > be causing this problem? This has worked fine
> > previously
> > > with boost 1.31 and serialization20 version of the
> > library.
> > > Why would the 3 argument overload not be found?
> > >
> > > Below are the (beginnings of the ) related compiler
> > errors.
> > >
> > > Thanks, Jeff
> > >
> > > ========================
> > >
> > >
> >
>
C:\boost\boost_1_32_0\boost\serialization\split_free.hpp(55)
> > >> error C2780: 'void boost::archive::load(Archive &,T
> > &)' :
> > > expects 2 arguments - 3 provided
> > >
> > >
> >
>
C:\boost\boost_1_32_0\boost\archive\detail\iserializer.hpp(514)
> > >> see declaration of 'boost::archive::load'
> > >
> > >
> >
>
C:\boost\boost_1_32_0\boost\serialization\split_free.hpp(54)
> > >> while compiling class-template member function 'void
> > >
> >
>
boost::serialization::free_loader<Archive,T>::invoke(Archive
> > > &,T &,const unsigned int)'
> > > with
> > > [
> > > Archive=boost::archive::text_iarchive,
> > > T=std::set<std::string>
> > > ]
> > > ....
> > >
> > > ========================
> > >
> > >
> >
>
C:\boost\boost_1_32_0\boost\serialization\split_free.hpp(55)
> > >> error C2780: 'void boost::archive::load(Archive &,T
> > &)' :
> > > expects 2 arguments - 3 provided
> > >
> > >
> >
>
C:\boost\boost_1_32_0\boost\archive\detail\iserializer.hpp(514)
> > >> see declaration of 'boost::archive::load'
> > >
> > >
> >
>
C:\boost\boost_1_32_0\boost\serialization\split_free.hpp(54)
> > >> while compiling class-template member function 'void
> > >
> >
>
boost::serialization::free_loader<Archive,T>::invoke(Archive
> > > &,T &,const unsigned int)'
> > > with
> > > [
> > > Archive=boost::archive::binary_iarchive,
> > > T=std::set<std::string>
> > > ]
> > >
> > > ....
> > >
> > >
> > > --- kauai <kauai_diver_at_[hidden]> wrote:
> > >> Date: Mon, 9 May 2005 14:07:43 -0700 (PDT)
> > >> From: kauai <kauai_diver_at_[hidden]>
> > >> Subject: Re: [Boost-users] Re: Boost serialization
> and
> > >> dependency nightmares...
> > >> To: boost-users_at_[hidden]
> > >>
> > >> Robert,
> > >>
> > >> Thank you. My project requires both linux and Win32
> > >> support. When I use this macro in win32 environment
> I
> > >> get
> > >> a compile time error. It generates a fairly long
> > error
> > >> which I can send you but here is the first few lines
> > >> which
> > >> are possibly the most important.
> > >>
> > >> Again it is fully compiling/linking/running in
> Linux.
> > >>
> > >>
> > >> cl /nologo /W3 /MDd /Od /EHsc /RTC1 /GS /Gy
> > /Zc:forScope
> > >> /GR /Gd /TP /D_DEBUG /D
> > >> WIN32 /D_CONSOLE /D_WINDOWS /DUNICODE /DQT_DLL
> > >> /DQT_THREAD_SUPPORT
> > >> /IW:\vob\abvsw\boost\1_32_0\win32\include\boost-1_32
> > >> /Iroot\abcmn\ /c build-win32-debug\...\xyz.cpp
> /Fobui
> > >> ld-win32-debug\...\xyz.obj xyz.cpp
> > >>
> >
> W:\vob\abvsw\boost\1_32_0\win32\include\boost-1_32\boost\
> > >> serialization\split_free.hpp(55) : error C2780:
> 'void
> > >> boost::archive::load(Archi
> > >> ve &,T &)' : expects 2 arguments - 3 provided
> > >>
> > W:\vob\abvsw\boost\1_32_0\win32\include\boost-1_3
> > >> 2\boost\archive\detail\iserializer.hpp(514) : see
> > >> declaration of 'boost::archive
> > >>>> load'
> > >>
> > W:\vob\abvsw\boost\1_32_0\win32\include\boost-1_3
> > >> 2\boost\serialization\split_free.hpp(54) : while
> > >> compiling
> > >> class-template member
> > >> function 'void
> > >>
> > >
> >
>
boost::serialization::free_loader<Archive,T>::invoke(Archive
> > >> &,T
> > >> &,const unsigned int)'
> > >>
> > >> When I #ifdef the BOOST_CLASS_EXPORT(ClassName)
> macros
> > I
> > >> compile/link/and run. Of course base class
> > serialzation
> > >> is
> > >> disable for Win32 at the moment because of this.
> > >>
> > >> Thanks for any help,
> > >> -K
> > >>
> > >> --- Robert Ramey <ramey_at_[hidden]> wrote:
> > >>> This is addressed with the alternative
> > >> BOOST_CLASS_EXPORT
> > >>> method. its
> > >>> described in the serialization documentation.
> > >>>
> > >>> Robert Ramey
> > >>>
> > >>> kauai wrote:
> > >>>> Hi all,
> > >>>>
> > >>>> I have a container class that has a vector which
> > >>> contains
> > >>>> several other classes. My container class has a
> > >>> serialize
> > >>>> function that looks like this:
> > >>>>
> > >>>> friend class boost::serialization::access;
> > >>>> template<class Archive> void serialize (Archive
> &ar,
> > >>> const
> > >>>> unsigned int version)
> > >>>> {
> > >>>> // save/load base class information
> > >>>> ar &
> > >>> BOOST_SERIALIZATION_BASE_OBJECT_NVP(MyBaseClass);
> > >>>>
> ar.register_type(static_cast<SomeClass1*>(NULL));
> > >>>>
> ar.register_type(static_cast<SomeClass2*>(NULL));
> > >>>> ...
> > >>>> ar & BOOST_SERIALIZATION_NVP(m_Vector); //
> > >>> std::vector
> > >>>> }
> > >>>>
> > >>>> Got everything working but now an issue has come
> up:
> > >>>> Someone wants to add a new class but it is not
> part
> > of this
> > >>>> package that is doing the serialzation. I want to
> > >>> avoid
> > >>>> what I call "dependency hell", is there a way for
> > that new
> > >>>> class to get registered someplace other than in
> this
> > >>>> function?
> > >>>>
> > >>>> Thanks for any help,
> > >>>> Kauai
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>> Discover Yahoo!
> > >>>> Stay in touch with email, IM, photo sharing and
> > more.
> > >>> Check it out!
> > >>>> http://discover.yahoo.com/stayintouch.html
> > >>>
> > >>>
> > >>>
> > >>> _______________________________________________
> >
> === message truncated ===
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection
> around
> http://mail.yahoo.com
>

                
Discover Yahoo!
Find restaurants, movies, travel and more fun for the weekend. Check it out!
http://discover.yahoo.com/weekend.html


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