[MacPorts] #36953: Basic serialization code throws exception (boost)
MacPorts
noreply at macports.org
Sat Nov 10 14:40:52 PST 2012
#36953: Basic serialization code throws exception (boost)
--------------------------+--------------------------------
Reporter: dario.izzo@… | Owner: macports-tickets@…
Type: defect | Status: new
Priority: High | Milestone:
Component: ports | Version: 2.1.2
Keywords: | Port:
--------------------------+--------------------------------
Lets take the basic code below (taken from the basic tutorial from boost
developers
http://www.boost.org/doc/libs/1_52_0/libs/serialization/doc/tutorial.html)
{{{
#include <fstream>
// include headers that implement a archive in simple text format
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
/////////////////////////////////////////////////////////////
// gps coordinate
//
// illustrates serialization for a simple type
//
class gps_position
{
private:
friend class boost::serialization::access;
// When the class Archive corresponds to an output archive, the
// & operator is defined similar to <<. Likewise, when the class
Archive
// is a type of input archive the & operator is defined similar to >>.
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & degrees;
ar & minutes;
ar & seconds;
}
int degrees;
int minutes;
float seconds;
public:
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};
int main() {
// create and open a character archive for output
std::ofstream ofs("filename");
// create class instance
const gps_position g(35, 59, 24.567f);
// save data to archive
{
boost::archive::text_oarchive oa(ofs);
// write class instance to archive
oa << g;
// archive and stream closed when destructors are called
}
// ... some time later restore the class instance to its orginal state
gps_position newg;
{
// create and open an archive for input
std::ifstream ifs("filename");
boost::archive::text_iarchive ia(ifs);
// read class state from archive
ia >> newg;
// archive and stream closed when destructors are called
}
return 0;
}
}}}
and compile it with
{{{
g++ boost_archives.cpp -L/opt/local/lib/ -lboost_serialization-mt
}}}
where:
{{{
g++ --version
}}}
returns:
{{{
g++ (MacPorts gcc47 4.7.2_2) 4.7.2
}}}
the following exception is caught!!
{{{
(libc++abi.dylib: terminate called throwing an exception)
}}}
I also tried gcc 4.5 and boost 1.49, 1.50, 1.51 -> no difference.
Conclusion: The mac port boost serialization library seems to not work on
osx 10.8.2!!!
--
Ticket URL: <https://trac.macports.org/ticket/36953>
MacPorts <http://www.macports.org/>
Ports system for Mac OS
More information about the macports-tickets
mailing list