2011-11-13 61 views
3

我想使用Boost庫序列化我的程序中的對象。這是我第一次使用它,它給我一些問題。Boost序列化:鏈接到庫

在我的節目我已經實現了「序列化」的方法,幷包括以下內容:

#include <fstream> 
#include <boost/archive/text_oarchive.hpp> 
#include <boost/archive/text_iarchive.hpp> 

現在,當我建我收到以下錯誤:

Undefined symbols for architecture x86_64: 
    "boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::basic_ostream<char, std::char_traits<char> >&, unsigned int)", referenced from: 
     boost::archive::text_oarchive::text_oarchive(std::basic_ostream<char, std::char_traits<char> >&, unsigned int)in Main.o 
    "boost::archive::detail::basic_oarchive::~basic_oarchive()", referenced from: 
     boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()in Main.o 
     boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()in Main.o 
     boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive()in Main.o 
    "boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::~basic_text_oprimitive()", referenced from: 
     boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()in Main.o 
     boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()in Main.o 
     boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()in Main.o 
    "vtable for boost::archive::archive_exception", referenced from: 
     boost::archive::archive_exception::archive_exception(boost::archive::archive_exception const&)in Main.o 
    "typeinfo for boost::archive::archive_exception", referenced from: 
     void boost::serialization::throw_exception<boost::archive::archive_exception>(boost::archive::archive_exception const&)in Main.o 
    "boost::archive::archive_exception::~archive_exception()", referenced from: 
     void boost::serialization::throw_exception<boost::archive::archive_exception>(boost::archive::archive_exception const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::tracking_type>(boost::archive::tracking_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::object_reference_type>(boost::archive::object_reference_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::object_id_type>(boost::archive::object_id_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<unsigned int>(unsigned int const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::class_id_reference_type>(boost::archive::class_id_reference_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::class_id_type>(boost::archive::class_id_type const&)in Main.o 
     ... 
    "boost::archive::archive_exception::archive_exception(boost::archive::archive_exception::exception_code, char const*, char const*)", referenced from: 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::tracking_type>(boost::archive::tracking_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::object_reference_type>(boost::archive::object_reference_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::object_id_type>(boost::archive::object_id_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<unsigned int>(unsigned int const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::class_id_reference_type>(boost::archive::class_id_reference_type const&)in Main.o 
     void boost::archive::basic_text_oprimitive<std::basic_ostream<char, std::char_traits<char> > >::save<boost::archive::class_id_type>(boost::archive::class_id_type const&)in Main.o 
    "boost::archive::basic_text_oarchive<boost::archive::text_oarchive>::newtoken()", referenced from: 
     void boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save<boost::archive::tracking_type>(boost::archive::tracking_type const&)in Main.o 
     void boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save<boost::archive::object_reference_type>(boost::archive::object_reference_type const&)in Main.o 
     void boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save<boost::archive::object_id_type>(boost::archive::object_id_type const&)in Main.o 
     void boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save<unsigned int>(unsigned int const&)in Main.o 
     void boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save<boost::archive::class_id_reference_type>(boost::archive::class_id_reference_type const&)in Main.o 
     void boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save<boost::archive::class_id_type>(boost::archive::class_id_type const&)in Main.o 
    "boost::archive::detail::basic_oarchive::end_preamble()", referenced from: 
     void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, boost::archive::tracking_type>(boost::archive::text_oarchive&, boost::archive::tracking_type const&)in Main.o 
     void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, boost::archive::object_reference_type>(boost::archive::text_oarchive&, boost::archive::object_reference_type const&)in Main.o 
     void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, boost::archive::object_id_type>(boost::archive::text_oarchive&, boost::archive::object_id_type const&)in Main.o 
     void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, boost::archive::version_type>(boost::archive::text_oarchive&, boost::archive::version_type const&)in Main.o 
     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&)in Main.o 
     void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, boost::archive::class_id_reference_type>(boost::archive::text_oarchive&, boost::archive::class_id_reference_type const&)in Main.o 
     void boost::archive::save_access::save_primitive<boost::archive::text_oarchive, boost::archive::class_id_type>(boost::archive::text_oarchive&, boost::archive::class_id_type const&)in Main.o 
     ... 
    "boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from: 
     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&)in Main.o 
    "typeinfo for boost::archive::detail::basic_oarchive", referenced from: 
     typeinfo for boost::archive::detail::common_oarchive<boost::archive::text_oarchive>in Main.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
make: *** [stable] Error 1 

我不知道,如果問題是由於鏈接或與64位和32位體系結構有關。

我曾嘗試與鏈接:

-L/opt/local/lib/ -lboost_iostreams -lboost_serialization 

但它似乎並沒有做任何的區別。

回答

5

它看起來像你的助推庫捆綁只是32位;你將不得不重建它添加64位二進制文​​件,或者設置你的主項目以匹配boost庫。 嘗試設置您的項目以生成32位二進制而不是64位。在XCode 4.2中,您可以使用項目檢查器中的構建設置的體系結構部分。

0

在我的情況:這是因爲我用編譯器gcc6(或gcc5有同樣的問題)。我的代碼和boost庫使用了不同的編譯標誌。詳細解釋在這個link

如果你可以重新編譯您使用的所有不兼容庫,用編譯器選項的做法,

-D_GLIBCXX_USE_CXX11_ABI=1 

,然後重新生成項目。如果仍然無法鏈接,請將更改項目的makefile編譯器選項添加到0.

-D_GLIBCXX_USE_CXX11_ABI=0