【问题标题】:Help compiling and using boost c++ libraries帮助编译和使用 boost c++ 库
【发布时间】:2011-04-25 06:50:52
【问题描述】:

我正在开发一个 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++ 和 boost 新手,因此我们将不胜感激。

谢谢

【问题讨论】:

  • @user475505 链接器错误。检查您是否添加了用于链接的库。

标签: c++ boost-serialization bjam


【解决方案1】:

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

我曾尝试手动安装 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_serialization”添加到链接器库,并尝试构建项目。一切都再次完美运行,因为我可以构建项目并运行示例代码。

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

再次感谢大家,你们非常有帮助。

【讨论】:

    【解决方案2】:

    大概你需要链接到序列化库。在/usr/lib 中查看名称类似于libboost_serialization 的内容。然后告诉g++(你没有说你使用的是哪个编译器)你想使用(链接到)这个库:

    g++ main.cpp -lboost_serialization

    即如果库的名称是 /usr/lib/libboost_serialization.a,则省略初始的 lib 和扩展名。

    祝你好运!

    【讨论】:

    • 感谢您的快速回复,我仍然遇到一些麻烦,但我认为我至少在正确的轨道上前进。我忘了在原始帖子中提到我正在使用 Eclipse CDT 进行开发。我认为你们都是对的,因为这是一个链接器问题,所以在搜索了一点之后,我发现了一篇关于在 eclipse 中设置 boost 的文章,我必须在链接器设置的库字段下添加 boost_serialization。这样做之后,我仍然得到同样的错误。关于如何使用 Eclipse 设置 boost 的更多建议?谢谢
    • 尝试查看 Ecplips 传递给 g++ 的命令行参数。然后确保链接部分正确(您可以尝试在 Ecplipse 之外运行该命令)。如果您不前进,请在此处发布。
    • 我还是有问题,这里是 Eclipse 使用的链接命令: "g++ -o"Testbench" ./demo.o -lboost_serialization" 我从外面的命令行得到同样的错误日食。感谢您迄今为止的帮助
    • g++ 找到库了吗?如果没有,则需要将目录添加到 libboost_serialization.a。像这样:g++ -o Testbench demo.o -lboost_serialization -L/usr/lib
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2013-09-15
      相关资源
      最近更新 更多