2011-11-13 4 views
3

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 비트 바이너리를 추가하거나 기본 프로젝트를 부스트 라이브러리와 일치하도록 설정해야합니다. 프로젝트가 64 비트 대신 32 비트 바이너리를 생성하도록 설정하십시오. Xcode 4.2에서는 프로젝트 속성에서 빌드 설정의 아키텍처 섹션을 사용합니다.

0

제 경우에는 컴파일러 gcc6 (또는 gcc5에 동일한 문제가 있음)이 사용 되었기 때문입니다. 그리고 내 코드는 부스트 라이브러리와 함께 다른 컴파일 플래그를 사용했다. 당신이, 당신이 사용하는 모든 호환되지 않는 libs와 컴파일 컴파일러 옵션을

-D_GLIBCXX_USE_CXX11_ABI=1 

그것을 할 다음 프로젝트를 다시 빌드 할 수있는 경우 상세 설명은이 link

입니다. 여전히 연결할 수 없으면 변경 프로젝트의 makefile 컴파일러 옵션을 0으로 추가하십시오.

-D_GLIBCXX_USE_CXX11_ABI=0 
관련 문제