Помогите собрать и использовать библиотеки boost C++
Я работаю над проектом C++, где я хотел бы использовать библиотеки сериализации boost. Я скачал и установил новейшие библиотеки Boost с домашней страницы Boost.
Когда я попытался скомпилировать и запустить один из примеров демонстрационной сериализации boost, я получил всевозможные ошибки, которые выглядели так:
/usr/local/include/boost/archive/detail/iserializer.hpp:173: undefined reference to `boost::archive::archive_exception::~archive_exception()'
./demo.o: In function `void boost::archive::detail::save_non_pointer_type<boost::archive::text_oarchive>::save_standard::invoke<bus_schedule::trip_info>(boost::archive::text_oarchive&, bus_schedule::trip_info const&)':
/usr/local/include/boost/archive/detail/oserializer.hpp:253: undefined reference to `boost::archive::detail::basic_oarchive::save_object(void const*, boost::archive::detail::basic_oserializer const&)'
./demo.o: In function `void boost::archive::save_access::end_preamble<boost::archive::text_oarchive>(boost::archive::text_oarchive&)':
/usr/local/include/boost/archive/detail/oserializer.hpp:83: undefined reference to `boost::archive::detail::basic_oarchive::end_preamble()'
./demo.o: In function `void boost::archive::detail::load_pointer_type<boost::archive::text_iarchive>::invoke<bus_route*>(boost::archive::text_iarchive&, bus_route*&)':
/usr/local/include/boost/archive/detail/iserializer.hpp:518: undefined reference to `boost::archive::detail::basic_iarchive::load_pointer(void*&, boost::archive::detail::basic_pointer_iserializer const*, boost::archive::detail::basic_pointer_iserializer const* (*)(boost::serialization::extended_type_info const&))'
./demo.o: In function `void boost::archive::detail::save_pointer_type<boost::archive::text_oarchive>::non_polymorphic::save<bus_route>(boost::archive::text_oarchive&, bus_route&)':
Я новичок в C++ и повышение, поэтому любая помощь будет оценена.
Спасибо
3 ответа
Спасибо всем за вашу помощь. Я наконец-то решил свою проблему, хотя мое решение довольно анти-климатическое и, вероятно, не настолько информативное.
Я попытался установить библиотеки boost вручную, загрузив их непосредственно с веб-сайта boost, и обнаружил, что все библиотеки были установлены в /usr/local/lib и /usr/local/include/boost/ . После неоднократных ошибок, с которыми я столкнулся, я решил посмотреть, сможет ли менеджер пакетов Synaptic "лучше" выполнить установку библиотек надстроек. Я выбрал "libboost1.40-all-dev", чтобы установить все, но все равно ничего не получалось.
Наконец, я решил начать заново, поэтому вручную удалил каталог boost / в / usr / local / include и удалил все файлы libboost в /usr/local/lib. Затем я отметил все библиотеки надстроек для полного удаления, чтобы удалить все. После удаления всех надстроечных библиотек я вернулся к диспетчеру пакетов Synaptic, еще раз выбрав "libboost1.40-all-dev".
Я не уверен, что именно изменилось, когда я снова переустановил библиотеки, но все снова заработало. Я сначала проверил из командной строки и попытался скомпилировать demo.cpp с сайта boost еще раз с помощью следующей команды:
g++ demo.cpp -lboost_serialization
и это скомпилировано сразу. Запуск исполняемого файла отображал именно те результаты, которые я искал. Кроме того, я переместил файл обратно в свой проект Eclipse, добавил "boost_serialization" в библиотеки Linker и попытался построить проект. Все снова заработало отлично, так как я мог собрать проект и запустить пример кода.
На самом деле у меня нет объяснения, почему это решило мою проблему, но всем, кто сталкивается с подобными проблемами, лучший совет, который я могу дать, - НЕ устанавливать напрямую библиотеки надстроек, а скорее всего, чтобы Synaptic Package Manager обрабатывал все.
Еще раз спасибо всем, вы были очень полезны.
Предположительно, вам нужно связаться с библиотекой сериализации. Загляни в /usr/lib
для чего-то с именем, похожим на libboost_serialization
, Тогда расскажи g++
(вы не сказали, какой компилятор вы используете) вы хотите использовать (ссылку на) эту библиотеку:
g++ main.cpp -lboost_serialization
Т.е. если имя библиотеки /usr/lib/libboost_serialization.a
вы опускаете начальное lib
и расширение.
Удачи!
Вам нужно связаться с библиотекой Boost.Serialization. Смотрите начальную страницу Boost.