
Hi, using the serialization library in various versions, I encounter a problem with exporting guids when changing from boost 1.34.1 to 1.35.0 I am currently using gcc 4.3.0 (recent stable release) under openSuSE 10.2. I am separating the exporting macros into a header xxx_export.h. This is done to avoid excessive compilation times for files in which the export code is not needed. Moreover, various classes which have export code are separated into several files. Thus, I need to #include more than one xxx_export.h header into the final program cpp file. I get the follwing error during compile: header2_export.h:9: error: conflicting declaration ‘const boost::archive::detail::guid_initializer<Derived2>& <unnamed>::boost_serialization_guid_initializer_9’ header1_export.h:9: error: ‘<unnamed>::boost_serialization_guid_initializer_9’ has a previous declaration as ‘const boost::archive::detail::guid_initializer<Derived1>& <unnamed>::boost_serialization_guid_initializer_9’ Obviously, the symbol names are derived from the line number in the header file, right? Using two (or more) different export header files, this leads to confusion. I tried to remedy the situation by enclosing the BOOST_CLASS_EXPORT_GUID () macros in the two export header files in two different namespaces. OK, that worked. HOWEVER - it is not backward compatible with boost version 1.34.1. If I use the code that works with 1.3.50 with the earlier version, I get: In file included from exportTestn.cpp:10: header1n_export.h:10: error: expected initializer before ‘<’ token header1n_export.h:10: error: ISO C++ forbids declaration of ‘type name’ with no type header1n_export.h:10: error: wrong number of template arguments (1, should be 2) /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.3.0/../../../../include/c++/4.3.0/bits/stl_pair.h:72: error: provided for ‘template<class _T1, class _T2> struct std::pair’ header1n_export.h:10: error: explicit instantiation of non-template ‘int derived1::boost::archive::detail::export_archives_invoke’ header1n_export.h:10: error: expected `;' before ‘<’ token In file included from exportTestn.cpp:12: header2n_export.h:10: error: expected initializer before ‘<’ token header2n_export.h:10: error: ISO C++ forbids declaration of ‘type name’ with no type header2n_export.h:10: error: wrong number of template arguments (1, should be 2) /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.3.0/../../../../include/c++/4.3.0/bits/stl_pair.h:72: error: provided for ‘template<class _T1, class _T2> struct std::pair’ header2n_export.h:10: error: explicit instantiation of non-template ‘int derived2::boost::archive::detail::export_archives_invoke’ header2n_export.h:10: error: expected `;' before ‘<’ token Am I doing something wrong here? Is there a solution which works for both boost::serialization versions? I have attached the relevant files for reference. Note that files header1.h, header2.h, header1_export.h and header2_export.h are without the additional namespace, while files header1n.h, header2n.h, header1n_export.h, and header2n_export.h are WITH the additional namespace. Thanks for any help. Bernd