【问题标题】:boost serialization undefined reference [duplicate]提升序列化未定义参考
【发布时间】:2016-09-22 08:19:52
【问题描述】:
#include <boost/serialization/vector.hpp>

template<class Archive>
void ScenarioResult::serialize(Archive & ar, const unsigned int version)
{
                ar & scenario; 
}

-lboost_serialization 包含在链接器选项中

在函数serialize<boost::mpi::packed_oarchive, ScenarioResult>': /people/v/boost_1_59_0/boost/serialization/access.hpp:116: undefined reference tovoid ScenarioResult::serialize(boost::mpi::packed_oarchive&, unsigned int)' Integration.o:在函数serialize<boost::mpi::packed_iarchive, ScenarioResult>': /people/v/boost_1_59_0/boost/serialization/access.hpp:116: undefined reference tovoid ScenarioResult::serialize(boost::mpi::packed_iarchive&, unsigned int)' collect2:错误:ld 返回 1 个退出状态

【问题讨论】:

    标签: c++ serialization boost


    【解决方案1】:

    实际上,对问题进行编辑会很好,但是,我想我知道发生了什么:看起来您正在尝试单独编译一个函数模板。

    这意味着您正在执行以下操作:

    g++ ScenarioResult.cpp -lboost_serialization
    

    这是抛出错误。

    ScenarioResult::serialize 是a template function,这意味着它会根据传递给 is 的模板参数的类型进行实例化。因此,在编译时,编译器不知道确切的类型,因此无法生成代码。

    快速解决方法是to move the implementation of your serialize method into the header file of the class。或者,explicitly instansiate it in the cpp file 如下:

    void ScenarioResult::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive &ar, const unsigned int);
    

    【讨论】:

    • 谢谢!即使传递了一个整数向量,text_oarchive 仍然是模板参数吗?
    • 把它移到标题,这样更好
    • 非常感谢! :)
    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2015-01-14
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多