[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