Ibrahim Beicker wrote:
I had to port a multi-process application to 64 bits and I rely on boost serialization to send messages, that are maps of key-values, into Microsoft queues to the other modules. It works just fine into 32 bits but when I run it in 64 the constructor throws an "invalid signature" exception
void Message::fromBinary( const std::string& data ) { std::stringstream ss; ss << data; boost::archive::binary_iarchive ia(ss); //exception here
ia >> *this; }
I managed to debug into basic_binary_iarchive.ipp and this 'if' @ line 72 fails
if(file_signature != BOOST_ARCHIVE_SIGNATURE())
boost::serialization::throw_exception(archive_exception(archive_exception::invalid_signature));
inside this file I have no debug symbols so I don't know the values of 'file_signature' and 'BOOST_ARCHIVE_SIGNATURE' or where BOOST_ARCHIVE_SIGNATURE is defined.
Some additional information: the modules are all running on the same machine, on windows 7 64-bits, and compiled by visual studio 2010 x64 including static boost libraries 1.45.
What causes this and how can I fix it?
binary archives are not portable across architectures. Specifically it is not possble to create a binary archive with 32 bit code and and read that archive with 64 bit code. You'll have to write your achive to some portable format such as a text archive. Then you can load it on any platform. Robert Ramey