Hey there!
We have trouble compiling our project with Boost 1.33 (as of SuSE 10.1).
We tried to compile our project, which uses the serialization
capabilities of Boost to serialize C++ objects into MPI messages. On
IA32, everything works fine with Boost 1.34-rc1 (Debian, kernel 2.6.15.7).
However, on my AMD machine with SuSE 10.1 and Boost 1.33, we get linker
errors related to multiple definitions of templates:
> /proj.stand/klemm/evolFIR-MPI/src/share/Component.o:/proj.stand/klemm/evolFIR-MPI/src/Component.cpp:24: multiple definition of `boost::archive::det
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/DelayOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<co
> /proj.stand/klemm/evolFIR-MPI/src/DelayOperator.cpp:25: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/DelayOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<co
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/DelayOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<co
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/Iterator.o:/usr/include/boost/serialization/export.hpp:194: multiple definition of `boost::archive::detail:
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynom.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const
> /proj.stand/klemm/evolFIR-MPI/src/MapPolynom.cpp:202: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynom.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const
> /proj.stand/klemm/evolFIR-MPI/src/MapPolynom.cpp:204: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynom.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynomIterator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pa
> /usr/include/boost/serialization/export.hpp:194: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynomIterator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pa
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynomIterator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pa
The full log of errors is at the end of this message. The command used
for linking is:
/opt/mpich/ch-p4//bin/mpiCC -shared
/proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o
/proj.stand/klemm/evolFIR-MPI/src/share/Component.o
/proj.stand/klemm/evolFIR-MPI/src/share/DelayOperator.o
/proj.stand/klemm/evolFIR-MPI/src/share/Iterator.o
/proj.stand/klemm/evolFIR-MPI/src/share/MapPolynom.o
/proj.stand/klemm/evolFIR-MPI/src/share/MapPolynomIterator.o
/proj.stand/klemm/evolFIR-MPI/src/share/MulOperator.o
/proj.stand/klemm/evolFIR-MPI/src/share/Operator.o
/proj.stand/klemm/evolFIR-MPI/src/share/PolyNormalizator.o
/proj.stand/klemm/evolFIR-MPI/src/share/Polynom.o
/proj.stand/klemm/evolFIR-MPI/src/share/ShiftOperator.o
/proj.stand/klemm/evolFIR-MPI/src/share/XExtractor.o
/proj.stand/klemm/evolFIR-MPI/src/share/NTLAdaptor.o
/proj.stand/klemm/evolFIR-MPI/src/share/polycommon.o
/proj.stand/klemm/evolFIR-MPI/src/share/RandomNumberPool.o -o
/proj.stand/klemm/evolFIR-MPI//lib/libpoly.so
Replacing mpiCC with g++ does not help either (and on IA32 this command
works well).
I also tried to use a self-compiled version of Boost on the AMD (Boost
1.34-rc1) but it showed the same compiler errors.
I don't think it's a problem with our program, as in IA32 everything
works as expected. Any hints? Thanks in advance!
Best regards
-michael
Full log or error messages:
> proj.stand/klemm/evolFIR-MPI/src/share/Component.o:/proj.stand/klemm/evolFIR-MPI/src/Component.cpp:24: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/DelayOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /proj.stand/klemm/evolFIR-MPI/src/DelayOperator.cpp:25: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/DelayOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/DelayOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/Iterator.o:/usr/include/boost/serialization/export.hpp:194: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynom.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /proj.stand/klemm/evolFIR-MPI/src/MapPolynom.cpp:202: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynom.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /proj.stand/klemm/evolFIR-MPI/src/MapPolynom.cpp:204: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynom.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynomIterator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/serialization/export.hpp:194: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynomIterator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MapPolynomIterator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MulOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /proj.stand/klemm/evolFIR-MPI/src/MulOperator.cpp:255: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MulOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/MulOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/Operator.o:/proj.stand/klemm/evolFIR-MPI/src/Operator.cpp:14: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/Operator.o:/proj.stand/klemm/evolFIR-MPI/src/Operator.cpp:14: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/PolyNormalizator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /proj.stand/klemm/evolFIR-MPI/src/PolyNormalizator.cpp:22: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/PolyNormalizator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/PolyNormalizator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/Polynom.o:/proj.stand/klemm/evolFIR-MPI/include/Polynom.h:177: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/Polynom.o:/proj.stand/klemm/evolFIR-MPI/include/Polynom.h:177: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/ShiftOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /proj.stand/klemm/evolFIR-MPI/src/ShiftOperator.cpp:28: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/ShiftOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/ShiftOperator.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/XExtractor.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/serialization/export.hpp:194: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/XExtractor.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/XExtractor.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/NTLAdaptor.o: In function `NTLAdaptor':
> /proj.stand/klemm/evolFIR-MPI/src/NTLAdaptor.cpp:5: multiple definition of `boost::archive::detail::guid_initializer<Component>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/proj.stand/klemm/evolFIR-MPI/src/AddOperator.cpp:128: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/NTLAdaptor.o: In function `NTLAdaptor':
> /usr/include/boost/archive/detail/oserializer.hpp:148: multiple definition of `boost::archive::detail::guid_initializer<Polynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/boost/archive/detail/oserializer.hpp:148: first defined here
> /proj.stand/klemm/evolFIR-MPI/src/share/NTLAdaptor.o: In function `destroy<std::map<int, Component*, std::less<int>, std::allocator<std::pair<const int, Component*> > > >':
> /usr/include/c++/4.1.0/bits/stl_tree.h:1262: multiple definition of `boost::archive::detail::guid_initializer<MapPolynom>::instance'
> /proj.stand/klemm/evolFIR-MPI/src/share/AddOperator.o:/usr/include/c++/4.1.0/bits/stl_tree.h:1262: first defined here
> collect2: ld returned 1 exit status