帮助编译和使用boost c ++库

时间:2010-10-14 08:24:31

标签: c++ boost-serialization boost-bjam

我正在开发一个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 个答案:

答案 0 :(得分:12)

据推测,您需要链接到序列化库。在/usr/lib中查看名称与libboost_serialization类似的内容。然后告诉g++(你没有说你正在使用哪个编译器)你要使用(链接到)这个库:

g++ main.cpp -lboost_serialization

即。如果图书馆的名称为/usr/lib/libboost_serialization.a,则会遗漏最初的lib和扩展名。

祝你好运!

答案 1 :(得分:5)

感谢大家的帮助。我终于解决了我的问题,虽然我的解决方案是相当反高潮的,而且可能没那么有用。

我曾尝试手动安装boost库,直接从boost的网站下载它们,并发现所有库都安装在/ usr / local / lib和/ usr / local / include / boost /中。在反复遇到我原来的错误之后,我决定看看Synaptic Package Manager是否能够“更好”地安装boost库。我选择'libboost1.40-all-dev'来安装所有东西,但仍然没有任何工作。

最后,我决定重新开始,所以手动删除了/ usr / local / include中的boost /目录,并删除了/ usr / local / lib中的所有libboost文件。然后我标记了所有的boost库以完全删除以删除所有内容。一旦卸载了所有的boost库,我就会回到Synaptic Package Manager,再次选择“libboost1.40-all-dev”。

当我再次重新安装库时,我不确定究竟发生了什么变化,但一切都开始重新开始了。我首先从命令行进行测试,并尝试使用以下命令再次从boost的网站编译demo.cpp:

g++ demo.cpp -lboost_serialization

并立即编译。运行可执行文件显示我正在寻找的结果。此外,我将文件移回Eclipse项目,将“boost_serialization”添加到Linker库,并尝试构建项目。一切都运行得很好,因为我可以构建项目并运行示例代码。

我真的没有解释为什么这会解决我的问题,但对于遇到类似问题的其他人,我能给出的最好建议是不要直接安装boost库,而是让Synaptic Package Manager处理所有问题

再次感谢大家,你们非常乐于助人。

答案 2 :(得分:1)

您需要链接到Boost.Serialization库。请参阅Boost的入门page