帮助编译和使用boostc++;图书馆 我正在研究一个C++项目,我想使用Boost的序列化库。我从boost的主页下载并安装了最新的boost库

帮助编译和使用boostc++;图书馆 我正在研究一个C++项目,我想使用Boost的序列化库。我从boost的主页下载并安装了最新的boost库,c++,boost-serialization,bjam,C++,Boost Serialization,Bjam,当我试图编译并运行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_point

当我试图编译并运行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&)':
/usr/local/include/boost/archive/detail/iseralizer.hpp:173:未定义对“boost::archive::archive_exception::~archive_exception()”的引用
/demo.o:在函数“void boost::archive::detail::save_non_pointer_type::save_standard::invoke(boost::archive::text_oarchive&,bus_schedule::trip_info const&)”中:
/usr/local/include/boost/archive/detail/oserializer.hpp:253:对“boost::archive::detail::basic\u oarchive::save\u对象(void const*,boost::archive::detail::basic\u oserializer const&)”的未定义引用
./demo.o:在函数“void boost::archive::save_access::end_preamble(boost::archive::text_oarchive&)”中:
/usr/local/include/boost/archive/detail/oserializer.hpp:83:对“boost::archive::detail::basic_oarchive::end_preamble()的未定义引用”
./demo.o:在函数“void boost::archive::detail::load\u pointer\u type::invoke(boost::archive::text\u iarchive&,bus\u route*&)”中:
/usr/local/include/boost/archive/detail/iseralizer.hpp:518:boost::archive::detail::basic_iarchive::load_pointer(void*&,boost::archive::detail::basic_pointer_iseralizer const*,boost::archive::detail::basic_pointer_iseralizer const*(*)(boost::serialization::extended_type_info const&)'
./demo.o:在函数“void boost::archive::detail::save\u pointer\u type::non\u多态::save(boost::archive::text\u oarchive&,bus\u route&)”中:
<>我是C++新手和Boost,所以任何帮助都会被赏识。
谢谢

您需要链接到Boost.Serialization库。查看Boost的入门部分。

您可能需要链接到序列化库。在
/usr/lib
中查找名称类似于
libboost\u序列化的内容。然后告诉
g++
(您没有说您正在使用哪个编译器)您要使用(链接到)这个库:

g++main.cpp-lboost\u序列化

也就是说,如果库的名称是
/usr/lib/libboost\u serialization.a
则省略首字母
lib
和扩展名


祝你好运

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

我试图通过直接从boost的网站下载boost库来手动安装它们,发现所有库都安装在/usr/local/lib和/usr/local/include/boost/中。在反复遇到我最初的错误后,我决定看看Synaptic软件包管理器是否能在安装boost库方面做得更好。我选择了'libboost1.40-all-dev'来安装所有的东西,但仍然没有任何东西能正常工作

最后,我决定重新开始,因此手动删除了/usr/local/include中的boost/目录,并删除了/usr/local/lib中的所有libboost文件。然后,我将所有boost库标记为完全删除,以删除所有内容。卸载所有boost库后,我回到Synaptic软件包管理器,再次选择“libboost1.40-all-dev”

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

g++ demo.cpp -lboost_serialization
它立即编译了。运行可执行文件显示的结果正是我想要的结果。此外,我将该文件移回Eclipse项目中,向链接器库添加了“boost_序列化”,并尝试构建该项目。一切又完美地工作了,因为我可以构建项目并运行示例代码

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


再次感谢各位,你们帮了大忙。

@user475505链接器错误。检查你是否添加了链接库。谢谢你的快速回复,我仍然有一些问题,但我认为我至少走在了正确的轨道上。我忘了在最初的帖子中提到我正在使用EclipseCDT进行开发。我认为你们都是对的,这是一个链接器的问题,所以在搜索了更多的内容后,我发现了一篇关于在eclipse中设置boost的文章,我必须在链接器设置的library字段下添加boost_序列化。这样做之后,我仍然会得到相同的错误。关于如何使用Eclipse设置boost,还有什么建议吗?感谢您查看Ecplips传递给g++的命令行参数。然后确保链接部分正确(您可以尝试在Ecplipse之外运行该命令)。如果你没有进展,就把它贴在这里。我仍然有问题,这里是Eclipse正在使用的链接命令:“g++-o”Testbench./demo.o-lboost_serialization”我从Eclipse外部的命令行中得到相同的错误。谢谢你的帮助,到目前为止,g++找到库了吗?如果没有,则需要将目录添加到libboost_serialization.a。类似这样的东西:g++-o Testbench demo.o-lboost_serialization-L/usr/lib