Boost.Serialization // Basic Usage Problem for your help!

Dear All, I got a trouble with boost::serialization library and need your help. 1) I am working with FC4 on my laptop. GCC 4.0.2 is known handle this library pretty well according to yesterdays's report. http://boost.sourceforge.net/regression-logs/cs-Linux.html 2) try to test the basic sample obtained on webpage posted by Jeff Cogswell: #include <fstream> #include <iostream> //#include <boost/serialization/base_object.hpp> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/detail/basic_iarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/serialization/utility.hpp> #include <boost/serialization/access.hpp> using namespace std; class Vertex { private: friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & x; ar & y; } double x; double y; public: Vertex() {} // Serialization requires a default constructor Vertex(double newX, double newY) : x(newX), y(newY) {} double getX() const { return x; } double getY() const { return y; } void dump() { cout << x << " " << y << endl; } }; int main() { Vertex v1(1.5, 2.5); std::ofstream ofs("myfile.vtx"); boost::archive::text_oarchive oa(ofs); oa << v1; ofs.close(); return 0; } 3) try to compile and link it by the following command: g++ -lboost_serialization testoa.cpp -otestoa and got a bunch of errors. 4) The errors looks as this: /tmp/ccS4C1Wt.o(.gnu.linkonce.r._ZTIN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEEE[typeinfo for boost::archive::detail::common_oarchive<boost::archive::text_oarchive>]+0x10): undefined reference to `typeinfo for boost::archive::detail::basic_oarchive' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost13serialization6detail27extended_type_info_typeid_0C2Ev[boost::serialization::detail::extended_type_info_typeid_0::extended_type_info_typeid_0()]+0x7): In function `boost::serialization::detail::extended_type_info_typeid_0::extended_type_info_typeid_0()': testoa.cpp: undefined reference to `boost::serialization::detail::extended_type_info_typeid_0::type_info_key' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEED2Ev[boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()]+0x18): In function `boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()': testoa.cpp: undefined reference to `boost::archive::detail::basic_oarchive::~basic_oarchive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEED0Ev[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()]+0x3d): In function `boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()': testoa.cpp: undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEED0Ev[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()]+0x69):testoa.cpp: undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEED1Ev[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()]+0x3d): In function `boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()': testoa.cpp: undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEED1Ev[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()]+0x69):testoa.cpp: undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEED2Ev[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()]+0x3d): In function `boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()': testoa.cpp: undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEED2Ev[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()]+0x69):testoa.cpp: more undefined references to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()' follow /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEED1Ev[boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()]+0x18): In function `boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()': testoa.cpp: undefined reference to `boost::archive::detail::basic_oarchive::~basic_oarchive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEED0Ev[boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()]+0x18): In function `boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()': testoa.cpp: undefined reference to `boost::archive::detail::basic_oarchive::~basic_oarchive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEEC2Ev[boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::common_oarchive()]+0xe): In function `boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::common_oarchive()': testoa.cpp: undefined reference to `boost::archive::detail::basic_oarchive::basic_oarchive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive11save_access14save_primitiveINS0_13text_oarchiveESsEEvRT_RKT0_[void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >(boost::archive::text_oarchive&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x20): In function `void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >(boost::archive::text_oarchive&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': testoa.cpp: undefined reference to `boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost13serialization25extended_type_info_typeidIK6VertexEC1Ev[boost::serialization::extended_type_info_typeid<Vertex const>::extended_type_info_typeid()]+0x28): In function `boost::serialization::extended_type_info_typeid<Vertex const>::extended_type_info_typeid()': testoa.cpp: undefined reference to `boost::serialization::extended_type_info::self_register()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive6detail21save_non_pointer_typeINS0_13text_oarchiveE6VertexE4save7invokexERS3_RKS4_[boost::archive::detail::save_non_pointer_type<boost::archive::text_oarchive, Vertex>::save::invokex(boost::archive::text_oarchive&, Vertex const&)]+0x17): In function `boost::archive::detail::save_non_pointer_type<boost::archive::text_oarchive, Vertex>::save::invokex(boost::archive::text_oarchive&, Vertex const&)': testoa.cpp: undefined reference to `boost::archive::detail::basic_oarchive::save_object(void const*, boost::archive::detail::basic_oserializer const&)' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEE4initEv[boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::init()]+0x18): In function `boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::init()': testoa.cpp: undefined reference to `boost::archive::ARCHIVE_SIGNATURE' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive6detail15common_oarchiveINS0_13text_oarchiveEE4initEv[boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::init()]+0x98):testoa.cpp: undefined reference to `boost::archive::ARCHIVE_VERSION' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEEC2ERSoj[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::basic_ostream<char, std::char_traits<char> >&, unsigned int)]+0x21): In function `boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::basic_ostream<char, std::char_traits<char> >&, unsigned int)': testoa.cpp: undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::basic_text_oprimitive(std::basic_ostream<char, std::char_traits<char> >&, bool)' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive18text_oarchive_implINS0_13text_oarchiveEEC2ERSoj[boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::basic_ostream<char, std::char_traits<char> >&, unsigned int)]+0x8c):testoa.cpp: undefined reference to `boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost7archive19basic_text_oarchiveINS0_13text_oarchiveEE13save_overrideERKNS0_15class_name_typeEi[boost::archive::basic_text_oarchive<boost::archive::text_oarchive>::save_override(boost::archive::class_name_type const&, int)]+0x54): In function `boost::archive::basic_text_oarchive<boost::archive::text_oarchive>::save_override(boost::archive::class_name_type const&, int)': testoa.cpp: undefined reference to `boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /tmp/ccS4C1Wt.o(.gnu.linkonce.t._ZN5boost15smart_cast_impl9referenceIRNS_7archive13text_oarchiveEE11polymorphic5cross4castINS2_6detail14basic_oarchiveEEES4_RT_[boost::archive::text_oarchive& boost::smart_cast_impl::reference<boost::archive::text_oarchive&>::polymorphic::cross::cast<boost::archive::detail::basic_oarchive>(boost::archive::detail::basic_oarchive&)]+0xe): In function `boost::archive::text_oarchive& boost::smart_cast_impl::reference<boost::archive::text_oarchive&>::polymorphic::cross::cast<boost::archive::detail::basic_oarchive>(boost::archive::detail::basic_oarchive&)': testoa.cpp: undefined reference to `typeinfo for boost::archive::detail::basic_oarchive' collect2: ld returned 1 exit status 5) Another compile and link issue was talked about on boost user-list half a year ago(http://lists.boost.org/boost-users/2005/05/11624.php) However, I could not decipher the my correct answer from that. My error looks different from the errors posted there. 6) Thanks in advance for your time and help with this issue. I think I might miss some basic points on this library. Henry .K. Wang Jan 2, 2006

Given that the linker is complaining of undefined symbols, you might want to check your procedure for building boost libraries. Robert Ramey
participants (2)
-
Feng Wang
-
Robert Ramey