Я создаю проект, который требует повышения функции text_oarchive, и я получаю ошибку компоновщика при попытке ее создания.
Я установил Boost 1.55.0 на OS X 10.9
Информация моего компилятора сообщается как: $g++ --version
Настроено с помощью: --prefix =/Приложения /Xcode.app/Содержание/Разработчик /usr --with-gxx-include-dir =/usr/include/c++/4.2.1 Apple LLVM версия 5.0 (clang-500.2. 79) (на основе LLVM 3.3svn) Цель: x86_64-apple-darwin13.0.0 Модель темы: posix
Файл bootstrap.log в каталоге boost сообщает, что был использован "набор инструментов darwin". однако при создании из Eclipse в конце вывода сборки сообщается следующая ошибка:
"boost::archive::detail::basic_oarchive::~basic_oarchive()", referenced from:
::archive::detail::common_oarchive<boost::archive::text_oarchive>::~common_oarchive() in msgQueProducer.o
"typeinfo for boost::archive::archive_exception", referenced from:
void boost::serialization::throw_exception<boost::archive::archive_exception> (boost::archive::archive_exception const&) in msgQueProducer.o
"typeinfo for boost::archive::detail::basic_oarchive", referenced from:
typeinfo for boost::archive::detail::common_oarchive<boost::archive::text_oarchive> in msgQueProducer.o
"vtable for boost::archive::archive_exception", referenced from:
boost::archive::archive_exception::archive_exception(boost::archive::archive_exception const&) in msgQueProducer.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [msgQueProducer] Error 1
Проект строится отлично, когда следующая строка кода удалена из проекта:
boost::archive::text_oarchive oa(oss);
Мне интересно, если бы я построил библиотеки boost, я должен был указать некоторые параметры архитектуры (переходя к инструменту. /b2 что-то вроде "./b2 toolset = darwin cxxflags =" -arch i386 "address-model = 64 architecture = x86 этап "). Тем не менее, я строю с другой функцией повышения, используемой для межпроцессного обмена сообщениями, и проект строит с ним все включено.
Проект повышения включает в себя:
#include <boost/interprocess/ipc/message_queue.hpp>
#include <boost/archive/text_oarchive.hpp>
Что мне нужно сделать, чтобы использовать boost :: text_oarchive в моей системе OS X?
Спасибо заранее, Уолт
Вам нужно связать библиотеку расширенной сериализации. Добавьте -lboost_serialization
к вашим LDFLAGS
.