首页 文章

boost serialization undefined reference [复制]

提问于
浏览
-2

这个问题在这里已有答案:

#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 to void 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 to void ScenarioResult :: serialize(boost :: mpi :: packed_iarchive&,unsigned int)'collect2:error: ld返回1退出状态

1 回答

  • 3

    实际上,对问题进行编辑会很好,但是,我认为我对于发生了什么有一个想法:看起来你正在尝试单独编译一个函数模板 .

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

    g++ ScenarioResult.cpp -lboost_serialization
    

    这就是抛出错误 .

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

    快速解决方案是 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);
    

相关问题