When trying to configure deal.II with the system version of Boost (1.68.0) I get the error "Performing Test BOOST_SERIALIZATION_USABLE - Failed". Thus I tried running the test separately, which resulted in a memory access error (double free). I used the following code from the test folder:
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // test_dll_exported.cpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // should pass compilation and execution // This is an overly complex test. The purpose of this test is to // demonstrate and test the ability to serialize a hierarchy of class // through a base class pointer even though that class might be // implemented in different dlls and use different extended type info // systems. // // polymorphic_ base is locally declared and defined. It use the // "no_rtti" extended type info system. // polymorphic_derived1 is locally declared and defined. It uses // the default "type_id" extended type info system // polymorphic_derived2 is declared in polymorphic_derived.hpp // and defined in dll_polymorphic_derived2. It uses the typeid // system. #include <cstddef> // NULL #include <fstream> #include <iostream> #include <boost/config.hpp> #include <boost/archive/archive_exception.hpp> #include <boost/serialization/base_object.hpp> #include <boost/serialization/export.hpp> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include "polymorphic_base.hpp" #include "polymorphic_derived2.hpp" // save exported polymorphic class void save_exported(const char *testfile) { std::ofstream os(testfile); boost::archive::text_oarchive oa(os); polymorphic_base *rb2 = new polymorphic_derived2; polymorphic_derived2 *rd21 = new polymorphic_derived2; // export will permit correct serialization // through a pointer to a base class oa << BOOST_SERIALIZATION_NVP(rb2); oa << BOOST_SERIALIZATION_NVP(rd21); delete rb2; delete rd21; } // save exported polymorphic class void load_exported(const char *testfile) { std::ifstream is(testfile); boost::archive::text_iarchive ia(is); polymorphic_base *rb2 = NULL; polymorphic_derived2 *rd21 = NULL; // export will permit correct serialization // through a pointer to a base class ia >> BOOST_SERIALIZATION_NVP(rb2); assert( boost::serialization::type_info_implementation<polymorphic_derived2> ::type::get_const_instance() == * boost::serialization::type_info_implementation<polymorphic_base> ::type::get_const_instance().get_derived_extended_type_info(*rb2 )); ia >> BOOST_SERIALIZATION_NVP(rd21); assert( boost::serialization::type_info_implementation<polymorphic_derived2> ::type::get_const_instance() == * boost::serialization::type_info_implementation <polymorphic_derived2> ::type::get_const_instance().get_derived_extended_type_info(* rd21)); delete rb2; delete rd21; } int main( int /* argc */, char* /* argv */[] ) { std::cout << "Exporting test file\n"; save_exported("testfile"); std::cout << "Test file exported, importing test file\n"; load_exported("testfile"); std::cout << "Test file imported, finished\n"; return EXIT_SUCCESS; } // EOF Nevertheless it works when changing it to /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // test_dll_exported.cpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // should pass compilation and execution // This is an overly complex test. The purpose of this test is to // demonstrate and test the ability to serialize a hierarchy of class // through a base class pointer even though that class might be // implemented in different dlls and use different extended type info // systems. // // polymorphic_ base is locally declared and defined. It use the // "no_rtti" extended type info system. // polymorphic_derived1 is locally declared and defined. It uses // the default "type_id" extended type info system // polymorphic_derived2 is declared in polymorphic_derived.hpp // and defined in dll_polymorphic_derived2. It uses the typeid // system. #include <cstddef> // NULL #include <fstream> #include <iostream> #include <boost/config.hpp> #include <boost/archive/archive_exception.hpp> #include <boost/serialization/base_object.hpp> #include <boost/serialization/export.hpp> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include "polymorphic_base.hpp" #include "polymorphic_derived2.hpp" // save exported polymorphic class void save_exported(const char *testfile) { std::ofstream os(testfile); boost::archive::text_oarchive oa(os); polymorphic_base *rb2 = new polymorphic_derived2; polymorphic_derived2 *rd21 = new polymorphic_derived2; // export will permit correct serialization // through a pointer to a base class // oa << BOOST_SERIALIZATION_NVP(rb2); oa << BOOST_SERIALIZATION_NVP(rd21); delete rb2; delete rd21; } // save exported polymorphic class void load_exported(const char *testfile) { std::ifstream is(testfile); boost::archive::text_iarchive ia(is); polymorphic_base *rb2 = NULL; polymorphic_derived2 *rd21 = NULL; // export will permit correct serialization // through a pointer to a base class /* ia >> BOOST_SERIALIZATION_NVP(rb2); assert( boost::serialization::type_info_implementation<polymorphic_derived2> ::type::get_const_instance() == * boost::serialization::type_info_implementation<polymorphic_base> ::type::get_const_instance().get_derived_extended_type_info(*rb2));*/ ia >> BOOST_SERIALIZATION_NVP(rd21); assert( boost::serialization::type_info_implementation<polymorphic_derived2> ::type::get_const_instance() == * boost::serialization::type_info_implementation <polymorphic_derived2> ::type::get_const_instance().get_derived_extended_type_info(* rd21)); delete rb2; delete rd21; } int main( int /* argc */, char* /* argv */[] ) { std::cout << "Exporting test file\n"; save_exported("testfile"); std::cout << "Test file exported, importing test file\n"; load_exported("testfile"); std::cout << "Test file imported, finished\n"; return EXIT_SUCCESS; } // EOF Is that a general problem, or a problem just for my system? Or is that a boost-related error, and thus not related to deal.II? -- The deal.II project is located at http://www.dealii.org/ For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en --- You received this message because you are subscribed to the Google Groups "deal.II User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to dealii+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.